Portfolio website. Built with VitePress. Automated everything. Public because transparency tools should be transparent.
🌐 Live: neoncode.systems
- Semantic Versioning - Automated via GitVersion based on git history
- Changelog - Auto-generated from conventional commits via git-cliff
- Release Notes - Structured release documentation via reno
- Task Runner - Streamlined workflows with Taskfile
- CI/CD - Automated build, version, and deploy pipeline
- Environment Management - Separate preview and production deployments
- Automated Housekeeping - Deployment cleanup and management
- VitePress - Vue-powered static site generator
- Taskfile - Modern task runner for project automation
- GitVersion - Semantic versioning from git history (Docker-based)
- git-cliff - Changelog generator from conventional commits
- reno - Release notes management
- pandoc - Document conversion for release notes
- Cloudflare Pages - Modern hosting and CDN
- GitHub Actions - CI/CD automation
- pnpm - Fast, disk space efficient package manager
- Node.js 22+
- pnpm 10+
- Task (installation)
- Docker (for GitVersion)
- Python with pip (for reno and git-cliff)
- pandoc (installation)
# Clone the repository
git clone https://github.com/yourusername/neoncode.systems.git
cd neoncode.systems
# Install dependencies
pnpm install
# Install Python tools
pip install reno git-cliff
# Start development server
task devtask dev # Start dev server at http://localhost:5173
task preview # Preview production build
task build # Build with changelog and release notes
task release # Full release (use PUSH=true to push to remote)Version numbers are calculated automatically using GitVersion based on git history and conventional commits. The version follows the TrunkBased workflow pattern:
- Feature branches:
0.x.0-branch.n - Main branch:
0.x.0
Version is exposed via VITE_APP_VERSION environment variable and accessible in components through import.meta.env.VITE_APP_VERSION.
git-cliff generates CHANGELOG.md from conventional commit messages:
# Commit format
type(scope): description
# Types: feat, fix, docs, style, refactor, test, choreThe changelog is automatically generated during build and includes all commits categorized by type.
reno manages structured release notes stored in releasenotes/notes/*.yaml. Each note can contain:
prelude- Introduction and overviewfeatures- New features and capabilitiesfixes- Bug fixes and correctionsother- Additional notes
Release notes are converted from RST to Markdown via pandoc with custom filters.
Build Process:
- GitVersion calculates semantic version from git history
- Temporary git tag created (
v{VERSION}) - git-cliff generates changelog
- reno generates release notes (converted via pandoc)
- Temporary tag removed
- VitePress builds static site with version injected
- Artifacts uploaded for deployment
Deployment Flow:
- Push to any branch → Build + Preview deployment
- Push to main → Build + Version bump + Tag + Production deployment + GitHub Release
Environments:
preview- Feature branches and non-main branchesproduction- Main branch only
A separate workflow manages Cloudflare deployment cleanup, maintaining organization and preventing deployment sprawl.
Martin Haberfellner | Organizational Systems Engineer