I wanted one place for my projects, coursework and writing that would be easy to keep up to date. That pointed to something simple: plain static pages, free hosting, and content kept in ordinary files.
I also wanted it to feel a little like me, so it has a charcoal palette, one warm accent colour, and a few small animations.
Mostly static. Astro turns every page into plain HTML when the site is built. JavaScript only handles the interactive bits (the theme switch, page transitions, tabs and filters), and the intro’s code only loads on the visit where it plays.
Content in files. Projects, courses, books and posts are Markdown or YAML files with a schema, so a missing field shows up as a build error instead of a broken page.
The intro. A small build script turns the letters of “parjanya.” into SVG shapes, so the intro can show up before any fonts have loaded.
Page transitions. Astro’s client-side router swaps pages without a full reload, which leaves room for the shutter animation in between.
It stays light. Each page loads about 20 KB of bundled JavaScript, gzipped (18 KB with Brotli), plus 3 KB for the intro on the one visit where it plays. That leaves out two short inline scripts in each page’s HTML.
On Lighthouse’s desktop preset, the home page, the projects page and a writing post all scored 100 for performance, accessibility, best practices and SEO when I last ran it.
Almost everything still works with JavaScript turned off. The ask box, the theme switch, the copy-email button and the home page’s scroll rail need it, so they’re hidden. The animations are layered on top.
If your system asks for reduced motion, the intro becomes a short fade and page changes become a simple crossfade.