Tournament Platform for a Mongolian Esports League
Designed and built a clickable tournament platform for an Ulaanbaatar amateur and semi-pro esports league: tournaments checked against each publisher's recorded licence terms, brackets and schedules, a match day board that shows who has checked in, and score reports with evidence and disputes. No betting features of any kind.
Most of our work is under NDA. Per agreement, we can share the work but not the company details - all names and identifying information shown here have been changed.
Dashboard, tournament list, tournament detail with 7 tabs, match centre and match detail. Every one of the 13 tournaments and 40 matches opens its own page.
Prize pool cap, entry fee rule, sponsor categories, required wording and minimum player age, checked against the game's recorded terms. A draft that fails, such as a ₮36,000,000 pool against a ₮30,000,000 cap, cannot open registration.
Upcoming, check-in open, ready, live, awaiting result, disputed and done. A card turns amber when check-in closes within 5 minutes with a team incomplete, and red once the start time has passed.
6 games, 58 teams, 40 matches and 5 referees, with tournaments in every status from draft to cancelled and a day of 12 matches in every match state.
Tuulgol ran its seasons on Discord servers, Google Forms, a public bracket site and a spreadsheet of bank account numbers. Admins checked ranks by asking for screenshots, had no record of which under-18 players had a guardian's permission, settled score arguments in direct messages, started matches 30 to 50 minutes late because nobody knew which teams had shown up, and took up to three months to pay prize money.
Khuleg covers the whole competition lifecycle in one platform: registration with rank and age eligibility checks, brackets in every common format, scheduled matches with check-in and forfeits, score reports with screenshot evidence and referee-resolved disputes, integrity reports and sanctions, stream scheduling, and prize pools paid out only after identity checks.
A community league does not own the games it runs. Every tournament has to fit the publisher's terms, every minor needs a guardian's consent, every result has to stand up to a dispute, and every prize has to reach the right person.
Riot, Valve, Krafton and Moonton each publish their own terms for community tournaments, covering prize pools, entry fees, sponsors, branding and player age. Two publishers asked Tuulgol to show its events followed those terms, and the league could not do it quickly.
Players under 18 may take part only with a guardian's recorded consent and only in games whose publisher rules allow their age. Mongolia's Law on Personal Data Protection applies to player and guardian data, including identity documents kept for payouts.
Score arguments were decided in private chats with nothing written down. A fair result needs both captains' reports, screenshot evidence, the rulebook clause each side relies on and a named referee who rules with written reasons.
Admins could not see which players had checked in, so matches started late and forfeit rules were applied inconsistently. Across six games, several tournaments and shared stream slots, the day has to be run from one board.
Mapped 12 roles from league director and referee to caster, player and guardian, 44 screens across the organiser console, caster desk, player hub and public pages, and the data model for games, licence records, eligibility rules, teams, tournaments, matches, score reports, evidence, disputes, sanctions and payouts. Wrote down the rules the design follows: publisher licence terms, Mongolia's personal data law, guardian consent for minors, no gambling, and prize payouts in tögrög after identity checks.
Built 5 key screens on a production dashboard kit: the dashboard with season KPIs, today's matches and the tournament admin's work list, the tournament list with licence check chips and a new tournament panel, tournament detail with registrations, bracket and schedule, the match centre live board with forfeit watch, and match detail with games, score reports, evidence and lobby. All actions run on local state.
Sign-in and rank data through Riot, Steam, OpenDota and FACEIT, Discord bot pings, Twitch and YouTube schedules and embeds, identity checks through a provider such as Sumsub or Onfido, payouts through Khan Bank or Golomt Bank and Wise, and evidence in signed object storage. Staff auth by role, a full audit log, and the remaining screens: eligibility, disputes, integrity, sanctions, broadcast, payouts, privacy requests, the caster desk and the player hub.
Each tournament records the publisher terms version it runs under and shows every recorded limit as pass or blocked. A tournament that breaks one stays a draft until it is fixed, so the league can show its events follow the terms.
The live board shows check-in ticks per player, a countdown and the lobby for every match. Forfeit watch lists teams that missed check-in with the rule that applies, and check in on behalf, extend check-in and declare forfeit each need a reason.
Each game shows whether its result was reported by a team, fetched from publisher match data or set by an admin. Matching captain reports confirm after 15 minutes, conflicting ones open a dispute, and every screenshot is listed with its uploader, time and file hash.
A tournament is either 18+ only or open to minors with guardian consent, and the minimum age is checked against the publisher's terms. Pending consents show on the team roster, and the public pages are specified to show players under 18 by nickname only.

Designed and built a clickable studio console for a seven-person Tbilisi studio's standalone VR puzzle demo: builds on release channels with a QA checklist, playtest sessions with a live run sheet and comfort stops, and comfort results by setting that answer a publisher's first question with evidence.

Designed and built a clickable player backend and live-ops console for a Bishkek studio's team-based multiplayer game on iOS, Android, Steam, PlayStation and Xbox: one player account across platforms, a server-authoritative currency ledger, audited grants with a second approver above each role's limit, and remote config targeted by segment.
Enterprise Software Engineering - Human + AI
Contact Us
© 2026 - Copyright. All Rights reserved Oceanlab
Location
Global Headquarters
21 Merchant Road, 3rd Floor, Singapore 058267
Main corporate office and leadership operations
North America Office
548 Market Street, PMB 12345, San Francisco, CA 94104
Client operations and business development
India Office
402 Shivalik Shilp II, SG Highway, Ahmedabad 380015
Engineering and delivery center
Enterprise Software Engineering - Human + AI
Contact Us
Locations
Global Headquarters
21 Merchant Road, 3rd Floor, Singapore 058267
Main corporate office and leadership operations
North America Office
548 Market Street, PMB 12345, San Francisco, CA 94104
Client operations and business development
India Office
402 Shivalik Shilp II, SG Highway, Ahmedabad 380015
Engineering and delivery center
© 2026 - Copyright. All Rights reserved Oceanlab