Building My First Mobile App on a $0 Budget
Part 1 of my build log on Xray AI Lab
I’m starting something new on this blog: a public build log. For the next few months I’m going to build a mobile app from scratch, alone, with no budget, and write down everything that happens, including the mistakes.
This first post covers the why, the idea, and the tech stack I chose before writing a single line of app code.
Why build in public?
Xray AI Lab has mostly been about experiments and things I’m curious about. A real product is different. It forces decisions, deadlines and trade-offs that tutorials skip. Writing about it keeps me honest, and if I get something wrong, someone may tell me early instead of me finding out after launch.
The idea
The app is a language exchange platform. You match with people who speak the language you want to learn, chat with them, and get help along the way: instant translation, AI-powered corrections of your messages, voice notes, and an AI practice partner for the moments when no human is online.
The features are simple to describe and surprisingly deep to build. Matching, real-time chat, audio, translation and AI all touch different parts of a stack, which makes it a great project for learning.
The rule: $0 until it earns something
I’m a solo developer and a student. I don’t want to spend money on an idea that hasn’t proven itself, so I set one rule: everything must run on free tiers until the app has real users.
The only two costs I allow myself later are the Google Play fee (99 per year). Everything else should be free until I have a little revenue.
The stack I chose
Here is the stack, and the reasoning behind each choice.
One language everywhere: TypeScript
I’m using TypeScript for both the app and the backend logic. Learning one language deeply beats learning three shallowly, and the type checker catches a lot of my mistakes before users do.
React Native with Expo
I already know React and Next.js, so React Native with Expo was the obvious choice. One codebase gives me Android and iOS. Expo Router gives me file-based navigation that feels like Next.js, and Expo’s build service (EAS) handles builds without me touching Xcode or Android Studio more than necessary.
For the rest of the front end:
- NativeWind for fast Tailwind-style styling
- Zustand for app state and TanStack Query for server data and caching
- React Hook Form + Zod for forms and validation
Supabase as the backend
Instead of writing and hosting my own server, I’m using Supabase. One free tier gives me:
- PostgreSQL
- Auth with email, Google and Apple sign-in
- Realtime, which is enough for the chat in the MVP
- Storage for avatars and voice notes
- Edge Functions for server-side logic
It’s also plain Postgres underneath, so if I ever outgrow the free tier I’m not locked in. I could move to self-hosted Postgres with something like Laravel.
Free services for the features
| Feature | Choice |
|---|---|
| Translation | DeepL API Free (500k characters per month) |
| AI corrections and practice partner | Gemini or Groq free tiers |
| Speech-to-text | Whisper via Groq |
| Text-to-speech | expo-speech (built in) |
| Push notifications | Expo Notifications + FCM |
| Subscriptions | RevenueCat (free until about $2.5k/month in revenue) |
| Crash reporting | Sentry free tier |
| Analytics | PostHog or Firebase Analytics |
Voice and video calls are planned for version 2, probably with LiveKit’s free tier.
Two rules I’m taking seriously from day one
1. Row Level Security is not optional. With Supabase, the app talks to the database directly. If a policy is wrong, one user can read another user’s private messages. I come from a security background, so I want this right before I build any feature on top of it.
2. No API keys in the app, ever. Anything shipped inside a mobile app can be extracted. Every call to translation or AI goes through an Edge Function, where I can also add caching and rate limits to stay inside the free quotas.
What I’m deliberately skipping
Kubernetes, microservices, Redis, a custom WebSocket server, native Swift and Kotlin. They’re all useful tools, and none of them solve a problem I have right now. The biggest risk for a solo project isn’t a weak architecture; it’s never shipping.
My learning order
- React Native and Expo basics
- Supabase: tables, Row Level Security, Auth, Realtime
- Postgres SQL
- Edge Functions for translation and AI calls
- Push notifications, then subscriptions
- App Store and Play Store rules, including the privacy policy and moderation requirements for user-generated content
What’s next
In the next post I’ll design the database: users, matches, messages, corrections and reports, with the Row Level Security policies that protect them. After that, a first working screen.
If you’re building something similar, or you see a mistake in my plan, I’d love to hear from you in the comments. See you in Part 2.
— Xray AI Lab
