Skip to content

Key Features

Audience: Sales, leadership, prospect's CTO/CEO. Read alongside ../architecture.md — the diagrams there name every module referenced below. Format: One row per shippable capability. Each row has a 1-line description, the owning code path (clickable in most viewers), key dependencies, and a documentation marker.

Doc-status legend — applied per row: - ✓ — covered by a published flow doc in ../flows/ or a runbook in ../runbooks/. - 🆗 — partially documented (architecture or API reference covers it; no dedicated flow doc). - ⚠ — {{TBD}} — not yet documented at flow-doc depth.


1. Identity & access

Feature Description Owns it Depends on Status
Email + password sign-up Username + email + password registration with email verification mail-out apps/api/src/auth/auth.controller.ts (sign-up), auth.service.ts SMTP via external-notification-sender/, captcha (GeeTest or reCAPTCHA), Postgres user table flows/dropbet-sign-up.md
Email + password sign-in Bcrypt verification, JWT access + refresh tokens, cookies set with secure flags apps/api/src/auth/auth.controller.ts, cookies.ts bcrypt, jsonwebtoken, Redis-backed session via BullMQ producer flows/dropbet-sign-in.md
2FA (TOTP) Per-user TOTP secret + OtpGuard for SuperAdmin endpoints; setup + verify + disable flow apps/api/src/auth/guards/, apps/api/src/auth/auth.service.ts otplib 🆗 runbooks/2fa-unknown-secret.md
Password reset Token-based reset via signed URL emailed to verified address apps/api/src/auth/auth.controller.ts SMTP flows/dropbet-password-reset.md
OAuth scaffolding (Google, Steam) GoogleStrategy + Steam strategy registered in auth.module.ts; setupUsernameAfterOAuthRegistration endpoint exists. Production-readiness: scaffolded; live-traffic enablement is operator config + integration testing apps/api/src/auth/strategies/google.strategy.ts, apps/api/src/auth/strategies/steam/ Google OAuth client, Steam OpenID
API key auth ApiKeyStrategy for service-to-service callers (e.g. external bots, sportsbook S2S) apps/api/src/auth/strategies/api-key.strategy.ts, apps/api/src/api-key/
Captcha (GeeTest primary) GeeTest v4 sliding-puzzle captcha on sign-up + sign-in; deduped via Redis cache key apps/api/src/captcha/geetest/geetest-captcha.service.ts Redis cache, GeeTest API 🆗
Captcha (reCAPTCHA fallback) Google reCAPTCHA gate; is-capture-on: off header + NODE_ENV=local bypasses it for E2E + dev apps/api/src/captcha/google/recaptcha.guard.ts Google reCAPTCHA 🆗 + runbooks/recaptcha-fails-locally.md
WebSocket auth Socket handshake via auth={socket_token}, validated against Redis session store; per-IP throttle apps/rt/src/gateway/, libs/ws-throttler/ Redis cache (MAX_CONNECTIONS_PER_IP=10 per IP, configurable in env) flows/rt-websocket.md

2. Wallet, payments, and accounting

Feature Description Owns it Depends on Status
Multi-currency balance ledger user_balance per (user, currency) with amount + vault_amount; transactional ledger writes with idempotency libs/_prisma/src/schema/api.prisma (UserBalance), apps/api/src/accounting/ Postgres 🆗
FX / USD valuation ExchangeRatesService.toUsd() for cross-currency display & wager normalisation apps/api/src/exchange-rates/ external rate feed ({{TBD: provider}})
Crypto deposit (CCPayment) CCPayment provider integration: invoice creation, webhook handling, signature verification apps/api/src/payment/provider/integration/ccpayment/ CCPayment API 🆗 flows/dropbet-wallet.md
Crypto deposit (NowPayments) NowPayments invoice + IPN webhook + fee/fixed-rate flags apps/api/src/payment/provider/integration/nowpayments/ NowPayments API 🆗
Skin trading deposits SkinDeck integration for skin-to-balance flow apps/api/src/payment/provider/integration/skindeck/ SkinDeck API
Withdrawal pipeline withdraw controller + admin approval flow + withdraw-check.service.ts for compliance gates apps/api/src/payment/withdraw/ KYC status, ledger 🆗
Deposit pipeline deposit controller + admin review + Redis pub-sub gateway notifier apps/api/src/payment/deposit/ provider webhook → ledger 🆗
Payment provider abstraction PaymentProviderModule aggregates all integrations; PaymentProviderService is the single import surface apps/api/src/payment/provider/payment-provider.module.ts 🆗
Network registry Catalogue of supported chains/networks per provider apps/api/src/payment/provider/network/
Wallet display Player-facing wallet UI: balances, deposit, withdraw, history ebit-fe/src/app/[locale]/... (wallet route) API client, socket events flows/dropbet-wallet.md

3. Compliance

