What We Ship On

The stack.

Same tools every project. No spelunking, no committee debates.

Most agencies pick a stack to look impressive. We pick one to ship in 2 weeks and run on $0–50/month at low scale.

Frontend

One framework, one type system, one styling layer. We don't debate it per project.

Next.js 15 (App Router)
Server components, streaming, edge runtime, image optimization out of the box. Vercel-native, zero config to deploy.
TypeScript
Strict mode on. Refactors don't break silently. Claude reads typed code more accurately than untyped.
Tailwind CSS
No CSS files to grep through. Design system stays in-repo. Plays well with shadcn/ui when we need pre-built components.
Framer Motion
Animations that don't feel cheap. Stays performant on mobile.

Backend

Postgres for everything we can. Boring, fast, ten years from now it still works.

Postgres (Neon or Vercel Postgres)
Relational data, JSONB when we need flexibility, pgvector for RAG embeddings — one database, three jobs.
Drizzle ORM
Type-safe SQL. Migrations check into git. Faster than Prisma and the queries it generates are queries you can read.
Row-level security (RLS)
Multi-tenant safety enforced at the database layer, not just the app. A bug in API code can't leak tenant data.

Auth

NextAuth for most. Clerk when MFA and org-management actually need to be solved.

NextAuth (Auth.js) with Postgres adapter
Default. Free, self-hosted, no vendor lock-in. Email + OAuth + magic links covers 90% of builds.
Clerk
When you need MFA, organizations, invitations, role management as a turn-key feature. Costs money, saves weeks.

Payments

Stripe Checkout for one-time. Stripe Billing for subscriptions. Webhooks land in Postgres.

Stripe Checkout + Customer Portal
SCA, dunning, failed-card retries, subscription upgrades — all out of the box. We don't hand-roll payment flows.
Stripe webhooks → Postgres
Single source of truth for billing state lives in your DB, not Stripe's dashboard. Reports and entitlement checks are SQL queries.

Email

Transactional only. We don't do marketing email — that's a different tool, different problem.

Resend
Clean API, fast deliverability, built by people who know email. Pairs natively with React Email templates.
React Email templates
Email templates are React components. Same type system, same review process as the rest of the app.

Background jobs

Inngest for most. Vercel Cron for the simple stuff. We avoid spinning up Redis if we can help it.

Inngest
Step functions, retries, fan-out, replay — durable workflows without running our own queue infrastructure.
Trigger.dev
Alternative when the workload is more video/AI processing-shaped. Same tradeoff: durable execution as a service.
Vercel Cron
For 5-line scheduled jobs. No reason to bring in Inngest for a daily summary email.

AI

Claude reads, GPT speaks, Gemini scales. Provider-agnostic abstraction so we can swap in a config flip.

Claude API (Sonnet 4.6 default, Opus 4.7 high-stakes)
Best reasoning-to-cost ratio for most workloads. Prompt caching cuts input cost up to 90%. Best-in-class tool-use for agent loops.
OpenAI API (GPT-5, GPT-4o, Realtime)
Voice agents, vision-heavy pipelines, when 4o's function-calling is the better fit. Realtime API for sub-second voice.
Gemini Flash
High-volume cheap inference. 1M-token context window when it replaces a RAG layer.
pgvector or Pinecone
RAG embeddings. pgvector keeps everything in Postgres; Pinecone for >10M vectors or when latency demands it.

Hosting

Vercel for the app. AWS S3 for files. Cloudflare for DNS. Three vendors, each best at their job.

Vercel (app + Postgres + Cron)
Zero-config deploy, preview URLs per PR, edge functions where they help. Postgres co-located with the app.
AWS S3
File storage. Cheap, durable, never the wrong choice. Signed URLs for client uploads.
Cloudflare DNS
DNS, redirects, basic WAF. Faster to change than Route53, free for what we use.

Observability

Sentry catches what users hit. Analytics tells us what users do. AI cost tracking is its own line item.

Sentry
Errors, performance traces, release tracking. Slack alerts on P0. We sit on this, you don't have to.
Vercel Analytics or Axiom
Vercel for traffic + web vitals on smaller builds. Axiom when we need structured logs we can query like a database.
AI cost dashboard
Per-user / per-feature spend on Claude + OpenAI, written into Postgres. Rate limits enforced before the bill arrives.

Project board (optional)

When the engagement is multi-month, we use Linear so you can see what's shipping and what's next.

Linear
Read-only client view: ticket list, current sprint, what shipped this week. No more "where are we" status calls.

Why this stack?

Because it ships in 2 weeks and runs on $0–50/month at low scale.

Most agencies pick a stack to look impressive: microservices, Kubernetes, three databases, four queues, an event bus, six Lambda functions, and a Datadog bill bigger than the engineering team. We pick one to ship fast and bill cheap. When you outgrow it, you replace pieces — not the whole thing. The stack is boring on purpose.

Want this stack on your build?

Free 45-min architecture audit. We map your problem onto this stack and tell you exactly what we'd ship, in what order, for how much.