You ever stare at your codebase and think, “Okay, this feels kinda… good?” Not perfect—never perfect—but there’s something oddly satisfying about seeing your stack come together. That’s been my 2025 vibe. I’ve dialled in a setup that’s fast, clean, expressive, and, most importantly, doesn’t make me want to scream into a pillow at 2 a.m.
Let me break it down for you.
The Frontend: Where I Spend Way Too Much Time
Okay, so frontend first. And yes, I know, backend folks are already rolling their eyes. But let’s be honest—we all judge apps by their UI before we even poke around the API.
These days, I’m building almost everything with:
- Next.js
- Shadcn/ui
- TailwindCSS
This trio has become my comfort zone, like a hoodie that actually fits right. Let’s unpack why.
Next.js: Not Just a React Wrapper Anymore
Back when I first touched Next, it felt like React’s responsible older sibling—structured, opinionated, and maybe a little too into static generation. But 2025 Next? It’s evolved. I mean, with App Router, Server Actions, and built-in caching strategies, it’s the first time I’ve seen React apps behave like they belong in production by default.
Plus, the DX (developer experience) is smoother than ever. Hot reloads don’t flake out like they used to. File-based routing still feels magical. And layouts finally make sense.
TailwindCSS: Utility-First, Brain-Later
I’ll admit—I fought Tailwind at first. Something about adding px-4 py-2
to my button elements felt… wrong. Like I was breaking some kind of sacred separation-of-concerns law.
But now? Now I get it.
It’s fast. It’s readable. And with Just-in-Time mode, it’s blazing. No more custom classes unless I absolutely need them. It’s become muscle memory.
Also, if you haven’t paired Tailwind with Shadcn/ui yet, you’re sleeping.
Shadcn/ui: Design System without the Handcuffs
I used to dread building accessible, decent-looking components. Then I met Shadcn/ui. It’s not a library so much as a toolbox that lets you build your UI—just with smarter defaults.
Want to tweak that modal? Cool, it’s just code. No need to hack around somebody else’s abstraction. Shadcn lets you keep ownership of your components without starting from scratch.
Supabase: My Backend Ride-or-Die
Look, I’m not saying Supabase is perfect. But in 2025? It’s the closest thing I’ve found to a backend that “just works” without feeling like you sold your soul to a black-box platform.
It gives me:
- Postgres without the setup drama
- Realtime subscriptions that don’t randomly break (much)
- Row-level security that actually makes sense
- Storage for user uploads that doesn’t make me cry
But the real kicker? Auth.
Supabase Auth: It’s Not a Headache Anymore
You know what? For years, I dreaded building auth flows. Social login was finicky, email/password flows were security nightmares, and don’t even get me started on magic links.
Supabase Auth fixed a lot of that. Built-in email/password? Check. OTPs and third-party providers? Yep. Session persistence? Actually reliable.
The email templates still need a little love (okay, a lot), but the rest of the flow is straightforward. Also, RLS + Auth integration means I don’t have to build custom guards everywhere. Just define my policies in SQL, and boom—my data protects itself.
A Few Other Tools I Can’t Shut Up About
Alright, so here’s the part where I sneak in some extras. Because yeah, frontend/backend/auth is the meat—but the garnish matters too.
- Zod for schema validation. Catching bugs before they hit the DB is a small joy I treasure.
- tRPC (yep, still alive and kicking) for typesafe APIs between my frontend and backend.
- Vercel for deployments. It’s still magical—even when it breaks stuff. (Looking at you, edge functions.)
I’ve also been leaning into GitHub Copilot more than I’d like to admit. It’s like pair programming with a semi-reliable ghost. Not perfect, but it gets me through boilerplate way faster.
Stuff I’ve Dropped (and Why I Don’t Miss It)
Let’s be real. You don’t fall in love with your stack without going through a few breakups. Here’s what I’ve cut loose:
- Firebase — The vendor lock-in felt suffocating.
- Redux — Honestly, I haven’t touched it in years. Zustand and context do more than enough.
- Custom UI kits — Shadcn ruined me. I’m not going back.
Sometimes letting go is the best upgrade.
So... Why This Stack?
It’s not flashy. It’s not trendy. But it’s mine.
Every piece pulls its weight. Nothing feels overengineered or duct-taped together. And I can build apps—real ones—in hours, not weeks. That’s the real win, right?
I’ve had fewer meetings with myself about infrastructure and more actual building time. Which, ironically, means more time for debugging obscure edge cases and naming things badly—but I’ll take it.
- Josh
One Last Thought (Because You’re Still Here)
If you’re still reading this, thanks. Seriously. Writing about your stack is weirdly intimate. It’s like showing someone your desk—messy cables, half-finished Post-it notes, and all.
But the point isn’t perfection. It’s momentum. It’s progress. It’s building stuff that works—and maybe even feels good to use.
So, if you’re assembling your stack for 2025, don’t chase trends. (That feels contradictory now that I've written it.) Find the tools that feel like extensions of your hands. And when you do, don’t look back.
Now excuse me while I push to production and pray nothing explodes.
Top comments (0)