DEV Community

azhadsuhaimi
azhadsuhaimi

Posted on

"Tech stack doesn't matter" is terrible advice when you're a solo dev

You’ve probably heard this advice a hundred times on X, Reddit, and Indie Hackers:

"Users don't care about your tech stack. Just pick whatever is fast and build your MVP."

In theory, this sounds smart. In practice, as a solo developer, picking a tech stack that you aren't completely comfortable with or that lacks solid production features leads straight to burnout.

When you spend 80% of your nights debugging OAuth state mismatches, fixing database migration scripts, or fighting CORS policies on deployment, your motivation evaporates. Fast.

The stack doesn't matter to the user, but it matters immensely to you—the person who has to maintain it at 2 AM.


Why I Settled on .NET 8 + Next.js

When I started planning projects at PulseLabs, I tried various mainstream SaaS templates. Most were heavily biased toward Node.js or Python backends.

While they're fine for simple apps, I wanted something rock-solid for long-term scalability:

  • Strong Typing & Performance: .NET 8 brings incredible runtime speed and clean C# syntax.
  • Enterprise-Grade Security: Built-in identity management and robust ORM features via Entity Framework Core.
  • Modern Frontend DX: Next.js with React Server Components, TypeScript, and Shadcn UI for fast UI development.

The problem? Finding a complete, production-ready template that seamlessly connects a decoupled .NET Web API to a modern Next.js frontend is surprisingly hard.

So, I spent the last few months building NetPulse.


What Makes This Setup Different

Instead of forcing a rigid framework, I focused on making the plumbing modular and easy to tear down if needed.

1. Pluggable Payment Engine

Most templates lock you into Stripe. But if you operate globally, tax compliance is a nightmare. NetPulse includes an abstraction layer that lets you switch between Stripe, Polar.sh, and Lemon Squeezy with a single config change. No core code rewrites required.

2. Fully Containerized Workflow

Local setup is usually where boilerplates fail. Rather than writing a 20-step setup guide, everything is wrapped inside Docker Compose:

  • Next.js Client
  • .NET 8 Web API (Clean Architecture)
  • PostgreSQL 16
  • Stripe CLI container for routing local webhooks

Running docker compose up -d --build gets the entire ecosystem up and running immediately.

3. Real Clean Architecture

The backend is split into 4 logical layers (Domain, Application, Infrastructure, WebApi). Core business logic is isolated from database drivers and external SDKs, keeping the codebase readable as the app grows.


Tech Stack Breakdown

  • Backend: .NET 8 Web API (Clean Architecture)
  • Frontend: Next.js (App Router), TypeScript, Tailwind CSS, Shadcn UI
  • Database: PostgreSQL 16 + Entity Framework Core 8
  • Auth System: ASP.NET Core Identity, JWT Bearer tokens, Google & GitHub OAuth 2.0
  • Payments: Stripe, Polar.sh, Lemon Squeezy (Multi-provider abstraction)
  • DevOps: Multi-stage Dockerfiles + Docker Compose

The Goal

The point of a good boilerplate isn't to over-engineer your app. It's to eliminate all the repetitive setup so you can spend 100% of your energy building the features that actually make your product unique.

Top comments (0)