Back to themes

TVfolio

Dark, retro Astro 7 + tailwind CSS 4 portfolio theme that renders every page inside a CRT television - with teletext navigation, , a project archive, a blog, a CV that also serves as plain text and PDF, a working contact form, and light and dark modes wired to the cabinet's own switch.


Cost

Paid


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