The source for hello-sid.netlify.app — My portfolio website :)
A static SvelteKit site with a WebGL dither hero, scroll-driven phrase reel, CRT page transitions, and a build-time CV PDF generator.
- Site — hello-sid.netlify.app
- CV (PDF) — hello-sid.netlify.app/cv.pdf
- CV (in-browser print) — hello-sid.netlify.app/cv
- SvelteKit +
adapter-static— every route prerenders to plain HTML. - Three.js + custom GLSL — the dithered noise field on the hero and the project cards.
- Lenis — smooth scroll.
- JetBrains Mono via
@fontsource— Latin subset only. @napi-rs/canvas— Node-side renderer for the project thumbnails and the OG image.puppeteer-core— headless Chrome for the build-timecv.pdf.
No Tailwind. Vanilla CSS with custom-property tokens at src/lib/brand.css.
| Command | What it does |
|---|---|
npm run dev |
Vite dev server at http://localhost:5173 |
npm run build |
Prerender to build/. Runs prebuild (thumbs) + postbuild (CV PDF + OG image) |
npm run preview |
Serve the built build/ locally |
npm run check |
svelte-check typecheck |
npm run thumbs |
Regenerate the six project thumbnails |
npm run cv:pdf |
Regenerate cv.pdf (needs system Chrome) |
npm run og:image |
Regenerate og-image.png |
- The CV PDF is generated by a postbuild script that drives system Chrome via
puppeteer-core. On a CI environment that doesn't ship Chrome (Netlify), the script logs a warning and falls back to copying the committedstatic/cv.pdfintobuild/. To regenerate fresh on every deploy, runnetlify deploy --build --prodfrom a machine with Chrome installed. - The canonical hostname is set in
src/lib/site.ts(FALLBACK_HOST); override per-deploy viaVITE_SITE_HOST. The browser path useswindow.location.hostdirectly so deploy previews show their own URLs. - Content lives in
src/lib/data/—projects.ts,experience.ts,skills.ts,socials.ts,heroPhrases.ts. Change copy there; the rendering picks it up everywhere (home page, detail routes, sitemap, CV PDF).
