A while back I put together the Best Web Development Stack Tier List 2026, comparing 80+ tools across the modern web stack. This post breaks down which of those tools I actually picked when building GOATY, and why.
None of these picks are objectively right. They're the practical choices of a solo developer balancing speed, ecosystem, and long-term maintenance cost.
React
I've shipped projects with React, Svelte, and SolidJS, and most recently, SolidJS has been my default. So why React this time? Two reasons: velocity and ecosystem.
The libraries I needed, including shadcn/ui, dnd-kit, Tiptap, are all built React-first. New patterns and trends in web dev tend to land in React before anywhere else. For a solo developer, that's hard to walk away from.
The downsides are real, though.
You're constantly thinking about state and re-renders
useMemo and useCallback become reflexes, not exceptions
Some features take longer to build than they would in SolidJS, and debugging is trickier
But for the chance to pair it with Next.js and Convex, the tradeoff was worth it.
Next.js
In a world where AI is mass-producing vibe-coded websites, SEO has never mattered more. And SEO comes down to two things:
Markup crawlers can actually read
Pages that load fast
Hitting both reliably means you need a full-stack framework with SSR. That ruled out most SPA-first options before I even started.
Next.js ships with routing, metadata, image optimization, and font handling out of the box. Stable, well-documented, and consistent to work with. The decision took about five minutes.
Tailwind CSS
styled-components, CSS Modules, and Sass are all still solid choices. My issue with them has always been the same: low cohesion.
Adding a style means creating a new class in a separate file. Editing one means jumping between files. Some people argue this is cleaner, claiming that keeping styles in one place makes the codebase more maintainable. Fair point, and I partially agree.
But I treat JSX markup as part of the styling layer. If that's the mental model, listing styles directly on elements via className feels more natural. That's exactly what Tailwind CSS is built around. And honestly, it's just less typing than writing CSS by hand.
shadcn/ui
For most developers, design is the single biggest blocker to shipping solo. Reaching for a prebuilt UI library solves that, but introduces a new problem: your site ends up looking like every other site using that library.
shadcn/ui threads the needle.
A polished, production-ready component set
You copy the source directly into your project, so customization is unlimited
Lightweight, with minimal dependencies
I'd recommend it for almost any MVP. It's that good.
Vercel
For deployment, I weighed Cloudflare Workers against Vercel. On pricing alone, Cloudflare wins. Their free tier even allows commercial use, which Vercel's doesn't.
But the practical picture was different.
Deploying Next.js 16 on Cloudflare Workers means going through OpenNext
The deployment pipeline still felt subtly unstable
Extra configuration meant extra long-term maintenance
Vercel deploys in under a minute, every time. For a solo developer, that gap was decisive.
Convex
This was my first time using Convex, and it's become the pick I'm happiest with.
I come from a frontend background. Backend infrastructure, database operations, deployment: none of it is my comfort zone. So when I committed to building GOATY alone, the backend was the part I was most anxious about.
Convex erased that anxiety almost immediately.
A unified database and backend in one BaaS
Schemas written in TypeScript: save the file, and Convex auto-migrates
API logic, ORM, and validation all live in one place
You don't need deep database knowledge to ship fast or iterate fast. Edit your schema file, hit Ctrl+S, and Convex handles the migration for you. For a solo developer, that's a rare combination.
Vercel Blob
One of the metrics that moves SEO most is image load performance. Next.js's <Image/> component automatically serves the right size for each render, but to actually unlock that, you need a compatible storage backend like Vercel Blob.
The catch: Vercel Blob charges for bandwidth. If traffic grows enough, I'll likely migrate to a storage provider that handles image optimization without that cost.
Cloudflare R2
For non-image assets like video files, raw content, larger media, I'm using Cloudflare R2 instead. Same object storage primitive, but zero egress fees, which makes the difference at scale.
Splitting storage across two providers adds a bit of complexity. But the cost gap widens with traffic, and over the long run, the separation pays for itself.
The stack behind GOATY came down to three principles: ship fast, rank well in search, keep solo maintenance manageable. If you're working on something similar, hopefully these picks give you a useful starting point.
Curious about the full ranking? Check out the Best Web Development Stack Tier List 2026.