System Architecture
This document describes the JoyFlick platform architecture as confirmed from the live production site at joyflick.com. All claims are sourced from HTML source inspection, Terms of Service (v1.0.0, 2026-02-12), and Privacy Policy (v1.0.0, 2026-01-01). Items that could not be confirmed from public sources are marked accordingly.
Component Diagram
┌──────────────────────────────────┐
│ joyflick.com │
│ Next.js App (App Router) │
│ Sentry: platform-frontend │
│ Release: 1.15.2 │
└──────┬───────────┬───────────────┘
│ │
┌────────────────┘ └────────────────┐
▼ ▼
┌──────────────── ───────┐ ┌─────────────────────────┐
│ privy.joyflick.com │ │ hosting-bucket │
│ Auth + Embedded │ │ .elympics.ai │
│ Wallets (Privy) │ │ Unity WebGL builds │
│ │ │ (.data.br, .wasm.br, │
│ App: cmll1ogwd003w │ │ .framework.js.br, │
│ 0cksy6vq9bp2 │ │ .loader.js) │
└───────────────────────┘ └─────────────────────────┘
│
┌────────────────────────────────────────────┘
▼
┌ ───────────────────────┐ ┌─────────────────────────┐
│ Game Hosting Domains │ │ Game Server Regions │
│ *.elympics.host │ │ *.elympics.ai │
│ │ │ │
│ Per-game subdomains │ │ warsaw-gs.elympics.ai │
│ (see Game Delivery) │ │ dallas-gs.elympics.ai │
└───────────────────────┘ │ tokyo-gs.elympics.ai │
│ mumbai-gs.elympics.ai │
┌────────────────┐ │ belgium-gs.elympics.ai │
│ Static CDN │ └─────────────────────────┘
│ static. │
│ elympics.cc │ ┌────── ──────────────┐
│ (OG images, │ │ Image Proxy │
│ assets) │ │ imgproxy. │
└────────────────┘ │ elympics.ai │
└────────────────────┘
┌────────────────┐
│ Analytics │ ┌────────────────────┐
│ Google Tag │ │ Base (Chain 8453) │
│ Manager │ │ USDC Contract: │
│ G-6MFNQR1PJ6 │ │ 0x833589fCD6eDb6 │
└────────────────┘ │ E08f4c7C32D4f71b │
│ 54bdA02913 │
└────────────────────┘
Frontend
| Property | Value | Source |
|---|---|---|
| Framework | Next.js (App Router) | /_next/static/chunks/app/layout-*.js in HTML |
| Build tool | Webpack | /_next/static/chunks/webpack-*.js |
| Error tracking | Sentry | data-sentry-element, data-sentry-source-file attributes |
| Sentry project | platform-frontend | baggage: sentry-release=platform-frontend@1.15.2-Prod |
| Sentry environment | Prod | baggage header |
| Sentry org ID | 4508573670637568 | baggage header |
| Sentry public key | b46e7a99e255a3a21790bc54cb079b6b | baggage header |
| PWA | Yes — standalone, portrait | /manifest.webmanifest |
| Application name | JoyFlick | manifest + meta tags |
| Analytics | Google Analytics G-6MFNQR1PJ6 | GTM script tag |
| OG image CDN | static.elympics.cc | og:image meta tag |
The layout source file is layout.tsx (confirmed via data-sentry-source-file="layout.tsx"), consistent with Next.js App Router conventions.
Authentication
Authentication is handled by Privy, accessed via privy.joyflick.com.
- Privy App ID:
cmll1ogwd003w0cksy6vq9bp2 - Embedded wallets are created through Privy (confirmed by iframe URL:
privy.joyflick.com/apps/.../embedded-wallets) - Non-custodial architecture per ToS Section 4.1: "a cryptographic wallet is created for you via Privy"
- The platform uses "smart contracts, session keys, permissions, or other technical controls" for gameplay transactions (ToS Section 4.4)
See Auth for details.
Game Delivery
Games are Unity WebGL builds served from Elympics infrastructure. Each game build consists of Brotli-compressed artifacts:
Build.data.br— game dataBuild.wasm.br— WebAssembly binaryBuild.framework.js.br— Unity frameworkBuild.loader.js— loader (uncompressed)Build.elympicsmeta.jsonor*_meta.json— metadata
Hosting Layers
| Domain | Purpose |
|---|---|
hosting-bucket.elympics.ai | Unity WebGL build artifacts (per-game UUID or slug paths) |
hosting-meta.elympics.ai | Game marketing assets (hero images, HTP screens, icons, videos, OG images) |
*.elympics.host | Per-game hosting subdomains (one per game) |
imgproxy.elympics.ai | Image transformation/proxy |
static.elympics.cc | Static CDN (OG images, platform-level assets) |
Some games use UUID-based paths (e.g., hosting-bucket.elympics.ai/{uuid}/{build-number}/), while at least one (Block Buster) uses a named path (block-buster-platform/{build-number}). At least one game ships separate desktop and mobile builds under the same UUID.
Per-Game Hosting Subdomains
Each game has a dedicated subdomain on elympics.host:
| Game | Subdomain | JoyFlick URL |
|---|---|---|
| Block Buster | block-buster.elympics.host | joyflick.com/block-buster |
| Breakline | breakline.elympics.host | joyflick.com/breakline |
| Fortune Cannon | fortune-cannon.elympics.host | joyflick.com/fortune-cannon |
| Jack 21 | jack-21.elympics.host | joyflick.com/jack-21 |
| Money Stack | money-stack.elympics.host | joyflick.com/money-stack |
| Neon Master | neon-master.elympics.host | joyflick.com/neon-master |
| Sky Snatcher | sky-snatcher.elympics.host | joyflick.com/sky-snatcher |
| Solitaire | solitaire.elympics.host | joyflick.com/solitaire |
| Sushi Hit | sushi-hit.elympics.host | joyflick.com/sushi-hit |
| Sweet Rush | sweet-rush.elympics.host | joyflick.com/sweet-rush |
| Top Flight | top-flight.elympics.host | joyflick.com/top-flight |
Game Server Regions
Five game server regions are referenced in the HTML, each exposing a /health endpoint:
| Region | Domain |
|---|---|
| Warsaw (EU) | warsaw-gs.elympics.ai |
| Dallas (US) | dallas-gs.elympics.ai |
| Tokyo (Asia) | tokyo-gs.elympics.ai |
| Mumbai (Asia) | mumbai-gs.elympics.ai |
| Belgium (EU) | belgium-gs.elympics.ai |
Match Format
Per ToS Section 3.1: JoyFlick offers "skill-based gameplay experiences, including asynchronous player-versus-player formats." Outcomes are determined by player skill and performance as measured by the platform's scoring rules.
Per ToS Section 3.2: "For asynchronous formats, you acknowledge that opponent selection and timing depend on demand and availability."
The primary competitive format is async PvP — players do not compete in real-time. Each player plays independently and scores are compared after completion.
Settlement and Payments
| Property | Detail | Source |
|---|---|---|
| Blockchain | Base | ToS Section 4.2 |
| Asset | USDC | ToS: "currently intended to be USDC on Base" |
| USDC contract | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | HTML source |
| Wallet model | Non-custodial via Privy | ToS Section 4.1 |
| Platform controls | Smart contracts, session keys | ToS Section 4.4 |
| Withdrawal methods | Crypto (Base network) or virtual card (Card Partner) | ToS Section 8.1 |
| Internal currency | Diamonds (no monetary value, off-chain) | ToS Section 6.4 |
| Matching timeout | 24 hours for async PvP, then refund | ToS Section 7.3 |
| Settlement contract | Battle Wallet (0x6938...6b5e) — non-custodial on-chain settlement | On-chain |
Monitoring and Analytics
| Service | Identifier | Source |
|---|---|---|
| Google Analytics / GTM | G-6MFNQR1PJ6 (GTM container: GTM-WHGCGJCP) | Script tag in HTML |
| Sentry | org 4508573670637568, key b46e7a99e255a3a21790bc54cb079b6b | Baggage header |
| Firebase | Confirmed (no public ID found) | Privacy Policy Section 3 |
| Hotjar | Confirmed (no public ID found) | Privacy Policy Section 3 |
Corporate Entity
Elympics, Inc. — registered in Kingstown, Saint Vincent and the Grenadines. JoyFlick is a product of Elympics (ToS Section 1.1).