What It Takes to Build a Sports Betting Platform for Ethiopia
Building a sports betting platform is one of the most complex product engineering challenges in software. You are dealing with real-time data feeds, financial transactions, multi-role access control, and a user base that expects the speed and reliability of bet365 — on a fraction of the infrastructure budget. This is the story of how we built BetJocker for the Ethiopian market.
Mobile-First Is Not Optional — It Is Survival
Over 80% of internet access in Ethiopia happens on mobile devices. Not tablets. Phones. Small screens, often older Android devices, running on 3G or unstable 4G connections. If your betting platform does not work flawlessly on a 5.5-inch screen over a mediocre connection, you do not have a platform. You have a demo.
We made every major design decision through the lens of mobile. The betting slip is a bottom sheet, not a sidebar. Navigation uses a thumb-reachable bottom bar. Markets are displayed in collapsible accordions that minimize scrolling. Match cards show the three most popular markets (1X2, Over/Under, Both Teams to Score) directly, without requiring a tap to expand.
We implemented BetJocker as a Progressive Web App. Users can install it to their home screen, and it launches in a full-screen experience indistinguishable from a native app. The PWA approach gave us a single codebase for all devices while providing the "app-like" experience Ethiopian bettors expect.
The Agent Hierarchy System
Ethiopian betting operates differently from European or American markets. There is no widespread credit card usage. Bank APIs are limited and unreliable. The dominant money movement pattern is cash-based, mediated by local operators.
BetJocker implements a three-tier role system: superadmin, agent, and player. Superadmins manage the entire platform — odds, markets, financials. Agents manage groups of players in their local area. They handle deposits, withdrawals, and act as the customer support layer for their players.
Each agent has a dedicated dashboard that shows their players' activity, their commission earnings, and tools for managing deposits and withdrawals. The financial accountability chain is strict: every ETB that moves through the system is logged, attributed, and auditable at every level of the hierarchy.
Building this required careful database schema design. Player accounts are linked to agents, agents to their parent agents, and the commission structure cascades upward through the hierarchy. We store commission percentages at each tier, and calculate earnings in real time as bets are settled.
Integrating Ethiopian Payment Methods
BetJocker supports CBE (Commercial Bank of Ethiopia), Awash Bank, Dashen Bank, and Telebirr. None of these integrations were straightforward.
CBE does not offer a modern API for third-party deposit verification. Our integration uses a manual verification workflow: players initiate a transfer using a generated reference code, and the system matches incoming transfers against pending deposits. We built an admin reconciliation interface that highlights unmatched transactions and makes manual verification efficient.
Telebirr has a more structured API, but the documentation is sparse and the sandbox environment does not perfectly mirror production behavior. We had to iterate through several integration approaches before settling on a flow that works reliably. The key insight was to implement generous retry logic and timeout handling — Telebirr responses can be slow, and treating a timeout as a failure causes false negatives.
Awash and Dashen follow similar manual-verification patterns. The common abstraction across all four payment methods is a pending transaction queue with status tracking, reference code matching, and admin tools for manual resolution.
Designing for Low-Bandwidth Environments
Ethiopian mobile data is not cheap relative to income, and speeds are inconsistent. We optimized BetJocker aggressively for low-bandwidth conditions.
Static assets are cached via service worker. Once the app shell loads, subsequent visits are near-instant. We lazy-load non-critical JavaScript and defer analytics. Images are compressed and served in WebP format with LQIP (Low Quality Image Placeholder) for progressive loading.
Odds data, which updates frequently, is fetched in small payloads. We send only the markets the user is currently viewing, not the entire odds feed. When connectivity drops, the PWA shows cached data with a clear indicator that odds may be stale. When connectivity returns, we sync the latest data automatically.
Page loads target sub-2 seconds on 4G. We achieve this through aggressive code splitting (each page route loads only its own JavaScript), static generation of market structure pages, and edge-level caching through our CDN.
The bet365 Inspiration
We studied bet365's interface extensively. Their information density is remarkable — they show more useful data per pixel than almost any other web application. But their design assumes desktop viewports and fast connections. We could not simply copy it.
Instead, we extracted their core UX principles and adapted them:
- •Market organization: bet365 organizes by sport, then league, then match. We kept this hierarchy but made each level a full-screen view on mobile, rather than a nested sidebar.
- •Bet slip interaction: bet365 uses a persistent sidebar. We use a bottom sheet that slides up when the user adds a selection, keeping the betting markets visible behind it.
- •Live match display: bet365 shows a match tracker with minute-by-minute updates. We simplified this to a score display with key event indicators, reducing data requirements by an order of magnitude.
The result is a platform that feels familiar to anyone who has used bet365, but is built from the ground up for the constraints of the Ethiopian market.
Technical Challenges We Solved
Betting slip math: Accumulator bets require multiplying decimal odds across multiple selections and calculating potential returns with rounding that matches industry standards. We built a calculation engine that handles singles, doubles, trebles, and accumulators with configurable maximum selections.
Odds management: Odds must be updateable in real time without disrupting active betting sessions. We implemented optimistic locking — when a user places a bet, we verify the odds have not changed since they were displayed. If odds have moved, the user sees the new odds and can accept or reject them.
Settlement automation: When a match ends, all bets on that match must be settled — winners credited, losers marked. For accumulator bets, partial results are tracked until the last selection is settled. The settlement engine runs as a background job triggered by match result updates.
BetJocker is proof that you can build a world-class betting platform for the African market without a world-class budget. What you need is deep understanding of the market, relentless focus on mobile performance, and the willingness to build the unsexy infrastructure — payment reconciliation, agent management, offline handling — that makes the product actually work in production.