Skip to main content
STCSCColophon

How this site is built

A small flex: the firm whose product is software ought to be the one to publish its own stack.

Stack

Framework
Next.js 15 (App Router) + React 18
Language
TypeScript (strict)
CSS
Tailwind v4 with @theme inline
Fonts
Inter · JetBrains Mono · Space Grotesk (logo only), all via next/font
Forms
Hand-rolled validation, Web3Forms relay via /api/contact
Tests
Vitest + @testing-library/react · 41 tests, TDD-first
Hosting
Cloudflare Pages
Analytics
None today. Privacy-friendly Plausible planned, same-origin proxied.
CMS
None. Content edits live in TypeScript with a pull request.

Decisions

The site is hand-tuned static JSX, not a templated marketing framework. Every section is a server component until proven otherwise; client islands earn their cost. The CSP is strict on purpose: third-party scripts and iframes are forbidden until they justify a same-origin proxy.

Content lives in source files rather than a CMS because there is one author and ten content surfaces. The TDD discipline applied to the rest of STC's code applies here too — voice and structure changes ride pull requests with tests.

The logo is a custom SVG, not a font glyph, so the T can be drawn as two pure mint rectangles independent of any typeface. Favicons and apple-touch icons render from the same SVG via headless Chrome at build time.

What this site does not do

  • No popups, no exit-intent modals, no chat widget, no cookie banner.
  • No third-party trackers. The contact form uses a server-side relay so no cross-origin POST leaves the browser.
  • No autoplay video, no scroll-jacking, no smooth-scroll hijacks.
  • No animations on every section — exactly one motion moment per page, gated by prefers-reduced-motion.

Updates

Substantive changes are summarized as commit titles in the project's repository. Specific dependency bumps and audit findings live in those commit bodies.