ABDUS SAMAD
032023 – 2025FULL-STACK ENGINEER · LED CMS FRONTEND

hoichoiBengali stories, streamed to a hundred countries.

The backends and editorial tools that moved a paying Bengali streaming service off a rented platform — 40 million user records, without the audience noticing.

Role
Full-stack engineer · led CMS frontend
Timeline
Oct 2023 → 2025 · platform migration
Team
Engineering squad with hoichoi product, DevOps, QA and content ops
Focus
Backend, CMS and data migration for the largest Bengali OTT platform as it left its SaaS stack
Stack
NestJS·GraphQL·MongoDB·Redis·React·Next.js·AWS ECS·RDS·CloudFront·CloudWatch + X-Ray·Cloudflare
hoichoi.tv home page: the film Puratawn featured with a Watch Now button and a row of Uttam Kumar classics
HOICHOI.TV
of daily users served by the backends
Millions
requests per hourGRAPHQL + REST ON MONGODB
10M+
user records migrated99.9% UPTIME, ZERO CRITICAL DOWNTIME
40M
CloudWatch spend$10K → $3K A MONTH
−70%
01 · Problem

Leaving the vendor without the audience noticing.

hoichoi launched in 2017 on a licensed OTT platform. By the time the catalogue passed 800 films and 200 originals, with a paying audience spread across Kolkata, Dhaka, London and New Jersey, the vendor stack had become the ceiling: every meaningful change was a negotiation over timelines, limits and dependencies.

Leaving meant rebuilding the parts nobody sees: the catalogue and subscriber backends serving millions of daily users, the editorial tools that put a new episode on the home page every Friday, and a data model that had grown by accretion for eight years. All of it had to move without the audience noticing.

And it had to stay profitable. hoichoi is one of the few Indian OTT services that runs without burning cash, so the new platform's cloud bill was a product requirement, not an afterthought.

The product these services feed

Every rail, title and plan below is served by the backends I built.

Eken Babu title page on hoichoi web
Eken Babu on mobile web
02 · My role

CMS lead, backend builder, migration owner.

I joined the squad building hoichoi's in-house platform. I led frontend development of the content CMS and built NestJS services behind GraphQL and REST APIs on MongoDB, the layer that serves catalogue, subscriber and playback metadata to the apps.

I owned the migration of 40 million user records and 10,000+ movies and series onto the new schema, extracted SMS and email into asynchronous microservices, and ran the observability cost work that cut CloudWatch spend by 70% without losing signal.

Not mine: the video player and the native apps. I built what feeds them.

Backend

  • NestJS services, GraphQL + REST
  • MongoDB with TypeORM
  • Redis caching
  • Async microservices for SMS and email

CMS

  • React/Next.js editorial console
  • Catalogue, scheduling, rails, metadata
  • Role-based publishing workflows
  • Bulk operations and previews

Data

  • 40M user records migrated
  • 10K+ movies and series re-modelled
  • Dual-write, backfill, verify, cut over
  • 99.9% uptime through the move

Cloud

  • AWS ECS/EC2, RDS, S3, CloudFront
  • CloudWatch + X-Ray, spend cut 70%
  • CI/CD on GitHub Actions
  • Cloudflare at the edge
03 · Architecture & stack

A GraphQL gateway, NestJS services, and a CMS that writes through them.

Apps and web talk to a GraphQL gateway in front of NestJS services on MongoDB. Editors work in a React CMS that writes through the same services. Side effects that used to block requests, SMS and email, run as queue-fed microservices. Everything is on AWS behind Cloudflare, with CloudWatch and X-Ray tuned to what operations actually look at.

  1. 01

    Dual-write

    New writes land in both schemas behind a flag.

  2. 02

    Backfill

    Idempotent batches with checkpoints walk the old store.

  3. 03

    Verify

    Counts and sampled records diff to zero before anyone flips anything.

  4. 04

    Cut over

    Reads switch per domain, with a tested rollback path.

  5. 05

    Decommission

    The vendor store goes read-only, then dark.

40M USERS10K+ TITLES99.9% UPTIME
  1. 01

    Clients

    • Web, Android, iOS, TV apps
    • GraphQL for reads
    • REST for provider callbacks
    • Edge caching via Cloudflare
  2. 02

    Services

    • NestJS modules per domain
    • Catalogue, subscribers, entitlements
    • TypeORM on MongoDB
    • Redis for hot reads
  3. 03

    CMS

    • React editorial console
    • Workflows and permissions
    • Rails, scheduling, metadata
    • Publishing time halved
  4. 04

    Async

    • SMS and email microservices
    • Queues with retries and DLQ
    • Idempotent handlers
    • 30% less core load
  5. 05

    Operations

    • ECS/EC2, RDS, S3, CloudFront
    • CloudWatch metric filters
    • X-Ray tracing
    • GitHub Actions CI/CD
