Daniel Wygoński
All work

Case study

Insolve

A multi-tenant white-label platform. Operators launch a fully branded site, with their own domain, theme and feature set, on top of one shared backend.

Role
Design and engineering, end to end
Period
Mar 2026 - present
Stack
  • Bun
  • Hono
  • React 19
  • Vite
  • PostgreSQL
  • Prisma
  • Docker
  • Cloudflare
Links
Insolve operator dashboard with revenue chart, house edge status and mobile overview

The problem

Small operators and streamers want their own branded platform, but building and running one means payments, games, accounts, an admin panel and infrastructure. Insolve gives each of them a complete product without a separate codebase or deployment per customer.

Each operator is a brand: its own custom domain, theme (colors, logo, button and avatar styles), selection of active games, chat style, leaderboard settings, promo codes and bonuses. A brand is configuration, not a fork.

Game artwork in four different brand color themes

Architecture

A Bun monorepo with three frontends, five backend services and shared packages for types, business logic, the database client and UI components.

Frontends

casinoPlayer-facing app, React + Vite
adminOperator dashboard
marketingLanding page, Next.js

Services

casino-apiHono, REST + WebSocket
admin-apiBrands, config, stats
image-engineHono + Sharp, thumbnails
workerDeposits and swaps

Data and providers

PostgreSQLPrisma, one schema for all brands
PaymentsSelf-hosted processor
CloudflareCustom hostnames and SSL
Simplified. Shared packages (core, db, shared, types, ui) are used across every app.

Key decisions

One backend, many brands

Every brand lives in the same database and runs on the same services. Adding a customer means creating a brand in the admin panel, not deploying anything. Shared packages keep the business logic (payments, swaps, ranks, bankroll) and the TypeScript types in one place, so the three frontends and the APIs cannot drift apart.

Custom domains without manual work

Operators bring their own domain. The admin API talks to the Cloudflare API to register the hostname and issue the SSL certificate, so a new domain goes live without anyone touching DNS or certificates by hand.

Money moves off the request path

Deposits and currency swaps are processed by a background worker instead of inside API requests. A slow payment provider never blocks a player’s request, and failed jobs can be retried safely.

Wallet with deposit address, currency swap dialog and balances by currency

Fairness you can verify, and tests that prove it

Every game result is derived from a server seed, a client seed and a nonce, so any player can verify an outcome after the fact. The game logic and the fairness checks are covered by automated tests per game.

Verify fairness dialog confirming a game result from its server secret, client secret and nonce

Deploy anywhere

The same build runs with Docker Compose behind Coolify and Traefik, under PM2 on a plain VPS, or as a Render Blueprint. Switching hosts is a configuration change.

Result

A working multi-tenant platform with live brands in production, a player progression system with nine ranks and rakeback, an operator dashboard with player tracking and statistics, and automated domain onboarding.