Engineering a React Native Live-Streaming App for a Creator Platform
DBB Software built and ran the React Native app and NestJS backend for a creator live-streaming startup, from the first build through its 2024 launch on iPhone and Android.
Industry
Media & Entertainment
Service
Mobile App Development
Team
2 Team Leads (FE and BE), BE Developers, Mobile Developers, DevOps Engineers, QA Engineers
Project State
May 2023 - May 2024
Country
NDA

About the Client
The client is a startup that built a social live-streaming app for creators, released on iPhone and Android in 2024. Creators broadcast live to their followers from a phone or from studio software. Viewers browse a full-screen feed of live streams, interact with creators during broadcasts and support them through paid subscriptions.
The Client's Initial Request
The client engaged DBB Software for full-stack development and application management because it was taking a live-streaming product from first build to launch on both app stores.
One App for iOS and Android
A single codebase for creators and viewers, with live video working on both platforms.
01
A Smooth Live Feed
Viewers swiping between live streams without long waits or a drained data plan.
02
Fast, Safe Releases
Features switched on and off without app-store review, and only stage-tested backend builds reaching production.
03
A Backend Built to Grow
Independent services the team could build in parallel, with room for many third-party integrations.
04
Built-In Safety Rules
Age rules, moderation, blocking and account deletion for a public social app.
05
The Deliverables
DBB Software built the mobile app and the platform behind it, and ran both from first build through launch.
Cross-Platform React Native App
One React Native and TypeScript codebase served creators and viewers on iPhone and Android.
148 GraphQL operations were generated into typed code from the backend schema, so the app's queries stayed checked against the API.
Sign-up and login used one-time codes sent through Twilio, and sessions renewed in the background with refresh tokens.
Real-Time Video Integration
Live video ran through a third-party service built on WebRTC, the open standard for real-time audio and video, and the backend decided who could connect.
The server issued each viewer a token for one channel, so the vendor's secret key never reached the phone.
The vendor's signed "stream started" and "stream ended" webhooks were verified with a body hash and an HMAC signature before they entered Kafka.
Creators went live from the phone camera or from OBS, the open-source broadcasting software, over RTMP. Streams were capped at 4 hours, with warnings 30, 10 and 2 minutes before the end.
On iPhone, the app ran its own camera session, so creators saw a preview before going live. At most 15 frames waited in the queue, and video went out at 720x1280 and 30 fps.
Leaving the app paused a broadcast, and Resume restarted video and chat. On Android, the back button shrank a live broadcast into picture-in-picture, and a creator who reopened the app during a studio stream was offered to jump back in.
A nightly end-to-end suite published test video through the vendor and checked the real-time events a creator and a viewer should receive, across 12 tests and 114 assertions.
Swipe Feed with Three Live Connections
Only the stream on screen and its two neighbors held a live video connection.
Neighboring streams played muted, so the next swipe opened on a stream that was already connected.
On iPhone, neighbors were also capped at about 830 kbps of video bandwidth.
Streams two or more positions away stayed disconnected and used no data.
Remote Feature Control
The app carried 32 remote settings, and every feature switch defaulted to off.
A feature went live by changing a setting in Firebase Remote Config, with no new app build or store review.
JavaScript fixes shipped over the air through CodePush, and a remote switch could require users to update to a newer app version.
Backend releases promoted the exact container image already deployed to stage. The pipeline stopped with an error when stage had never received that image.
NestJS Service Backend
The backend ran as NestJS services behind one GraphQL gateway.
The gateway called 14 services over gRPC, an open-source framework for typed service-to-service calls. The other services exchanged events through Kafka with Avro schemas, and the data lived in MongoDB and Redis.
Internal services shared typed contracts: 20 protobuf files defined 18 gRPC services and 171 calls, and the TypeScript clients were generated from them at build time.
A message that crashed a consumer moved to a dead-letter topic, a holding queue for failed messages.
Image uploads were capped at 15 MB, and the file type was read from the file's first bytes, so only GIF, PNG and JPEG files were accepted.
Scheduled streams could be booked 1 hour to 1 month ahead, on :00 or :30 slots. Reminders reached the creator 60 minutes before and followers 15 minutes before, in push batches of 500 devices.
Resilience and Observability
The backend was built to contain failures and make every request traceable.
A circuit breaker cut off a failing dependency after 5 errors and tried it again after 15 seconds. The video vendor's API client used a stricter limit of 3 errors.
All 23 services loaded the Datadog tracer before anything else, and the gateway passed each request's trace ID to the services it called, so one user action could be followed across the system. Sentry reported errors, and all services shared one set of 314 error codes, numbered in blocks per area.
Server-Side Safety Rules
The server enforced the platform's age, moderation and account rules.
Users under 13 could not create a profile, and direct messages required age 16. The app also hid Go Live from users under 18.
Stream titles passed Hive, an AI content-moderation service, before they were saved.
Viewers a creator had blocked received "not found" when they tried to join that creator's stream.
A deleted account could be restored for 30 days. After that, one event told seven services to erase the user's data.
Results Achieved
Secure Token Provisioning
The backend issued per-channel viewer tokens, guaranteeing video vendor API secrets were never exposed within the client bundle
Type-Safe API Contracts
Backend schema modifications instantly surfaced as compile-time type errors in the client, preventing breaking changes from reaching production.
Over-the-Air Deployment Pipelines
Remote feature flags and OTA JavaScript payloads enabled live bug fixes and feature rollouts without triggering App Store review cycles.
Client-Side Connection Optimization
The application strictly limited concurrent video connections to three nearby streams to aggressively minimize client data consumption.
Server-Enforced Age Gating
The backend natively enforced age-based feature toggles, completely disabling broadcast capabilities and restricting messaging for users under 18.
Building a Live-Streaming App?
DBB Software engineers have taken a React Native streaming app and its backend from first build to launch.
Contact Us
"Most of our work starts with a 30-minute call where someone describes a product they're trying to ship and one part of the engineering picture they can't get around.
If that's where you are, let's set one up; I'll tell you straight whether we're the right fit.”
Mina Morkos
Business Development Manager
Want a similar outcome for your team?
Ask our AI assistant — it can pull related case studies, talk through the approach, and put you in touch with the team if you want a deeper conversation.