04 · Key technical challenges

Forty million users, ten million requests, one bill.

  1. CHALLENGE 01

    Moving 40 million users without a maintenance page

    The old and new platforms had to serve the same subscribers at the same time until the last one had moved.

    The migration ran as dual-write, backfill, verify, cut over. New writes landed in both schemas, a backfill walked the old store in idempotent batches with checkpoints, and a verifier compared counts and sampled records until the diff was zero. Cut-over flipped reads per domain behind a flag with a tested rollback path. 40M user records and 10K+ titles moved with 99.9% uptime and no critical downtime.

  2. CHALLENGE 02

    Ten million requests an hour on a document database

    MongoDB is fast when the schema matches the read path and painful when it doesn't.

    The new schema was designed from the queries backwards: rails and title pages read from pre-shaped documents, GraphQL resolvers batch with dataloaders to kill N+1s, hot reads sit in Redis, and indexes were cut to the ones the profiler could justify. The result serves millions of daily users and 10M+ requests an hour with headroom.

  3. CHALLENGE 03

    A CMS editors do not fight

    Friday drops are decided by how fast a small editorial team can publish, schedule and fix metadata.

    I led the CMS frontend: role-based workflows, bulk operations, previews of rails as viewers will see them, and validation that catches broken metadata before it reaches the home page. Publishing time fell by half, and the team stopped keeping a spreadsheet next to the tool.

  4. CHALLENGE 04

    Observability that does not eat the margin

    The first CloudWatch bill on the new platform was $10K a month, mostly for metrics nobody looked at.

    Metric optimisation (custom metrics collapsed into dimensions that matter), selective logging with levels per service, log retention tuned per stream, and query tuning on the dashboards operations actually open. Spend fell to $3K a month with no loss of alerting coverage, and X-Ray traces still follow a request across services when something breaks.

  • metric filters
  • log levels + retention
  • query tuning
CloudWatch spend, monthly. Alerting coverage unchanged.

10M+ requests an hour looks like this

0requests served since you opened this section

05 · What I built

From the editor's screen to the database.

  • 01

    Content CMS

    Editorial console for catalogue, rails, scheduling and metadata with role-based workflows, bulk ops and previews. Publishing time cut 50%.

  • 02

    Catalogue and subscriber services

    NestJS + GraphQL/REST on MongoDB and TypeORM serving millions of daily users and 10M+ requests an hour.

  • 03

    Migration tooling

    Dual-write, checkpointed backfill, verifier and per-domain cut-over for 40M users and 10K+ titles.

  • 04

    Notification microservices

    SMS and email extracted from the core into queue-fed services with retries, idempotency and dead-letter handling; core load down 30%.

  • 05

    Observability and cost

    CloudWatch metric, logging and query tuning that cut spend 70%, plus X-Ray tracing across services.

  • 06

    Release readiness

    Load checks and runbooks for Friday drops on the new platform.

  • hoichoi plans page
    Plans and entitlements, served by the subscriber services
    PLANS AND ENTITLEMENTS, SERVED BY THE SUBSCRIBER SERVICES
  • hoichoi plans page on mobile
    The same entitlement API on a phone
    THE SAME ENTITLEMENT API ON A PHONE
  • hoichoi shows catalogue page
    Catalogue rails: pre-shaped documents, one read per rail
    CATALOGUE RAILS: PRE-SHAPED DOCUMENTS, ONE READ PER RAIL
  • hoichoi free, ad-supported tier page
    The free tier, gated by the same subscriber services
    THE FREE TIER, GATED BY THE SAME SUBSCRIBER SERVICES
06 · Impact

Owned end to end, twice as fast to publish, 70% cheaper to watch.

hoichoi now owns its stack end to end. Changes that used to be planned in weeks can be tried in days, editors publish twice as fast, and the platform serves a global Bengali audience at a cost the business can sustain.

  • Millions of daily users and 10M+ requests an hour served from the in-house backends
  • 40M user records and 10K+ titles migrated at 99.9% uptime with zero critical downtime
  • Editorial publishing time down 50%; SMS and email off the critical path, core load down 30%
  • CloudWatch spend down 70% ($10K to $3K a month) with alerting coverage intact
  • Weekly originals and Friday drops now ship on a platform the team controls
A lot of the things we used to plan in weeks can be tried in days.
HOICHOI PRODUCT OPERATIONS, ON THE MIGRATION (PUBLIC POST, 2026)
Next case study · 04GurucoolThe social network your parents would approve of.
READ