Under the hood
Everything listed here really runs this site. It's read straight from the site's own package.json.
nextApp Router, server components, static generation and the route handlers behind the forms.
Rendering and routing in one framework, so the forms need no separate API service behind them.
reactThe component model the whole interface is written in.
The component model everything else in this stack is written against.
typescriptTypes across the content layer, the components and the server actions.
A mistake in the content layer shows up while writing it, not on the page.
tailwindcssThe utility layer; the design tokens in config/design-tokens.ts feed its theme.
Styles sit next to the markup, so a component carries its own appearance and nothing leaks between pages.
tailwind-mergeResolves conflicting utilities when a component merges its own classes with a caller.
Without it a component class and a caller class fight silently. This decides which one wins.
class-variance-authorityVariant definitions for the UI primitives.
One place per component where its variants live, instead of class strings spread across call sites.
motionThe few animations that cannot be expressed as CSS keyframes.
Only for the few things CSS keyframes cannot express. Everything else animates in CSS.
firebaseFirestore for form submissions and rate limiting, Auth for the dashboard.
Form submissions and rate limiting need a database and sign-in without a server to keep running.
firebase-adminServer-side writes and the custom claims behind admin access.
Writes the browser must never be trusted with, and the claim that gates the dashboard.
resendTransactional email for form notifications and confirmations.
Transactional email over a plain API, with no SMTP server to maintain.
zodValidates every form payload and the environment variables at boot.
One schema checks a form in the browser and again on the server, so the two cannot drift apart.
lucide-reactThe interface icon set.
One icon set drawn on one grid, so icon weight does not shift from page to page.
react-iconsBrand marks for the technology lists.
Brand marks only, where a technology logo is the right thing to show.
A thirty-minute call is enough to know if this is a job for us. If it isn't, we'll say so.