Static portfolio built with Astro and Tailwind CSS v4. Single scrolling homepage plus MDX blog posts, binary light/dark themes (plus system auto), deployed to GitHub Pages.
npm ci
npm run devOther scripts: npm run build (output in dist/), npm run preview, npm run check. See AGENTS.md for CI, spellcheck, and pre-commit expectations.
| Path | Purpose |
|---|---|
src/pages/ |
Routes: index.astro, blog/[...slug].astro, 404.astro, sitemap.xml.ts |
src/components/ |
Layout, sections, UI |
src/content/ |
Collections (projects/, blog/), publications.json |
src/styles/ |
Global Tailwind theme tokens and utilities |
public/ |
Static assets copied to site root (robots.txt, site.webmanifest, CNAME, images under public/images/) |
- Projects and blog: Markdown/MDX under
src/content/projects/andsrc/content/blog/. Draft blog posts (draft: true) are omitted from routes and the sitemap. - Publications:
src/content/publications.json. - Hero and section copy: Astro components under
src/components/sections/. - Profile photo: place or replace
public/images/profile.jpg(referenced as/images/profile.jpgin the build).
Pushes to main (or manual workflow_dispatch) run .github/workflows/pages.yml: npm ci, npm run build, then deploy the dist artifact to GitHub Pages.
Semantic HTML, keyboard navigation, theme and motion preferences are part of the design. Performance and manual test notes live in AGENTS.md. There are no analytics trackers or cookies; the site loads webfonts from Google Fonts (Bricolage Grotesque, Figtree — see src/components/layout/BaseHead.astro).
Third-party licenses and font attribution are in CREDITS.md. Contributor workflow and tooling are in AGENTS.md. Product and design truth: PRODUCT.md, DESIGN.md.