TVfolio is a complete Astro portfolio system for developers, designers, and studios of one whose site has to survive being one of forty open tabs. Every page renders inside a CRT television set: the channel bar names the route, the six coloured fastext keys along the bottom of the tube are the navigation, the F6 key opens an 11-channel index, and the cabinet's LIGHT/DARK switch is a real theme control, set before first paint. Underneath the conceit is an ordinary, fast static site on ten runtime dependencies - a design nobody else is shipping, without the maintenance bill a design like this usually carries.
The concept is load-bearing rather than decorative. Every project page is a "transmission" with a briefing, highlights, a gallery, and a status - a better shape for a case study than a title and three paragraphs. The 404 is a No Signal test card tuned to CH --. The CV page also serves itself as /cv.txt and /cv.pdf, rendered from one record by an owned, dependency-free PDF writer, because a recruiter will ask for one. Replacing five fields in the config re-labels the entire set from the demo persona to your own name.
It ships as a complete site rather than a single landing page: 23 prerendered pages across 11 templates - Home, a Work index with six demo project routes, a Blog index with eight post routes, About, CV, Contact, Privacy, Terms, and the No Signal 404 - plus five generated endpoints: robots.txt, llms.txt, rss.xml, cv.txt, and cv.pdf.
Built with Astro 7, Tailwind CSS 4 with CSS-first design tokens, and strict TypeScript - and nothing else at runtime: motion is 89 hand-ported animate-* utilities plus scroll-driven extensions behind a global reduced-motion guard, and 572 icons live in a typed registry inlined at build time, none of it in client JS. Site identity, navigation, CV data, and legal copy live in typed config modules under src/config/, while work, blog, and authors are Zod-validated Astro Content Collections, so bad frontmatter fails the build and the archive grows by adding a folder, not by wiring a page.
Who it's for
- Developers and designers who want the site itself to be the first work sample
- Freelancers and job seekers who need work, writing, CV, and contact in one memorable site
- Studios of one that have to stand out against a wall of identical card-grid portfolios
- Creative technologists and motion-minded engineers who want a design with an idea behind it
- Anyone who wants to own the UI, motion, icon, SEO, and PDF layers as files in their own repo
What's distinctive
- Every page rendered inside a CRT television set, with the channel bar naming the route
- Teletext navigation: six coloured fastext keys and an 11-channel index, both driven from one config file
- The cabinet's LIGHT/DARK switch wired as a real light-and-dark control, set before first paint with no flash
- A CV that renders once and serves three ways - as a page, as /cv.txt, and as /cv.pdf via an owned, dependency-free PDF writer
- Project pages structured as transmissions with briefing, highlights, gallery, and status
- A No Signal 404 test card tuned to CH --
- 89 animate-* motion utilities and scroll-driven extensions with no animation library and a global reduced-motion guard
- A zero-JS contact form posting to Resend - the one non-static route, with the adapter swappable in one line or deletable entirely
- 12 self-checks that run on plain Node with no test framework
What's included
- Full source: Astro 7 + Tailwind CSS 4 + strict TypeScript, with ten runtime dependencies
- 23 prerendered pages across 11 templates: Home, Work index, six Project pages, Blog index, eight Blog posts, About, CV, Contact, Privacy, Terms, and a No Signal 404
- Three Zod-validated content collections - work, blog, and authors - so the archive grows by adding a folder
- Five generated endpoints: robots.txt, llms.txt, rss.xml, cv.txt, and cv.pdf
- Typed config modules for identity, navigation, teletext channels, CV data, legal copy, metadata, and SEO
- 33 section components and 40 tailwind-variants UI primitives on the token layer, zero-JS unless interaction demands otherwise
- 572 build-time-inlined icons behind a typed icon registry
- An owned SEO layer with typed JSON-LD builders and dynamic robots.txt and llms.txt - no SEO package
- Contact endpoint with the Resend integration written, behind a swappable adapter - or delete it and deploy fully static
- A dev-only UI catalog at /examples/ui, noindex and absent from production builds
- Self-hosted Inter Variable via Fontsource
- Light and dark themes, responsive layouts, keyboard-friendly interactions, and reduced-motion support
- Deploy documentation for Cloudflare Workers plus compatibility with Netlify, Vercel, or any static host
- Lifetime updates for this theme
- Documentation at doc.astrocraftthemes.com/themes/tvfolio






