Rheos is an AI social media platform built for virality. Users create on-brand posts — text, image, carousel, video — and publish to Instagram and LinkedIn in minutes. The stack behind it is designed for one thing: shipping AI-native features fast enough to stay ahead of the market. Two of us build and run it, but what matters is what the stack enables, not the team size.
Here is every layer, why it was chosen, and what it unlocks.
Frontend: Next.js 16 + React 19 + Tailwind v4 + shadcn/ui
The dashboard runs on Next.js 16 with the App Router. React 19 Server Actions mean most mutations are typed async functions that execute on the server — no API routes to maintain, no client-side state management for writes. This matters for iteration speed: adding a new feature is writing a function, not wiring up an endpoint.
Tailwind v4 with shadcn/ui gives us a component library that looks polished without a designer. Accessible, well-tested components out of the box. We spend time on product logic — content creation flows, AI interactions, publishing pipelines — not design system maintenance.
Backend: Firebase
Firestore, Auth, Cloud Functions, Storage — one project, one deploy command. The choice over Postgres-based alternatives comes down to real-time subscriptions.
When a user triggers an AI generation, the result writes to the database and the UI updates instantly. No polling, no WebSocket infrastructure, no pub/sub layer. For a product where users are watching AI generate their content in real time, this responsiveness is the feature. It is what makes the app feel alive.
AI Layer: Multi-Model with Fallback Chains
This is where things get architecturally interesting. Different AI tasks have different requirements, so we use multiple models:
Gemini handles the volume work — content brainstorming, tagging, image analysis, website extraction. Fast, cheap, excellent at structured output.
Claude handles copywriting — social posts, captions, document editing. The quality difference for natural-sounding copy is real.
Image generation runs a two-tier cascade with automatic fallback if the primary provider fails or is rate-limited.
Every AI flow has typed input and output schemas, automatic retries, and usage logging. Fallback chains mean if one provider goes down, another picks up seamlessly. Users never see an error — they just get their content. For a product that lives or dies on AI reliability, this resilience is non-negotiable.
Video: Programmatic Composition
Video posts are composed programmatically in React. Users build scenes in the browser — text layers, images, transitions — and the composition renders server-side. Same mental model as building a UI component, except the output is an MP4. This means we can iterate on video templates as fast as we iterate on the rest of the product.
Hosting and Deployment: Vercel
The dashboard, marketing site, and knowledge base all deploy to Vercel. Preview deployments on every PR, automatic production deploys on merge. Push code, it is live in 90 seconds. When you are racing to ship features, deployment friction is the silent killer — eliminating it compounds over months.
Payments: Stripe
Stripe handles subscriptions and usage-based billing. Subscription events update the database, and the UI reflects changes in real time. Standard, but it works.
Observability: Sentry + Amplitude
Sentry catches production errors with full stack traces. Amplitude tracks product analytics — feature adoption, funnel conversion, AI bot traffic to the knowledge base. Both connect to our development environment via MCP, so debugging a production issue means asking a question, not switching between dashboards.
Mobile: Expo React Native
The mobile app shares the same Firebase backend. One TypeScript codebase for iOS and Android, with over-the-air updates. Every real-time feature from the web app works on mobile — same data, same auth, different interface. For a social media tool, mobile is not optional.
The Development Layer: Claude Code + MCP
This is what makes the velocity possible. The AI is not just in the product — it is the development process.
I run Claude Code with 20+ MCP servers connected: the database, payments, error tracking, analytics, hosting, CRM. A single conversation can debug a production error, check the database state, fix the code, deploy it, and update the task board. My co-founder uses the same setup for model training and mobile development, working against a shared knowledge base.
The Compound Effect
No individual choice here is remarkable. Next.js is popular. Firebase is well-known. Stripe is standard. What matters is the composition: every layer chosen to minimise operational overhead and maximise iteration speed, with AI tooling filling gaps that would normally require specialists.
DevOps? Handled in development conversations. QA? AI-assisted testing plus real-time error tracking. Data analysis? Analytics queries run directly in coding sessions.
The stack is deliberately boring where it can be, and AI-augmented where that unlocks disproportionate leverage. The result: a production SaaS with the feature velocity to compete, built by two people who ship like ten.