SimPull (Building)
Venue management OS for sim racing
A full-stack venue management system for commercial sim racing. SimPull runs the session lifecycle across a network of rig PCs: customer kiosk, real-time rig control over a WebSocket bus, content sync for 600+ cars, analytics, backups, offline license keys, and a federated multi-tenant hub. Built offline-first with zero cloud dependency for core operations.
Capabilities
- Real-time rig agents launch and kill Assetto Corsa per session
- Offline-first: sessions, leaderboards, backups, and licensing run with no internet
- Pull-based content distribution to every rig with no network shares
- Federated multi-tenant hub monitoring all deployed venues
- Zero-dependency Stripe payment gate and HMAC license keys
- Role-based staff portal, analytics, and automated backups
Stack: React, TypeScript, Node.js, Express, SQLite, WebSockets
Case study: Venue management operating system for commercial sim racing.
Systems and architecture
- Hub and spoke with local autonomy. Each venue runs standalone. Sessions launch, leaderboards persist, backups run, and licenses validate entirely offline. The central hub is additive telemetry, never a dependency.
- The rig agent as a command bus. Each rig PC runs a lightweight agent on a persistent socket. The server sends typed commands and the agent owns the machine, launching and killing Assetto Corsa and pulling content. Adding a rig is install the agent and point it at the server.
- Offline-first licensing. HMAC-SHA256 keys encode venue, expiry, tier, and rig limit, validated with a shared secret and no network call. A trial mode with a two-rig limit means zero friction to start.
- Content distribution without network shares. The server zips content on demand with mtime-based caching and serves it over HTTP. Each rig pulls and extracts into the right paths, so sync works on any network with no configuration.
- Multi-tenant by federation. Venues register and send heartbeats to a stateless hub. Each venue owns its data, and the product company gets visibility across hundreds of installs from a small server.
- Dependency restraint. Stripe over raw HTTPS, content zipping over PowerShell, license validation over the built-in crypto module. Every dependency not added is one fewer failure mode in production.
Technical highlights
- Rig agent architecture. Lightweight Node agents on each Windows PC hold persistent sockets, manage the Assetto Corsa process lifecycle, and respond to typed command messages. This is practical distributed systems work.
- Offline-first by design. Local SQLite, offline license validation, and standalone operation when the hub is unreachable. The venue keeps running when the connection does not.
- Content distribution system. An mtime-cached, pull-based pipeline zips 600+ cars and tracks on demand and extracts them on every rig, with per-rig progress and no network shares required.
- Federated multi-tenant hub. Each venue phones home every 60 seconds to a stateless hub with an online and offline dashboard across all deployments, preserving each venue's autonomy.
- Zero-dependency Stripe. A full kiosk payment gate built on the Node HTTPS module and URLSearchParams, with no payment SDK in the dependency tree.
- Process and multiplayer control. Launching and killing AC and a dedicated acServer, joining rigs via race.ini injection, and a watchdog that handles reconnection.
- Production data management. Automatic daily SQLite backups with labeled manual snapshots and 14-backup retention, sized to a real two-week recovery window.
- Ten-minute install. An install script and a single-click start with a git pull update path get a new venue running fast on a clean Windows machine.
- Offline license keys. HMAC-SHA256 keys encode venue, tier, expiry, and rig limit, validated locally with a shared secret and no server round trip.