Tech Stack I Use in 2026 — What Actually Works for My Side Projects
Introduction
I spent way too long picking a stack instead of building things. What finally worked was just committing to something, shipping it, and adjusting from there. I build a lot for myself — SEO tools, my portfolio, random automations — and after enough of that, this is what stuck.
Frontend
Next.js
Went through plain React, CRA, Vite — always ended up back at Next.js. Routing, SSR, image optimisation, API routes — all solved. When I built my portfolio I didn't want to wire up basic infrastructure. Next.js meant I could skip straight to the actual work.
Next Auth
Built auth from scratch once on an early project. Never again. Next Auth handles sessions, OAuth, and JWT. I configure my providers and move on.
React Hook Form
Had a complex input form in one of my SEO tools and managing it with plain React state was a mess. React Hook Form with Zod fixed that — typed, validated, minimal re-renders. Forms stopped being something I think about.
TanStack Query
I was writing the same useEffect fetching patterns on every project. TanStack Query killed that habit. Caching, background refetching, loading states — all handled without me writing a single line of polling logic.
Tailwind CSS
Resisted it for a while. Used it building my portfolio and never looked back. No naming things, no file switching, just building. Tailwind keeps me moving fast on personal projects where momentum matters.
shadcn/ui
Unlike other component libraries, shadcn/ui copies components directly into your project — you own the code completely. Paired with Tailwind it covers all the repetitive UI work without locking me into anything I can't change. First component library that hasn't eventually frustrated me.
TypeScript
Used to skip it on side projects. Came back to one three weeks later with no idea what my own functions expected. That cured me. TypeScript is slower for an hour, faster forever. Every project starts with it now.
Backend
NestJS
Started my SEO tools with Express. Fine at first, then the project grew and there was no structure anywhere. NestJS fixed that — modules, guards, pipes, decorators. Everything has a place and I always know where to look, even after weeks away from the code.
Prisma
First ORM that actually felt built for TypeScript. One schema.prisma file, auto-generated migrations, fully typed queries. Adding a new model to a side project at midnight is no longer something I dread. Prisma Studio is handy too — quick data checks without a separate tool.
PostgreSQL
Tried different databases. Always come back to PostgreSQL. Fast, reliable, JSON support, full-text search built in — which came in useful building search features for my SEO tools. No surprises, great documentation.
Strapi CMS
Got tired of redeploying my entire Astro portfolio just to update a blog post. Strapi gave me an admin panel to manage content without touching code. Self-hosted, clean API, plugs straight into Astro without friction. Any project with regularly changing content gets Strapi from day one now.
Deployment
Vercel
Frontend goes on Vercel. Push to Git, it's live. Preview URLs for every branch — useful when testing something on my phone before merging. Zero config, nothing to maintain.
Coolify
Everything else — NestJS, Strapi, PostgreSQL, n8n — runs on my VPS managed by Coolify. Self-hosted dashboard that handles SSL, environment variables, and Git deployments. Before this I was doing it all manually over SSH and constantly breaking something. Night and day difference for managing multiple hobby projects on one server.
Ubuntu + Docker
VPS runs Ubuntu 22.04, everything in Docker containers. I've broken my server more than once learning this stuff. But owning my own infrastructure means no vendor lock-in, no surprise bills, and full control. Docker means what runs locally runs in production — after getting burned by environment mismatches early on, that consistency is worth everything.
AI Tools & Automation
Not using AI for everything — just the specific things each tool is actually good at. Used that way, they genuinely save time on the parts that don't need my full attention.
Claude
My go-to for anything that needs real thinking — tricky bugs, architecture decisions, writing docs. Claude explains trade-offs instead of just giving confident answers. When I'm the only one making decisions on a project, that careful reasoning matters more than speed.
ChatGPT
Quick lookups and a second opinion. When I'm unsure about an approach I'll ask both Claude and ChatGPT and see where they differ. Two models, two perspectives — useful before committing to something.
Antigravity
My main editor now. Antigravity knows your codebase — types, patterns, existing abstractions. When I'm working on my SEO tools and ask it to add something, it fits what's already there. That's the difference between AI that actually helps and AI that creates more work than it saves.
Codex
CRUD scaffolding, API schemas, repetitive TypeScript interfaces — the stuff that's not hard but breaks your focus. Codex handles that category. Generate, review quickly, move on to the parts that actually need thinking.
OpenCode
AI coding agent that runs directly in the terminal. When I'm deep in a backend session — Docker, server work, database stuff — OpenCode means I don't have to break my flow to get AI help. Still new in my setup but fits naturally.
n8n
The most underrated tool in this list. Self-hosted Zapier, basically. I use it across all my projects for webhooks, scheduled tasks, and connecting services. Best example — when I publish content in Strapi, n8n automatically triggers a portfolio rebuild. No manual steps. Self-hosted means no task limits, no extra costs, data stays on my server. Once it's running you find uses for it everywhere.
Wrapping Up
This stack came together by building real things and replacing what didn't work. Every tool here went through that process.
If you're still comparing stacks instead of building — just pick something and start. Wrong choices on real projects teach you more than any research. Build something. Ship it. Notice what hurts. Fix that.