Skip to main content
The Lacanians
Startup7 min read

Choosing the Right Tech Stack for Your Startup

The best tech stack is the one that fits your product, team, hiring plan, and constraints. Here is our opinionated framework for making that decision.

A

Abdul Hamid Achik

·Updated

The Only Question That Matters

Non-technical founders often ask: “What is the best tech stack?” This is the wrong question. The right question is: “What tech stack maximizes my chance of finding product-market fit before I run out of money?”

That reframing changes everything. The best stack is not the one with the most GitHub stars or the one your friend’s CTO recommended. It is the one that:

  1. Lets you ship features quickly
  2. Has enough developers available to hire
  3. Can support the load and reliability your near-term product requires
  4. Has a credible path to evolve if those requirements change

We have strong opinions about what tends to work, but the framework matters more than any default stack. This is that guide.

The Decision Framework

Before choosing specific technologies, answer these four questions:

1. What type of product are you building?

This matters more than any other factor. A content-heavy marketing platform has different needs than a real-time collaboration tool.

  • Content sites and blogs: Static-first (Astro, Hugo)
  • SaaS dashboards: Full-stack framework (Next.js, Nuxt)
  • Real-time applications: WebSocket-capable backend (NestJS, Elixir)
  • Mobile-first products: React Native, Flutter, or responsive web
  • API/platform products: Backend-focused (NestJS, Go, FastAPI)

2. What is your team’s existing expertise?

A Vue team moving to React takes on a learning and migration cost that it would not have by staying with Vue. Unless there is a compelling technical reason to switch, give the team’s existing expertise substantial weight.

3. What is your hiring plan?

If you plan to grow the team, investigate the talent pool in the markets where you will actually hire. A global popularity chart does not tell you whether qualified React, Svelte, TypeScript, Elixir, PostgreSQL, or CockroachDB developers are available within your budget and location constraints.

4. What are your scaling expectations?

Be honest. A pre-revenue product rarely needs the same architecture as a mature global platform. Optimize for the load you can justify now while keeping a credible path to measure and address new bottlenecks later.

The Stacks We Recommend

The Content Stack: Astro + Tailwind + PostgreSQL

Best for: Marketing sites, blogs, documentation, content platforms, portfolio sites.

Frontend: Astro (with React/Vue islands where needed)
Styling: Tailwind CSS
CMS: Astro Content Collections or headless CMS
Database: PostgreSQL (if needed)
Hosting: Vercel / Cloudflare Pages

Astro deserves special attention for content-driven sites. It renders pages with no client JavaScript by default and lets you add interactive “islands” where they are needed. This site is built with Astro.

That architecture can reduce the amount of JavaScript sent to the browser, but a framework does not guarantee a Lighthouse score. Images, fonts, third-party scripts, caching, and application code still determine the result. Measure the site you are shipping instead of relying on a framework average.

When to use: Your product’s primary value is content delivery. You need fast page loads and strong SEO. Interactivity is secondary.

The SaaS Stack: Next.js + Tailwind + PostgreSQL + Drizzle

Best for: B2B SaaS, dashboards, admin panels, any product that needs authentication, data management, and interactive UI.

Framework: Next.js (App Router)
Styling: Tailwind CSS
Database: PostgreSQL
ORM: Drizzle
Auth: Auth.js or Clerk
Validation: Zod
Hosting: Vercel

This is a common recommendation for startups building web applications because the ecosystem is mature and the framework supports common patterns such as routing, API endpoints, and server rendering. Authentication and architecture still require explicit decisions; the framework does not make them for you.

When to use: You are building a product that users log into, interact with, and pay for. Most B2B and B2C SaaS products fit here.

The Vue Alternative: Nuxt + Tailwind + PostgreSQL + Drizzle

Best for: Teams with Vue experience, or products where Vue’s reactivity model is a better fit.

Framework: Nuxt
Styling: Tailwind CSS
Database: PostgreSQL
ORM: Drizzle
Auth: nuxt-auth-utils
Validation: Zod
Hosting: Vercel / Cloudflare

