Skip to main content
DBB Software logo

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

NDA

NDA: Social Streaming Platform Case
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

shield

Secure Token Provisioning

The backend issued per-channel viewer tokens, guaranteeing video vendor API secrets were never exposed within the client bundle

agile development

Type-Safe API Contracts

Backend schema modifications instantly surfaced as compile-time type errors in the client, preventing breaking changes from reaching production.

Code

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.

Data Transfer

Client-Side Connection Optimization

The application strictly limited concurrent video connections to three nearby streams to aggressively minimize client data consumption.

checkmark

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

I have read the principles of personal data protection - Privacy Policy

"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.

Discuss a similar project