Skip to content
OCTANE LABS
TrackWright

TrackWright

Hobby & Consumer Products (slot-car racing)

A planner for Carrera Digital slot-car layouts — design in 2D and 3D from one shared geometry engine and get the exact Carrera parts list to build it, including what you still need to buy.

What was the problem?

Carrera Digital slot-car racers design their layouts the way modelers always have: on graph paper, in spreadsheets, or by dry-fitting real track on the living-room floor. None of those methods tell you, before you buy anything, whether a design actually closes into a loop, whether it physically fits the space you have, or exactly which numbered Carrera pieces — and how many of each — you need to build it. The result is over-ordering, under-ordering, and a lot of trial and error with real plastic track. There was no tool built specifically for the Carrera Digital 124/132 catalog that let a hobbyist design first and shop second.

How did we approach it?

We didn't start with a page builder — we started with the geometry. The core of TrackWright is track-geometry, a framework-agnostic TypeScript engine (39 source modules, 78 test files) that is the single source of truth for every surface of the app: closed-loop detection and relaxation, banking-aware collision detection, elevation and ramp balancing, lane-change joinery, pit lanes, and support-leg placement. Every view — the 2D editor, the 3D viewport, and the parts list — reads from that one model, so nothing can drift out of sync between what you draw and what you build. On top of that engine, we built a single Three.js scene with two swappable cameras: an orthographic camera for a pixel-perfect 2D view synced to an SVG layer, and a perspective camera for real-time 3D orbit, pan, and zoom. Because both views share one geometry, what you lay out top-down is exactly what you see when you orbit around it in 3D — including procedurally generated asphalt, banking, shoulders, elevation, and support legs, colored from real Carrera product photography. We shipped it as a Rails 8 app with the modern Rails stack end to end — Solid Queue, Solid Cache, Solid Cable, Hotwire, ViewComponent, Kamal to a self-hosted Hetzner box — and layered a client-side SQLite WASM store on top so the planner works fully offline as a PWA. Auth is passwordless-first (WebAuthn/passkeys, TOTP, email OTP), matching a product built for people who don't want to manage another password.

What did we deliver?

- A unified 2D/3D track designer — one Three.js scene, two swappable cameras (orthographic
for a pixel-perfect 2D SVG-synced view, perspective for 3D orbit/pan/zoom) driven by a
single canonical geometry model, so the top-down design and the 3D view never disagree
- Framework-agnostic TypeScript geometry engine (packages/track-geometry) solving closed-loop
detection and relaxation, banking-aware collision checks, elevation/ramp/flyover balancing,
lane-change joinery, pit lanes, and support-leg placement
- Procedural 3D track rendering — asphalt, banking, shoulders, elevation, support legs, and
lane slots generated from the layout data, blended with loaded piece meshes
- Automatic bill-of-materials generation — every placed piece mapped to the real Carrera
products that contain it, with pricing and discontinued-piece flags
- Inventory-aware shortfall calculation — subtracts what a builder already owns from the
parts list to produce a precise "what you still need to buy" shopping list
- Auto-generation of buildable layouts from a builder's owned inventory, run in a Web Worker
so the UI stays responsive during generation
- Offline-capable PWA — layouts save to a client-side SQLite WASM store so a builder can keep
designing at the track with no connection
- Passwordless-first auth (WebAuthn/passkeys, TOTP, email OTP) and a beta-gated invite system
for early access

What was the outcome?

TrackWright is live in beta today, invite-gated while we grow the catalog and harden the generator. Early builders are using it to plan real Carrera Digital 124/132 layouts and shop against an exact, priced parts list instead of guessing — the core loop the product was built to prove out. 325 builders have signed up so far, with 423 of the 515 saved layouts built out beyond the starter template — real design work, not just account creation. 32 people have had their beta access approved.

Results

saved_layouts
515
geometry_engine
track-geometry (framework-agnostic TypeScript, 39 source modules, 78 test files)
builders_signed_up
325
access_requests_approved
32
layouts_with_pieces_placed
423

Tech stack

  • Ruby on Rails
  • Hotwire (Turbo + Stimulus)
  • Three.js
  • TypeScript
  • PostgreSQL
  • SQLite WASM
  • Kamal

Want results like these?

Tell us about your project and we'll walk through how we'd approach it.