We reach for this when the team knows Vue or when the product benefits from Vue’s reactivity model. Vue’s composition API works well for data-heavy interfaces, while Nuxt provides server routes and conventions for a full-stack application.

When to use: Your team prefers Vue, or your product involves complex forms and data visualization.

The API-First Stack: NestJS + PostgreSQL + Drizzle

Best for: Products where the backend is the product – APIs, platforms, B2B integrations, services consumed by mobile apps.

Framework: NestJS
Runtime: Bun
Database: PostgreSQL
ORM: Drizzle
Validation: Zod + class-validator
Documentation: Swagger (auto-generated)
Hosting: Railway / Fly.io / AWS

NestJS adds an opinionated structure to a Node.js or Bun backend: dependency injection, middleware pipelines, guards, and interceptors. It is a strong option when a team values consistent conventions and expects the backend to grow beyond a few framework routes.

When to use: Your product is primarily an API consumed by frontends you do not control, or your backend complexity exceeds what framework API routes can handle.

The Mistakes to Avoid

Mistake 1: Choosing Based on Performance Benchmarks

Synthetic framework benchmarks rarely represent your application. React versus Vue versus Svelte may matter for a specific workload, but you need measurements from that workload to know. Start with team capability and ecosystem fit, then profile the database, network, rendering, and client code before optimizing a suspected bottleneck.

Mistake 2: Over-engineering for Scale

// What an early product usually should not adopt without evidence:
// - Kubernetes cluster
// - Microservices architecture
// - Event-driven CQRS
// - Multi-region database replication

// What it actually needs:
// - A single server on Railway or Vercel
// - A managed PostgreSQL database
// - Basic caching (Redis if you must, but probably not yet)
// - A CDN for static assets (automatic with Vercel/Cloudflare)

A single application deployment with a managed PostgreSQL instance is often a reasonable starting point. Capacity and cost depend on traffic patterns, data volume, regions, vendor pricing, and query behavior, so test the real workload and revisit the architecture when measurements justify it.

Mistake 3: Picking the “Hot” Framework

Framework maturity is a risk factor, but age alone is not a useful cutoff. Review release stability, maintenance activity, upgrade history, security response, documentation, deployment support, and whether your team can solve an edge case without depending on an unmaintained plugin.

This is not an argument against innovation. Astro was once the new kid. Bun was once experimental. But both had substantial community investment and corporate backing before we recommended them to clients. Evaluate maturity, not hype.

Mistake 4: Building Your Own Auth

Do not build your own authentication system by default. Services and libraries such as Clerk, Auth.js, Supabase Auth, and Firebase Auth cover common flows and receive focused security maintenance. Custom authentication can be justified by regulatory, identity, or product requirements, but it should be treated as a security-sensitive capability with an explicit owner.

// Do not build this yourself:
function hashPassword(password: string) { /* ... */ }
function verifyToken(token: string) { /* ... */ }
function handlePasswordReset(email: string) { /* ... */ }
function manageSessions(userId: string) { /* ... */ }
// Prefer a maintained auth system unless custom identity is a product requirement.

Mistake 5: Ignoring Developer Experience

Developer experience is not a soft consideration. Tooling friction affects review, onboarding, debugging, and how confidently the team changes the system. Evaluate that fit directly with a small implementation exercise instead of assigning a universal productivity percentage to a language or framework.

Our Decision in 30 Seconds

If you are building a startup and need an answer right now:

  • Content/marketing site? Astro.
  • SaaS product? Next.js if React, Nuxt if Vue.
  • API/platform? NestJS.
  • Not sure? Prototype the riskiest product path in the strongest candidate stacks, then choose based on evidence and team fit.

Use TypeScript everywhere. Use PostgreSQL for your database. Use Tailwind for styling. Host on Vercel or Railway. Use managed auth.

Ship, learn from users, and make the complicated infrastructure decisions when you actually need them – not before.

If the decision has implications for hiring, architecture, or runway that your team cannot evaluate alone, our fractional technical leadership service can help make the tradeoffs explicit.

A

Abdul Hamid Achik

Founder and lead engineer at The Lacanians. Abdul builds production software, developer tools, and local-first systems from Guadalajara for teams worldwide.