Back to themes

8-BitQuest

A retro pixel-art Astro theme for developers and indie studios, with case-study project pages, an MDX blog, a contact form that works with JavaScript off, and light and dark built in.


Cost

Free


Built to be finished, not assembled


8-BitQuest is a complete developer portfolio for developers, indie studios, and anyone whose own site is part of the pitch. It ships 20 prebuilt pages, three content collections, and a design system you can rebrand by editing a handful of CSS variables.


Built to be finished, not assembled


- A project log with a case-study page per project: status badge, spec table, tech list, and a structured challenge-and-solution pair, all validated frontmatter rendered into fixed slots

- MDX blog with categories, tags, reading time, RSS, and author records the build resolves

- An about page with a skill tree, a gear list, and an achievements board rather than a bio box

- Six sample posts and six sample projects, so you start by deleting content instead of inventing it


Ten dependencies, and none of the ones you expect


- No SEO package, no component kit, no animation library, no icon package. Each of those layers is a folder in your repo you can open and edit

- 39 UI primitives as tailwind-variants recipes over 7 shared internals, plus 31 section components across 8 page groups

- 18 pixel-art glyphs and 553 stock line icons, both inlined at build time

- 87 animate-* utilities including scroll-driven variants, ported dependency-free

- What's left in the manifest: Astro and its integrations, Tailwind, two self-hosted fonts, tailwind-variants, and tailwind-merge


Accessible and fast by default


- 11.7 KB of gzipped CSS and about 6 KB of gzipped JS per page, 5.6 KB of which is Astro's own view-transition router

- Native-first primitives: <details> for disclosure, <dialog> for modals, the Popover API for menus. Three scripts site-wide

- A global prefers-reduced-motion guard, plus one flag that turns the decorative layer off for everyone else

- Light and dark both committed and set pre-paint, so there's no flash of the wrong palette


A contact form that works with JavaScript off


- A native <form method="POST"> bound to an Astro action. Zod validates server-side, errors surface per field, and the form comes back filled in

- A honeypot and a three-second minimum fill time, both judged server clock to server clock

- Delivery is a plain fetch to Resend, no SDK and no eleventh dependency


SEO ready


Sitemap, RSS feed, generated robots.txt, llms.txt for AI crawlers, native meta and Open Graph tags, and JSON-LD for organizations, articles, and breadcrumbs on a shared @id graph. Everything derives from a single SITE_URL, and a production build that still has the placeholder throws instead of shipping six wrong canonicals.


Astro 7, Tailwind CSS v4 with CSS-first @theme tokens, TypeScript in strict mode, and 11 self-checks that run with pnpm test. Cloudflare Workers as configured, with the adapter swap to Node, Netlify, or Vercel documented in astro.config.mjs. AGENTS.md and CLAUDE.md ship in-tree, so Claude Code or Cursor extends the site in its existing style.