The Boring Stack That Ships: Next.js, Supabase, Vercel, Resend
no kafka. no kubernetes. just stuff that ships. Here is every tool in the Striveloom production stack, what it costs, and why we have not changed it in 18 months.
no kafka. no kubernetes. just stuff that ships. Here is every tool in the Striveloom production stack, what it costs, and why we have not changed it in 18 months.
no kafka. no kubernetes. just stuff that ships.
Every client project at Striveloom runs on the same four tools: Next.js 15, Supabase, Vercel, and Resend. That is it. We have not changed this stack in 18 months. We have shipped 34 production sites on it. Every one scored above 90 on Lighthouse. The stack costs $65 per month per production app.
Here is why boring tech is the right answer for an agency, what the stack actually looks like, and the specific decisions we made at each layer.
In 2024 we built client projects on a mix of whatever seemed right for the use case. Some on Gatsby. Some on Remix. One on SvelteKit because a developer on the team wanted to try it. We used Planetscale for databases, Railway for deployment, Postmark for email.
The result: every project was different. Client A could not hire a freelancer to maintain their Gatsby site because Gatsby developers are scarce. Client B's Remix project needed migration after Remix changed its routing model. The Planetscale project hit the free tier limits and we had a scramble.
We were optimizing for interesting and paying for it in maintenance debt.
In late 2024, we standardized. One frontend framework. One database. One deployment platform. One email provider. All documentation in one place. All institutional knowledge about deployment, environment variables, and debugging concentrated on four platforms instead of twelve.
The productivity gain was immediate. A developer who has shipped 15 Next.js projects on Vercel can debug a deployment issue in 20 minutes. The same developer encountering Remix for the first time spends 4 hours reading docs. Multiply that across 34 projects and the math is decisive.
Next.js App Router with React Server Components is the most productive way to build content-heavy sites that need good SEO. Server-side rendering from the start. Built-in image optimization that handles WebP conversion, lazy loading, and responsive sizes automatically. Static generation for pages that do not need real-time data.
The App Router changes are significant from Next.js 13 to 15. We use the following conventions on every project:
app/ directory for all routesgenerateMetadata for per-page SEO metadata including Open Graphnext/image for every image — no exceptionsnext/font for web fonts — eliminates layout shift from font loadingloading.tsx and error.tsx in every route for consistent loading and error statesThe result: Lighthouse performance scores above 90 on every project without manual optimization work. The framework handles the optimization decisions that most developers get wrong.
Per Google's web.dev documentation on Core Web Vitals, Next.js's built-in image and font optimization directly addresses the most common causes of Largest Contentful Paint and Cumulative Layout Shift failures (per web.dev, 2025). We have not had a client site fail a Core Web Vitals assessment since standardizing on Next.js 15.
Supabase is PostgreSQL with a REST API, a real-time API, an auth system, and file storage, packaged as a managed service with a generous free tier.
Before Supabase, we pieced together: Prisma for ORM, NextAuth for auth, Cloudinary for images, a separate managed Postgres instance. Four services, four sets of credentials, four dashboards, four billing accounts.
Supabase replaced all four. One dashboard. One set of credentials. One billing account.
The specific features we use on every project:
Row Level Security: Database-level access control that means the API cannot accidentally expose data it should not. Once you write the policies, the security is enforced at the database layer regardless of what application code does. This is the single most underrated feature in Supabase.
Auth: Email/password, magic link, and OAuth providers out of the box. Session management handled. PKCE flow for Next.js included. The Supabase Auth documentation covers the Next.js integration with working code examples (per Supabase, 2025).
Realtime: Websocket subscriptions on any table. We use this for live dashboards and collaboration features. No additional infrastructure.
Storage: S3-compatible file storage with automatic CDN distribution. Client uploads, asset management, and public URLs without Cloudinary or a separate S3 setup.
The Supabase free tier covers up to 500MB database, 1GB file storage, and 50,000 monthly active users. Every client project starts on the free tier and migrates to the $25/month Pro plan when it goes live. That is the entire database cost.
We have tried Netlify, Railway, Render, and AWS Amplify. We stayed on Vercel because:
Preview deployments: Every pull request gets a unique preview URL with working environment variables. Client reviews happen on the preview URL, not staging. When the client approves the PR, it merges and deploys automatically. This workflow saves 2 to 4 hours per week per project in deployment and review overhead.
Edge Functions: For simple API endpoints that need low latency globally, Vercel Edge Functions deploy in 200 milliseconds and run at the edge. No server provisioning.
Analytics: Vercel's built-in Web Analytics provides real user metrics — LCP, FID, CLS — without adding a third-party script that hurts performance. The data is available in the Vercel dashboard from day one.
Build time: The average Next.js build on Vercel takes 45 seconds. We have never had a build take more than 3 minutes. Consistency here matters more than absolute speed.
The Vercel Pro plan costs $20 per month for the team. We share one Vercel organization across all client projects. Total hosting cost per client project: $20 divided across however many projects are on the account, which averages to roughly $2 to $4 per project per month (per Vercel, 2025).
We used Sendgrid, then Postmark, then ended up at Resend.
Resend is built by the team that worked on React Email. The package react-email lets you build email templates in React components with the same mental model as the rest of the project. No handlebars, no Liquid, no proprietary template language. Just React.
The developer experience gap is large. An email template in Resend looks like a Next.js page component. An email template in Sendgrid requires learning Sendgrid's design editor or writing raw HTML with inline styles.
The API is simple. One function call to send an email. The dashboard shows delivery, open, and click rates without setup.
Cost: $20 per month for up to 50,000 emails. Every client project uses Resend for transactional email. Total email cost across the stack: $20 per month regardless of how many projects are on the account (per Resend, 2025).
A production web application with auth, database, file storage, email, and global CDN for under $35 per month. Three years ago this infrastructure would have cost $400+ per month and required a DevOps engineer to maintain.
The cost structure changes the economics of what is worth building for clients. Projects that previously required a $5,000 to $10,000 infrastructure budget now launch on a $35/month stack. That budget moves into development quality and feature scope.
The most important reason to use boring tech is not performance or cost. It is hiring.
When a client's business grows and they hire their first developer, that developer needs to maintain the codebase. If the codebase is in Next.js and Supabase, there are thousands of developers who can maintain it immediately. The client can hire from any market, at any seniority level.
If the codebase is in a niche framework or a custom architecture, the client needs someone who specifically knows that technology. The talent pool is smaller. The cost is higher. The onboarding is longer. In some cases, the client has to hire the original agency for all future changes because no one else understands the codebase.
This is a real agency failure mode. We have inherited projects from agencies that built on obscure frameworks and the handoff was 40 hours of archaeology. Our commitment to the boring stack means every project we ship is maintainable by the widest possible pool of developers from day one.
See the full agency services page for how this stack fits into each service offering we run.
The boring stack is a commitment, not a compromise.
Next.js, Supabase, Vercel, and Resend solve the problems most web projects have. They are actively maintained, well documented, and supported by large communities. When something breaks, the answer is on Stack Overflow or in the official docs. You do not need to write the first GitHub issue about the problem you have.
Clever tech is interesting. Boring tech ships.
If you are choosing a stack for client projects: pick the tools with the best documentation, the widest freelance talent pools, and the most active communities. Use those tools until they stop solving your problem. Most of them will not stop solving your problem for a very long time.
no kafka. no kubernetes. just the four things that work.
Next.js has the largest freelance talent pool, the most extensive documentation, and the widest ecosystem of integrations. Remix and Astro are excellent frameworks with real advantages in specific use cases. But for an agency shipping client projects that clients must maintain after handoff, talent pool breadth matters more than technical elegance. Striveloom evaluated Astro seriously for content-heavy sites and chose Next.js App Router because clients can hire Next.js developers in any market at any seniority level. Astro developers are excellent but scarcer.
Yes. Supabase runs on AWS infrastructure with 99.9% uptime SLA on the Pro plan. Row Level Security provides database-layer access control that is more robust than most application-layer auth implementations. The real-time subscriptions are stable at scale. The main production consideration is that Supabase pauses free-tier databases after 7 days of inactivity — always migrate to the $25/month Pro plan before launching a client project. Beyond that, Supabase is appropriate for production workloads up to millions of users.
Next.js App Router with React Server Components significantly improves Lighthouse performance scores by reducing JavaScript bundle size — Server Components do not ship JavaScript to the client. Combined with next/image for automatic image optimization and next/font for zero-layout-shift font loading, the App Router addresses the three most common causes of poor Core Web Vitals: unoptimized images, render-blocking fonts, and excessive JavaScript. Striveloom's projects consistently score above 90 on Lighthouse without additional optimization work.
Under $35 per month for a full production application. Supabase Pro is $25/month and covers database, auth, storage, and real-time. Vercel Pro is $20/month for the whole team across unlimited projects. Resend is $20/month for up to 50,000 transactional emails. Shared across multiple projects, the hosting and email costs approach $2 to $4 per project per month. For a single project, the all-in cost is $65 to $70 per month. For agencies managing multiple client projects on shared infrastructure, it drops significantly.
One agency-owned Vercel team account for development and staging. Separate client-owned Vercel accounts for production if the client wants ownership and control after handoff. This structure gives the agency full development workflow benefits — shared preview deployments, one billing relationship, consistent settings — while ensuring clients own their production infrastructure. Transfer a project from agency account to client account with one Vercel CLI command at handoff. Both parties maintain access as needed.
Founder & CEO of Striveloom. Software engineer and Harvard graduate student researching software engineering, e-commerce platforms, and customer experience. Builds the agency that ships like software — one team, one pipeline, one platform. Writes on AI agencies, web development, paid advertising, and conversion optimization.
Every tool Striveloom uses to run a 7-person digital agency in 2026, with actual monthly costs. $1,847/month total. Here is the full bill and why we chose each one.
How Striveloom takes a new service offering from idea to live client in 14 days. The actual day-by-day timeline, the real mistakes, and what you can steal.
Six AI agents run across all Striveloom client work. Here is what each agent does, what it costs, what it replaces, and where it still fails.
Book a free 30-minute call to scope your project. Fixed pricing, transparent timelines.
| Tool | What it covers | Cost per project/month |
|---|
| Next.js | Frontend framework | $0 (open source) |
| Supabase Pro | Database, auth, storage, realtime | $25 |
| Vercel Pro | Hosting, preview deployments, analytics | $2-4 (shared across projects) |
| Resend | Transactional email | $1-3 (shared across projects) |
| GitHub | Source control | $0 (included in Vercel) |
| Total | Full production stack | $28-32/month |