Feature Description Owns it Depends on Status
KYC (Sumsub) Applicant lifecycle: create → upload → review → status webhook → state transition apps/api/src/kyc/sumsub/, apps/api/src/kyc/kyc.service.ts Sumsub API + webhooks 🆗
KYC repository Persistent applicant + document state model apps/api/src/kyc/kyc.repository.ts Postgres 🆗
User limits Self-exclusion, deposit limits, loss limits apps/api/src/users-limits/ (also apps/bo/src/user-limits/) accounting, admin
Geo / country gating IP → country resolver + restricted-country list apps/api/src/country/ external geo-IP lookup ({{TBD: provider}})
Audit logging Admin notes, OTel spans across every state-changing endpoint, structured pino logs to Loki apps/api/src/user/admin/notes/, libs/shared/ (NestLoggerModule), docs/observability.md Loki, Jaeger 🆗

4. Casino — house games (in-house RNG)

All settle through the shared bet/ pipeline (apps/api/src/bet/) and produce a bet_settled BullMQ job that drives leaderboard / promo / rakeback.

Game Code path Status
Dice apps/api/src/casino/house/dice/ (dice.service.ts) flows/dropbet-house-game.md (covers all four house games)
Limbo apps/api/src/casino/house/limbo/
Mines apps/api/src/casino/house/mines/ (multi-step rounds, mid-round cashout)
Plinko apps/api/src/casino/house/plinko/
Provably-fair seeding apps/api/src/provably-fair/ — server seed rotation, client seed support 🆗

5. Casino — live + game-server-driven

Game App Description Code Status
Blackjack (dropbet) apps/api (in-process) Player-facing blackjack UI + game logic served via REST + websocket apps/api/src/casino/games/... (blackjack ref) flows/dropbet-blackjack.md
Blackjack (orphan game-server) apps/bj (port 4002) Standalone blackjack server with EVO-Games external-wallet path. Currently not wired to dropbet traffic — see architecture §1 trust boundary note apps/bj/src/main.ts
Speed Roulette apps/speed-roulette EOS-blockchain-anchored roulette wheel; BullMQ state machine concurrency=1 per round apps/speed-roulette/, libs/_prisma/src/schema/speed_roulette.prisma flows/dropbet-speed-roulette.md

6. Casino — provider-game catalogues (slots + tables via partner)

Adapter pattern: each provider lives in apps/api/src/casino/slots/providers/<name>/, exposing a launch service and a wallet callback.

Provider Code path What it ships
Softswiss apps/api/src/casino/games/api/softswiss/ (CDN + sub-vendor catalogue) + apps/api/src/casino/games/service/hydrate-softswiss.service.ts Game catalogue hydration from Softswiss CDN
PM8 apps/api/src/casino/slots/providers/pm8/ Launch URL signing, wallet callbacks, controller
BGaming apps/api/src/casino/slots/providers/bgaming/ (api/bgaming-api.service.ts, wallet/) Launch + wallet callback + dev-proxy controller
ST8 apps/api/src/casino/slots/providers/st8/ Launch + wallet integration
EvoGames apps/api/src/casino/slots/providers/evogames/ Launch + wallet integration
Common provider scaffolding apps/api/src/casino/slots/providers/common/ Shared signature/HMAC helpers, error taxonomy

Status across the row: 🆗 — the adapters exist and are wired into slot-games.service.ts; per-provider integration depth varies, see integration-options.md §Game provider integration model.


7. Sportsbook

Feature Description Owns it Status
Sportsbook proxy Player-facing endpoints proxy to upstream odds engine apps/api/src/sportbook/sportbook.controller.ts, sportbook.service.ts
S2S auth Service-to-service auth for upstream odds engine callbacks apps/api/src/sportbook/s2s/
Sportsbook actions / transactions Bet placement → settlement → ledger writeback apps/api/src/sportbook/actions/transactions/
System endpoints Health / config / catalogue endpoints apps/api/src/sportbook/system/

Note: sportsbook is a proxy. Evospin does not run an odds engine; the upstream provider is operator-configured.


8. Bet pipeline

Feature Description Owns it Status
Bet placement Single canonical endpoint per game; decoupled validation, balance hold, settlement apps/api/src/bet/ (BetController, BetCrudService, BetRepository) flows/dropbet-bet-place.md
Bet settlement queue BullMQ bet_settled_queue — every settled bet drives downstream processors (leaderboard, promo, rakeback, GGR) apps/api/src/bet/queue/ 🆗
Bet history Paginated player history; admin-side detailed view apps/api/src/bet/, apps/bo/src/bet/ flows/dropbet-bet-history.md, flows/admin-bets.md
GGR commission Provider-game GGR computed via ggr-commission.service.ts apps/api/src/casino/games/service/ggr-commission.service.ts

9. Promotions, loyalty, social

