Case study 01 — Language-learning app · iOS & Android
Pingua
Pingua is a language-learning app for iOS and Android. I built its backend from scratch — seven Node.js / TypeScript services and a Go real-time gateway — developed the Back Office and the pingua.app website, and ran it all in production.
The challenge
Auth, gamification, content, communication, backup and AI ran as separate services. Together they had to stay consistent across service boundaries, deliver events in real time and keep reads fast, while remaining healthy in production.
01 / 07
Microservices from zero
The app needed a backend that could evolve one service at a time, with slow work kept off the request path.
I built the backend from scratch as Express.js microservices in Node.js / TypeScript: Auth, Gamification, Content, Communication, Backup, AI Manager API and AI Automation. I designed their asynchronous communication on AWS SQS, which also carried background jobs such as email delivery.
- Node.js / TypeScript
- Express.js
- Microservices
- AWS SQS
- Async inter-service messaging
- Background jobs (email)
02 / 07
Consistency by design
An update spanning several services must not be left half-applied when a step fails or a message arrives twice.
I used transactions and the outbox pattern so each event committed with the write that produced it, and sagas with compensation to unwind multi-service flows that failed midway. Queued jobs ran through idempotent consumers with a DLQ, database locks guarded concurrent access, and circuit breakers contained failing external calls.
- Transactions
- Outbox pattern
- Saga / compensation
- Idempotent consumers
- DLQ
- Database locks
- Circuit breaker
03 / 07
Delivered, online or not
Interactions and notifications had to arrive instantly for online users — and still reach those who were offline.
I built a real-time gateway in Go on WebSockets and designed delivery around a single question: is the user online? If yes, the event goes over the socket. If not, it arrives as a push notification.
- Go
- WebSocket
- Real-Time Gateway
- Socket delivery when online
- Push fallback when offline
04 / 07
Engagement on a schedule
Streaks, weekly quests and leaderboards only work if rewards and resets happen on schedule, without manual work.
I built the game mechanics of learning: streaks, XP and badges, weekly quests and leaderboards. Reward distribution and weekly resets ran as scheduled cron jobs, so every week closed and reopened on its own.
- Streaks
- XP
- Badges
- Weekly quests
- Leaderboards
- Cron jobs
05 / 07
Fast reads, lean sync
Read traffic shouldn’t compete with writes, and clients shouldn’t download data that hasn’t changed.
I split reads from writes: the primary database took the writes while read replicas carried the read load. Connection pooling and a multi-layer cache — in-memory, hybrid, Redis — cut repeated work, and version-based incremental sync sent clients only what had changed.
- Read replicas
- Read/write splitting
- Connection pooling
- In-memory · hybrid · Redis cache
- Version-based incremental sync
06 / 07
An AI content pipeline
Learning content needs text, audio and optimized images, and preparing each of them by hand is slow.
I built services that automate content production: text from OpenAI, Claude and Gemini, audio from Azure TTS and ElevenLabs, images optimized with Sharp / TinyPNG. n8n orchestrated the workflows and connected them to the Back Office.
- OpenAI · Claude · Gemini
- Azure TTS
- ElevenLabs
- Sharp / TinyPNG
- n8n
- Back Office integration
07 / 07
Running it in production
A distributed system is judged on its worst day: failures have to be visible, contained and reversible.
I ran production on AWS and DigitalOcean with HAProxy load balancing and health checks on every API, self-hosted internal tools with Docker Compose, and wrote k6 performance and failover tests. Grafana, Prometheus, Loki, OpenTelemetry and Sentry backed monitoring, root-cause analysis, hotfixes and rollbacks.
- AWS · DigitalOcean
- HAProxy + health checks
- Docker Compose
- k6 performance & failover tests
- Grafana · Prometheus · Loki
- OpenTelemetry · Sentry
- Root-cause analysis · hotfix · rollback
