A fast, locked-down desktop launcher for internet cafés, gaming lounges, and coin-operated PC rentals, with an optional web dashboard that shows which PCs are on, what they are used for, and an estimate of what they earn.
Built with C# and WPF on .NET Framework 4.8. Runs on a stock Windows 10 PC with nothing else to install, works with Faronics Deep Freeze and WinLock, and ships as a single MSI.
At a glance
- Launcher: tabs of games and programs, technical tools, live hardware info, admin-locked editing.
- Telemetry (v1.0.4, opt-in): a background service sends a small heartbeat to your own Supabase project. Off until you enter a Supabase URL and key.
- Dashboard: a static website (GitHub Pages) with live PC status, timelines, top programs, busy hours, revenue estimates, and customer game requests.
- Features
- Telemetry and dashboard
- Install and deploy
- Upgrading from v1.0.3
- DataTool (backup, restore, Supabase setup)
- Build from source
- Project structure
- Publishing updates
- Tabs of programs: group games and apps into tabs with icons; add
.exe,.lnk,.bat,.cmd, websites, and folders. - Drag and drop: reorder items, move them between tabs, or drop files from Explorer to add them.
- Broken shortcut detection: missing targets are flagged on the card and blocked from launching with a clear message.
- Right-click menu: Run, Run as administrator, Open file location, Properties.
- Search across all tabs.
- Live hardware info: computer name, CPU, RAM, disks (SSD / HDD / NVMe), OS build, cores and threads, network up/down speed, GPU and VRAM. Refreshes every 3 seconds.
- Technical tools: Control Panel, Uninstall Programs, File Explorer, Network Connections, Device Manager, Disk Management, Services, Task Manager, Command Prompt, Windows Settings, System Information, and Request a Game.
- Password-protected Settings and Edit Mode, with a forced password change on first use.
- Session lock toggle with a visible Locked / Unlocked indicator.
- Kiosk windowing: borderless and maximized, respects the taskbar; the X button and Alt+F4 only minimize.
- Detects Deep Freeze and whether the PC is Boot Frozen or Thawed.
- Check for Updates (Settings › About) downloads the latest MSI from GitHub Releases and installs it, but only when the PC is Thawed, so an update is never lost on reboot.
- Flat dark and light themes, accent colors, custom colors, fonts with 0.8x to 1.4x scaling, and a custom wallpaper.
- Config in
data\config.json, saved atomically with a.bakcopy. - Export / Import a ZIP of the config and assets to copy a setup to other PCs.
Launcher ──(named pipe: program name)──▶ ChromaticTelemetry service ──(HTTPS, insert only)──▶ Supabase: heartbeats
Launcher ──(HTTPS, insert only: Request a Game)────────────────────────────────────────────▶ Supabase: game_requests
Dashboard in a browser (signed-in user) ──(read)──▶ Supabase
- ChromaticTelemetry is a Windows service (LocalSystem, starts with Windows, no UI) installed by the MSI.
- Every interval (default 60 s, adjustable 30 to 600 s) it inserts one heartbeat row into your Supabase project.
- If the internet is down, rows wait in memory only (never on disk, max 720) and are sent together, oldest first, when it's back.
Chromatic Menu has no built-in Supabase project. Out of the box the launcher works normally and nothing is sent.
| Heartbeats are sent when all three are true | Where to set it |
|---|---|
| 1. Start with Windows is on | Settings › General |
| 2. Enable telemetry is on (default) | Settings › Telemetry |
| 3. A Supabase URL and anon key are set | Settings › Telemetry, or DataTool option [2] |
The Request a Game button appears when telemetry is on and a URL and key are set. Changes apply within seconds: no restart and no admin rights are needed.
| Sent | Never sent |
|---|---|
| Time, PC name, shop name, heartbeat interval | Window titles, file paths |
Name of the program in the foreground (e.g. Google Chrome). Built-in Windows apps are reported as Windows; the launcher and desktop as Chromatic Menu |
Windows usernames, IP or MAC addresses, hardware IDs |
| Game requests: title and description typed by the customer | Anything while telemetry is off or not configured |
Only the anon / public key is ever used. Supabase Row Level Security lets it add rows but never read them. Only dashboard users you create can read data.
A static site in docs/ with:
| Page | What it answers |
|---|---|
| Overview | Which PCs are online right now, what they are running, today's estimated revenue and utilisation, and anything that needs attention |
| Timeline | When each PC was on, active, or idle during a day, with power-ons and longest session |
| Programs | The most used programs, overall and per PC |
| Revenue | Estimated revenue per day and per PC, change vs the previous period, best day, busy-hours heatmap |
| Game requests | What customers asked for, marked New, Added, or Rejected |
| Settings | Currency, revenue rate, theme, connection |
Revenue estimate: active minutes (a program other than Chromatic Menu in the foreground) ÷ the rate. The default rate is 1 unit of currency per 9 minutes; the currency and rate are set in the dashboard's Settings. The coin timer only turns off the monitor, so a game left open after time runs out still counts.
- Follow the setup guide,
docs/setup.html(also on the deployed site):- create a free Supabase project
- run
docs/supabase/schema.sqlin the SQL Editor - turn off public sign-ups
- create your dashboard login
- Deploy the dashboard: in the GitHub repository, open Settings › Pages, choose Deploy from a branch, branch
main, folder/docs. - Point each PC at the project, with DataTool option [2] or in Settings › Telemetry.
- Open the site, enter the same URL and anon key, and sign in. You stay signed in on that browser until you log out.
Double-click ChromaticMenu-Setup.msi:
- Installs to
C:\Program Files\Chromatic Menu\, with Desktop and Start Menu shortcuts. - Makes
data\,data\assets\, anddata\logs\writable for standard users. - Installs and starts the ChromaticTelemetry service. It sends nothing until it's configured.
msiexec.exe /i "ChromaticMenu-Setup.msi" /qn| Method | Removes the program and service | Removes data (programs, tabs, icons) |
|---|---|---|
Start Menu › Uninstall Chromatic Menu, or Uninstall.exe |
Yes | Yes |
| Windows Settings › Installed Apps | Yes | No, it is kept |
Since v1.0.4 the installer itself never deletes data, so updates always keep the shop's configuration.
Full technician guide: documentation/DEPLOYMENT.md.
Important: the v1.0.3 installer deletes the
datafolder when it's removed, and an update removes it. This applies once, to any PC still on 1.0.3 or older, whichever newer version you install. From 1.0.4 on, updates keep the data by themselves.
On each PC, booted Thawed:
- Run
tools\ChromaticMenu-DataTool.batand choose [0] Backup. - Update with Settings › About › Check for Updates.
- Run the tool again: [1] Restore, then [2] Set up Supabase.
- Check your programs are back, then refreeze the PC.
tools\ChromaticMenu-DataTool.bat is a standalone script for technicians. It asks for admin rights itself and warns if Deep Freeze looks Frozen.
| Option | What it does |
|---|---|
| [0] Backup | Copies data to C:\ChromaticMenu-Backup\latest and keeps the previous backup. It refuses to overwrite a backup that has more programs than the current data, which protects you after an accidental wipe. |
| [1] Restore | Force-closes the launcher, saves the current data to pre-restore, restores the backup, and checks the program count. |
| [2] Set up Supabase | Writes a Supabase URL and anon key into the telemetry part of config.json (nothing else changes), turns telemetry on, and restarts the service. Press Enter to use the defaults at the top of the .bat. Needs v1.0.4 or newer. |
| [3] Open backup folder | Opens C:\ChromaticMenu-Backup. |
To preset your own project, edit DEFAULT_SUPABASE_URL and DEFAULT_SUPABASE_KEY at the top of the .bat. Use only the anon / public key.
- Windows 10 or 11
- .NET SDK 6.0 or newer (for building)
- .NET Framework 4.8 Developer Pack
- WiX Toolset v4:
dotnet tool install --global wix --version 4.0.6
dotnet build -c Release "Chromatic Menu.sln"Outputs:
src\Chromatic Menu\bin\Release\net48\Chromatic Menu.exesrc\ChromaticTelemetry\bin\Release\net48\ChromaticTelemetry.exe
.\build-msi.ps1 # version from the csproj
.\build-msi.ps1 -Version "1.0.5" # or a specific versionThe script builds the launcher and the service with the version stamped in, compiles Uninstall.exe, and writes bin\Release\ChromaticMenu-Setup.msi.
python -m http.server 8765 --directory docsThen open http://localhost:8765. The site uses ES modules, so opening index.html as a file doesn't work.
Chromatic Menu/
├── src/
│ ├── Chromatic Menu/ # WPF launcher (MVVM: Views, ViewModels, Models, Services, Native)
│ ├── ChromaticTelemetry/ # Windows service: heartbeats, in-memory buffer, named pipe server
│ └── Shared/ # Code linked into both: telemetry settings, Supabase client, logger
├── installer/ # WiX v4 MSI definition, uninstall helper, license
├── docs/ # Dashboard website (GitHub Pages)
│ ├── index.html, setup.html
│ ├── assets/ # CSS and JavaScript
│ └── supabase/schema.sql # Database schema, security rules, dashboard functions
├── documentation/ # DEPLOYMENT.md, TELEMETRY-SPEC.md
├── tools/ # DataTool, icon converter, password hash helper
├── build-msi.ps1
└── SPEC.md # Engineering and design rules
| Component | Technology |
|---|---|
| Launcher | .NET Framework 4.8, WPF, MVVM (own ObservableObject / RelayCommand) |
| Service | .NET Framework 4.8 Windows service, HttpClient, named pipes |
| Packaging | Costura.Fody (single-file exe), WiX Toolset v4 |
| Backend | Supabase (Postgres, Row Level Security, pg_cron) |
| Dashboard | Static HTML, CSS and JavaScript, supabase-js, Chart.js |
- Build:
.\build-msi.ps1 -Version "1.0.5" - Create a GitHub Release tagged
v1.0.5and attachbin\Release\ChromaticMenu-Setup.msi. - On each PC, boot Thawed and use Settings › About › Check for Updates.
Keep the installer's component GUIDs and
MajorUpgrade Schedule="afterInstallExecute"unchanged in future versions. They are what keep data safe during upgrades.
Created and maintained by HanazonoArchive. Distributed under the MIT License. Free for personal, commercial, and organizational use.
