When I started building freeticket, I had one constraint that shaped everything: I was the only developer. That meant the stack had to let me move fast without accumulating debt I couldn't pay back.
Why Next.js + tRPC
The combination of Next.js App Router with tRPC gives you end-to-end type safety from the database to the UI, without the ceremony of REST or the overhead of GraphQL. For a solo developer, this is a massive productivity multiplier — TypeScript catches your mistakes before your users do.
Server actions in Next.js 15 simplified the auth flow significantly. Mutations that previously required a full API route + client fetch now live in a single file. Less surface area, fewer bugs.
Database: Prisma + Supabase
Prisma gives you a type-safe ORM with migrations that actually make sense. Supabase gives you a hosted Postgres instance with Row Level Security, real-time subscriptions, and an S3-compatible storage layer. Together, they eliminate the need for a separate backend service for most use cases.
Payments: Stripe
Not a controversial choice. Stripe's Latin America coverage has improved dramatically — Colombia, Mexico, and Ecuador all have full support. The Stripe React SDK makes building a custom checkout straightforward, and their webhook system is battle-tested.
Video: Mux
Free2C (our streaming feature) needed a video infrastructure that handled adaptive bitrate, Latin American CDN coverage, and a simple API. Mux checks all three boxes. The React player component took about an hour to integrate.
Mobile: Flutter
80% of our users are on mobile. Building native apps for both iOS and Android with separate codebases was not an option. Flutter with BLoC state management gave us a single codebase with native performance and the ability to integrate platform-specific features (Apple Sign-In, Google Pay, in-app purchases) when needed.
What I would change
In retrospect, I would have invested earlier in observability. PostHog for analytics and Sentry for error tracking should have been day-one decisions, not afterthoughts.