Feature Description Owns it Status
Promo / bonus PromoController + PromoEffectService apply bonuses on deposit / sign-up / events; lock.decorator.ts for race safety apps/api/src/promo/ 🆗
Challenges Award-only challenges driven by admin; wager / win triggers apps/api/src/challenge/ flows/dropbet-challenges.md
Leaderboard Periodic recompute (leaderboard.checker.ts), gateway pushes top-N to subscribed sockets apps/api/src/leaderboard/ flows/dropbet-leaderboard.md
Rakeback Computed on bet_settled events apps/api/src/rakeback/ 🆗
VIP program Tier progression based on wagered volume apps/api/src/vip-program/
Tips (peer-to-peer) Player-to-player balance tips with admin reversal capability apps/api/src/tips/, apps/api/src/admin-tips/
Affiliate Affiliate-link tracking + commissions apps/api/src/affiliate/
Traffic arbitrage Arbitrage marketing campaign accounting apps/api/src/traffic-arbitrage/
Telegram bot integration Bot endpoints for in-Telegram interactions apps/api/src/telegram/
FastTrack bonus tracker RabbitMQ producer to FastTrack — stubbed (disabled = true at line 8 of apps/api/src/fast-track/rabbitmq/fast-track.rmq.module.ts) apps/api/src/fast-track/

10. Real-time + chat

Feature Description Owns it Status
WebSocket fan-out socket.io v4, /events namespace, websocket-only transport, Redis pub/sub backplane apps/rt/src/gateway/ flows/rt-websocket.md
Online tracker Live online-user counter, broadcast to UI apps/rt/src/online-tracker/ 🆗
Event catalogue Typed event definitions consumed by FE socket-client apps/rt/src/gateway/events.ts
RT notifications API-side publishers → gateway pub/sub → rt apps/api/src/rt-notification/ 🆗
Chat In-game chat channels + admin moderation apps/api/src/chat/

11. Admin / backoffice

Feature Description Owns it Status
Admin sign-in (2FA-gated) Admin login with TOTP, role-based access, OtpGuard for SuperAdmin apps/api/src/auth/ (admin paths), ebit-admin-fe/src/app/(auth)/ flows/admin-sign-in.md
User management List, search, ban, KYC review, balance adjustment, notes apps/api/src/user/admin/, apps/bo/src/user/, ebit-admin-fe/.../user/ flows/admin-user-mgmt.md
Bet review Per-bet inspection with full audit trail + ledger correction apps/bo/src/bet/, ebit-admin-fe/.../bets/ flows/admin-bets.md
Promo / challenge / leaderboard CRUD Admin CRUD over promotional content apps/api/src/promo/controllers/, apps/api/src/challenge/controller/, apps/api/src/leaderboard/admin.leaderboard.controller.ts 🆗
Site config Feature flags + runtime toggles apps/api/src/site-config/, apps/bo/src/site-config/
FAQ CMS FAQ content management apps/api/src/faq/, apps/bo/src/faq/
Dashboards Operator KPI dashboards apps/api/src/dashboard-v2/, apps/api/src/dashboard/, ebit-admin-fe/.../dashboard/ (Ant Design charts)
Affiliate / API key admin Affiliate management, API key rotation apps/bo/src/affiliate/, apps/bo/src/api-key/

12. Frontends

App Framework Role Code Status
ebit-fe (dropbet) Next.js (next-intl en/de, socket.io-client) Public player site ebit-fe/src/app/[locale]/ ✓ — covered by every flows/dropbet-*.md
ebit-admin-fe Vite + React (TanStack Router) Internal admin panel (single language) ebit-admin-fe/src/routes/ ✓ — covered by every flows/admin-*.md

Versions and full stack inventory: ../engineering/stack.md.


13. Async, observability, infrastructure (cross-cutting)

Capability Description Owns it Status
BullMQ async runtime All production queues: auth-session updates, bet settlement, bots, leaderboard, promo, user-stats migration, skindeck deposits, both speed-roulette queues apps/api/src/**/bull/, apps/api/src/**/queue/, @nestjs/bullmq 🆗 — see CLAUDE.md §"Async queues"
House-bot fleet Simulated-activity bots driven by BullMQ producers, isolated on Redis :6380 apps/api/src/bots/system/bull/, apps/api/src/bots/bot.service.ts
RabbitMQ broker In compose (vhost=ft), wired only to FastTrack stub — receives zero traffic until stub removed apps/api/src/fast-track/rabbitmq/
OpenTelemetry pipeline Pre-main bootstrap, OTLP HTTP to collector, spanmetrics → Prometheus, traces → Jaeger, logs → Loki via pino libs/shared/ (OTel pre-main), observability/otel-collector.yml ../observability.md, ../e2e-trace-demo.md
Sentry Errors + source maps for all three apps sentry.*.config.ts per repo 🆗
Performance test harness k6 + Playwright canary, terraform modules for monitoring + app VMs tests-perf/ (root), terraform/perf/ ../performance-testing.md
Provably-fair fairness Server-seed rotation, HMAC-bound per-bet seeds apps/api/src/provably-fair/ 🆗
Multi-tier rate limiting Per-route sliding-window throttle (Lua on cache Redis), per-IP WS connection cap apps/api/src/captcha/ (HTTP), libs/ws-throttler/ (WS) 🆗
Doppler-managed secrets All env vars in dev pulled via run_local.sh from Doppler each repo's run_local.sh 🆗