Personal site & blog built with SvelteKit and deployed to GitHub Pages.
- Framework: Svelte 5 + SvelteKit with the static adapter (pre-rendered output).
- Styling: Tailwind CSS v4 + shadcn-svelte primitives; global tokens live in
src/app.css. - Markdown: mdsvex + Shiki (poimandres theme) for syntax highlighting; padding/border tweaks happen in
svelte.config.js. - Runtime: Bun (see
bun.lockb); all scripts reference Bun’svitebinary. - Effects:
WaveCanvasdrives the background WebGL hero – keep shader/wave tweaks insidesrc/components/WaveCanvas.svelteand$lib/webgl/*.
- Install deps:
bun install - Start dev server:
bun run dev - Production build:
bun run build(runssvelte-kit syncautomatically, outputs tobuild/) - Preview build output locally:
bun run preview
- Lint JavaScript/Svelte:
bun run lint(oxlint,--max-warnings=0) - Auto-fix lint issues:
bun run lint:fix - Format:
bun run format:write
- Markdown lives in
src/posts/*.md. Each post must define front matter:--- title: Example Post date: "2024-11-16" description: Optional long description for SEO. excerpt: Optional shorter teaser used in meta tags. ---
- Posts are globbed through
src/lib/data/posts.js; the fetch helpers now skip caching in dev so edits show up without restarting. - Route transitions are defined in
$lib/animations/transitions.js; add new route IDs there if you introduce additional top-level pages.
- GitHub Actions workflow (
.github/workflows/main.yml) builds on pushes/PRs and deploys to GitHub Pages. - Static artifacts land in
build/; cache headers are managed viastatic/_headers. - Keep image assets in
static/images/so they’re copied verbatim duringbun run build.
- Navigation + hero animations rely on route IDs. If you add routes, update
transitionMappingsand the nav link list before shipping. WaveCanvasis globally mounted; avoid moving it out of the root layout so the pointer listeners and reduced-motion handling keep working.