Your Stack
Mosayic is opinionated. The stack you get is fixed — there’s no “framework selection” step. This is intentional: every choice you don’t have to make is one fewer afternoon you spend on yak-shaving instead of shipping.
The good news: Mosayic’s choices are popular, well-maintained, and battle-tested. None of them lock you into Mosayic. If you wanted to walk away, you’d still have a perfectly normal React Native + FastAPI + Supabase project.
The stack at a glance
Section titled “The stack at a glance”| Layer | Technology | Why |
|---|---|---|
| Mobile app | React Native + Expo | Cross-platform, mature, huge ecosystem |
| Backend API | Python + FastAPI | Easy to write, AI-friendly, great async |
| Auth + DB + Storage | Supabase (Postgres) | Generous free tier, no vendor lock-in (it’s just Postgres) |
| API hosting | Google Cloud Run | Serverless, scales to zero, $0 when idle |
| CI/CD | GitHub Actions | Free for public repos, cheap for private, ubiquitous |
| Mobile builds | Expo Application Services (EAS) | The de-facto standard for Expo apps |
| Push notifications | Expo Push (proxy for APNs and FCM) | One API, both platforms |
| Local dev | Docker (for Supabase only) | Required by Supabase CLI |
Read more
Section titled “Read more”Why no Firebase?
Section titled “Why no Firebase?”Earlier versions of Mosayic recommended Firebase for some pieces. We’ve moved away from Firebase for everything except optional analytics, because:
- Supabase is just Postgres. When your app grows, you don’t have to migrate to a “real” database — you already have one.
- Cloud Run is more flexible than Cloud Functions for the API layer, and the cost model is friendlier.
- Expo Push handles APNs/FCM proxying without you needing the Firebase SDK in your app for that purpose alone.
If you want Firebase for analytics or A/B testing, you can still add it — Mosayic doesn’t block it, just doesn’t depend on it.
Why Python for the backend?
Section titled “Why Python for the backend?”Three reasons:
- AI-friendliness. Modern coding assistants are extremely good at writing Python — better than they are at TypeScript backends, in our experience.
- AI/ML libraries. If you’re going to integrate Claude, OpenAI, image processing, or anything else from the ML ecosystem, Python is where the libraries live.
- FastAPI. It’s the cleanest async Python web framework, has excellent automatic OpenAPI docs, and is fast enough for almost any startup workload.
You can use a different backend language if you want — the mobile app talks to the backend over HTTPS, so anything that can serve JSON works. But the templates and Blueprint cards assume FastAPI.
What’s not in the stack
Section titled “What’s not in the stack”- No GraphQL. REST + Postgres works for almost every startup. Adding a GraphQL layer is a tax most apps don’t need.
- No Redis or Celery in the default template. Add them when you actually need background jobs or caching — most early apps don’t.
- No Kubernetes. Cloud Run handles scaling without it.
- No Tailwind by default in the mobile app. React Native uses its own styling system; Tailwind via NativeWind works but isn’t on by default.
Cost at idle
Section titled “Cost at idle”A typical small Mosayic project at zero traffic:
| Service | Monthly cost |
|---|---|
| Cloud Run (scales to zero) | ~$0 |
| Supabase free tier | $0 |
| Expo (free tier, < cap on builds) | $0 |
| GitHub (private repos, < free Actions minutes) | $0 |
| Total | ~$0 |
You’ll start paying when:
- Your Supabase project exceeds 500 MB DB or 1 GB file storage (then $25/mo)
- You exceed Cloud Run’s free tier (millions of requests/month)
- You exceed EAS’s free build cap (then $19/mo+)
- You enroll in the Apple Developer Program ($99/yr)
These costs grow gracefully — you won’t get a surprise $5,000 bill because of a viral hit.