Pay-per-minute speaking practice
Solo developer · design, backend, frontend, payments, deployment, Android
Callers buy minute packages and connect to available speakers. Speakers earn per minute. Calls run peer-to-peer over WebRTC, while a Flask and Socket.IO server handles matching, signalling, billing and an admin panel where plans and prices can be edited without code.
The same site is packaged as an Android app (Trusted Web Activity) and is in Google Play testing, with Google Play Billing built in behind an admin on/off switch.
- Python
- Flask
- Flask-SocketIO
- WebRTC
- TURN (Metered)
- PostgreSQL (Neon)
- PayPal
- Stripe
- Google Play Billing
- PWA / TWA
- DigitalOcean App Platform
Source code is in a private repository. Happy to walk through it in an interview.
architecture
problem → fix
Calls failed to connect
A race condition sent the offer before the receiver was listening. I added a receiver_ready signal so the caller waits.
problem → fix
Data lost on every deploy
SQLite lived inside the container. I migrated production to Neon PostgreSQL, so data now survives redeploys.
problem → fix
Database locks under load
Concurrent writes blocked each other in SQLite. Enabling WAL mode fixed it during development.
problem → fix
Stripe unavailable from Bangladesh
I went live with PayPal for card payments and built Play Billing for the app, with Stripe ready once verification clears.