Web applications
Why we still pick Next.js + Postgres for serious web apps in 2026
Written by Novyra Software, a software studio in Tunis. These notes are published by the studio. They are not signed by one person. LinkedIn
Summary: For most serious products, Next.js plus PostgreSQL remains our default—predictable, hireable, and good enough until real constraints force a different shape.
Every six months, a new framework shows up promising 10× the performance, half the bundle size, and a brand-new mental model. Most of them are genuinely interesting. Almost none of them are the right choice for a business that needs the app to still work in 2030.
The defaults that earned their place
Our default stack for serious web applications has been roughly the same for three years: Next.js (App Router) + TypeScript + PostgreSQL + Tailwind, deployed on Vercel or a small VPS, with Stripe for billing and a managed Postgres host like Neon or Supabase when the team is small. Boring. Predictable. Cheap to hire for.
Why Next.js, specifically
Not because it is the fastest framework on benchmarks (it usually is not). Because it is the framework where:
- Server-side rendering, static generation and client-side rendering all work out of the box, in the same project, with the same mental model
- SEO works without a separate Gatsby/Astro setup or a headless CMS
- API routes, image optimization, i18n routing and middleware are first-class — not three plugins glued together
- Hiring is realistic: a competent React developer becomes productive in days, not weeks
- The ecosystem (auth libraries, UI kits, ORMs) all assume Next.js as a target
Why Postgres, specifically
Postgres is the closest thing software has to a sure bet. It does relational queries beautifully, JSON columns when you need them, full-text search good enough to skip Elasticsearch for the first few years, geographic queries via PostGIS, and now even vector search via pgvector. One database. One backup story. One thing to monitor.
What we explicitly avoid until forced
- NoSQL "by default." Most teams pick MongoDB and then spend two years rebuilding joins by hand.
- Microservices for under 10 engineers. The operational cost is real; the architectural benefit is not, until you have org problems.
- Serverless databases for write-heavy workloads. Cold starts and per-query pricing punish exactly the apps that succeed.
- Custom design systems before product-market fit. shadcn/ui + Tailwind covers 90% of needs at 5% of the time.
When we deviate from the default
We do switch the stack — but only when the project actually demands it:
- Real-time, high-concurrency apps (chat, live trackers, multiplayer): we add a dedicated WebSocket service and Redis, sometimes in Go or Elixir.
- Heavy data processing or ML pipelines: Python services next to the Next.js app, talking via a job queue.
- Mobile-first products with offline support: React Native or a true native shell, sharing the same Postgres backend.
The question that matters more than the stack
"Can the next developer take over this codebase in two weeks?" If the answer is yes, you picked the right stack. If the answer involves explaining a custom framework, a bespoke build system, or a runtime nobody has heard of — you picked something that will become legacy faster than you think.
Boring is a feature. Boring is what still works in 2030.
Numbers in these notes come from Novyra Software project delivery, or are planning ranges we use with clients, unless a source link says otherwise. They are not a published study.