Skip to content
All work

ScrewFast

  • TypeScript
  • Astro
  • Tailwind CSS
  • GSAP
  • Vercel

My second project—built as a portfolio piece, turned into something people actually use.

1.4k stars · 389 forks on GitHub

Context

In early 2024 I needed something to show. The Astro templates I could find each did one job—a landing page, a blog, or a docs site—so anyone launching a small company site ended up gluing two or three together and reconciling their layouts. ScrewFast was my answer: one repo with a landing page, blog, product pages, and full documentation that share a single navbar, footer, and design.

What I did

Everything, solo: the visual design, the 79 components (19 page sections and 57 UI pieces), the English and French marketing pages, documentation in seven languages with right-to-left support, structured data and Open Graph metadata, a Content Security Policy, and the CI pipeline that type-checks, builds, and smoke-tests every push. Since launch I’ve kept it current through roughly 1,400 commits and 540 merged pull requests, and reviewed contributions from five other developers.

Decisions

Astro over a React framework. The people who use a template like this are shipping content sites, not apps. Astro renders to static HTML and sends no JavaScript unless a component asks for it, which is the right default for a site that has to score well the day it goes live.

Pages composed from sections with plain props, not a CMS. A template’s users are developers who will edit code anyway. Keeping every section a component with named props means customising a page is changing a value, not learning a system.

Starlight for the docs, on the shared layout. Documentation is the part people underestimate. Rather than build search, sidebars, and localisation myself, I integrated Starlight and spent the effort on making it sit inside the same navbar and footer as the rest of the site, so it reads as one product rather than two.

Multilingual from the start, with an escape hatch. Retrofitting localised routes is the painful part, so i18n is wired in from the first commit. For people who only need one language, a monolingual-site branch strips the plumbing out.

Security headers and CI in the box. Most template users never add a CSP or a build check later. Shipping them in vercel.json and the workflow means the sites people fork are hardened by default.

Result

It became one of the more-used Astro templates on GitHub, and it’s still maintained: today it runs on Astro 7, Tailwind CSS 4, and Preline 5, with Dependabot keeping it there. Its successor, DataNova, took the same idea and added a Keystatic CMS and a database.

In hindsight

I’d write the contributor and AI guides on day one rather than after the first outside pull requests, and I’d cut the component count. Seventy-nine pieces is impressive on a README and a burden to keep current; the twenty that most forks actually use would have been the better template.