This project contains the source code for synthetic.software, a personal website that combines:
- A SvelteKit static site generator
- Custom TypeScript tools for content automation
- Cloudflare Workers deployment
- Nix development environment
- SvelteKit Site: Static site generator with TypeScript components and server-side rendering
- Blogroll Generator: TypeScript tool that fetches RSS feeds and generates YAML data files
- Changelog Generator: TypeScript tool that parses git history and generates version changelog
- Cloudflare Worker: Static asset serving worker
src/
content/ # Markdown content (articles, notes, feed items)
lib/components/ # Svelte components
routes/ # SvelteKit routes
scripts/ # Build automation scripts
static/ # Static assets (fonts, images, icons)
build/ # Build output directory
The project uses devenv for development environment management.
- Nix (I'm a fan of Determinate Nix)
- devenv.sh
Dependencies:
install- Install/update dependencies
Build:
build- Quick build (no content generation)build-full- Full build with content generationgenerate- Run content generation scripts only
Development:
dev- Start development serverpreview- Preview production build (run build first)serve- Full build + preview (convenience combo)
Quality:
check- Run type checkslint- Run linterformat- Format code
# First time setup
install
# Start development server
devThe development server will be available at http://localhost:5173 with hot module replacement.
# Quick iteration on existing content
build
preview
# Full production preview
serve
# Regenerate content only (blogroll, changelog)
generate
build
previewThe site supports multiple content types:
- Articles: Long-form technical content (
.svxfiles with frontmatter) - Feed: Short-form posts organized by date
- Notes: Curated links and brief observations
- Blogroll: Automatically generated from RSS feeds
All content is written in Markdown with frontmatter and processed at build time.
The project supports two build modes:
Quick Build (for iteration):
buildFull Build (for production):
build-fullThe full build process:
- Runs generation scripts (version, blogroll, changelog)
- Syncs SvelteKit routes
- Builds the site with Vite
- Removes JavaScript files (static-only output)
Build output is in build/.
The site is deployed to Cloudflare Workers with static asset serving.
The worker serves static assets from build/ as configured in wrangler.jsonc.
This project was previously built with Hugo and has been migrated to SvelteKit. The migration resulted in:
- 55% smaller build output
- 63% smaller HTML per page
- Better developer experience with TypeScript throughout
- Better tooling (Vite HMR, Prettier, ESLint)
See src/content/articles/hugo_to_sveltekit.svx for the full migration report and benchmarks.