Rashik.
  Case study

DeltaCrownEsports Ecosystem Platform

An end-to-end esports platform: tournaments, teams, ranking, points economy, and a competitive hub — designed operator-first.

Active development
Year2024 — Active
RoleSole engineer · backend lead · frontend
StackDjango · PostgreSQL · Redis · Tailwind
StatusActive development
  The problem

What it had to solve.

Bangladeshi esports lived inside Facebook groups and Discord brackets — registrations in DMs, prize distribution opaque, no canonical ranking, and operators stitching tournaments together by hand. The system needed to turn that improvisation into infrastructure: a single source of truth for events, teams, results, and economy, with surfaces for both players and the people running the show.
  The system

How the pieces fit together.

A Django service layer fronts a relational core; Redis handles session and ranking caches. Django templates with server-side rendering deliver the player-facing surfaces, while a dedicated operator console sits on top of the same models with elevated RBAC.

  Module tour

The surfaces operators and players actually touched.

01Module

Tournament Engine

The heart of the platform — events, brackets, scheduling, results, and reward pipelines as first-class models.

  • Six formats: single & double elimination, round robin, Swiss, group + playoff, battle royale
  • Bracket auto-generation with seed inputs and tie-breakers
  • Match check-in windows + auto-forfeit timers
  • Operator overrides logged as audit events
deltacrown · tournaments · bracket
Phoenix13
Echelon07
Drift13
Apex07
Nova13
Pulse07
Vortex13
Crown07
Phoenix13
Drift11
Nova13
Vortex11
Phoenix13
Nova10
Phoenix
Champion
02Module

Team & Roster Management

Teams as durable objects — invites, role transitions, eligibility checks, and game-specific roster constraints.

  • Invite + accept flow with TTLs
  • Captain transfer + co-captain delegation
  • Per-game minimum roster validation at registration
  • Team history record retained across season resets
deltacrown · teams · phoenix · roster
Team Phoenix
5 / 5 roster · verified
Active
JNJN-playerCaptain
AMAM-playerDuelist
SRSR-playerController
KHKH-playerSentinel
TRTR-playerInitiator
03Module

Crown Points & DeltaCoin

Two economies on the same ledger — Crown Points for ranking, DeltaCoin as a soft currency for entries and rewards.

  • Event-sourced ledger — every credit / debit is auditable
  • Idempotent grant operations safe under operator retries
  • Decay rules per game season so old wins fade
  • Read-time projections cached in Redis for the leaderboard
deltacrown · ranking · crown points
Top teams · crown points
01Phoenix+1,240
02Nova+1,180
03Echelon+1,050
04Drift+980
05Apex+920
06Pulse+870
04Module

Competitive Hub

Showdown, Missions, Bounty, and Dropzone — meta-modes layered on top of the core economy.

  • Mode-specific reward tables wired into the ledger
  • Quest progression tracked against participation events
  • Bounty matches as inverted brackets with stake escrow
  • Operator dashboard for live mode tuning
deltacrown · competitive hub
ShowdownLive
Missions12 active
Bounty3 open
DropzoneDaily
05Module

Operator Console

A dedicated operator-side app — admins, organizers, and judges working against the same data the player UI reads from.

  • Granular RBAC per workflow (verify, dispute, reward, override)
  • Verification queues for registration and submission proofs
  • Per-team audit timeline with read-only filter views
  • Action log retained even after season resets
deltacrown · operator · queues
Operator console
RBAC
Registration12 pending
Result disputes2 open
Reward queue6 ready
Roster changes4 pending
  Engineering decisions

Choices that shaped the build.

01 / 06

Relational core, not a NoSQL stew

Tournaments, teams, and ledger entries are inherently relational — joins, constraints, and transactions earn their keep. PostgreSQL with composite indexes for ranking queries beat a 'flexible' document store on every read path I tried.

02 / 06

Service layer between views and ORM

Django views stay thin. Domain logic lives in service modules with explicit inputs and outputs — easier to test, easier to reuse from background workers and the operator console.

03 / 06

Event-sourced economy

Crown Points and DeltaCoin are write-only ledgers; balances are projections. Reconciliation, refunds, and disputes become reversible operations instead of destructive edits.

04 / 06

Operator-first design

Every player workflow has an operator counterpart with audit trails. The system was built knowing humans need to intervene; the goal was to make intervention safe and observable, not impossible.

05 / 06

RBAC scoped to actions, not pages

Permissions live on the verbs (`verify_payment`, `override_result`, `settle_reward`) — not on URL paths. The same admin UI shows or hides workflows depending on the operator's grants.

06 / 06

Server-side pagination + cached projections

The leaderboard, team list, and tournament archive all use cursor pagination with Redis-cached projections. Cold start aside, response times stay flat as data grows.

Engineering decisions
  What I learned

The honest part.

Designing both player and operator surfaces against the same data taught me that the boundary between 'product features' and 'admin tools' is mostly a convention — both are real interfaces with real users, and treating the operator side as a second-class hack is how systems become unmaintainable. The other lesson was about reversibility: anything that can be undone is something you can ship faster.
  Current status

Where this lives now.

Live at deltacrown.xyz on a free-tier host (expect a cold start). Real users, teams, and tournaments exist. Active development continues — payment integration, live spectator features, and an Android-first mobile app are the next big slices.

Live link cold-start ~30s · Render free tier