SHEET 17 · Games
xyzdisc
Browser 3D disc golf on real Colorado courses — 0.7 m LiDAR ground, aerial imagery, crown-detected forests, a physics flight model and PDGA stances; 9 venues, 18 layouts, 5,400 unit cases, live at xyzdg.com

9 venues18 layouts5,428 unit cases0.014 m median error2026liveGames
About
Real courses, reconstructed from public data: USGS 3DEP LiDAR for the ground, NAIP imagery for the surface, canopy height for the trees, then a bake pipeline in Python that writes a course bundle to object storage. The game is vanilla TypeScript on three.js with a Rapier physics world, a deterministic disc flight and contact model, and one gesture on phone and desktop: drag to aim, pull the puck to throw. A Next.js site wraps it with accounts and a free three-hole preview of every layout.
The forests were the hard part. A statistical scatter put trees where the crowns were not; deriving instances from a crown-detection pass fixed it, with measured comparisons. Tee pads are flattened onto the live heightfield at 0.0 m deviation; the median course-point error is 0.014 m. Testing runs on two golden-image lanes, a software rasteriser and an RTX 4090, plus an accessibility lane and a headless playtest bot with rules invariants.
Domains
01Data
- USGS 3DEP LiDAR, NAIP, canopy height — public domain
- Python bake: numpy, rasterio, laspy, shapely, scikit-image
- Bundles on Cloudflare R2 behind a data subdomain
02Game
- three.js 0.182, Rapier, three-mesh-bvh, Web Workers
- Deterministic flight; wind; chains that ring
- Phone and desktop share one input model
03Site
- Next.js 16, Supabase with 13 migrations
- Free three-hole preview per layout, no account
- Brand apps composed into xyzOS
Key features
- 01Bake from public geodata: 0.7 m LiDAR ground, NAIP surface, canopy-derived forests; Beaver Ranch alone has 165,559 trees
- 02Registration: 53 course points vs the live heightfield, worst 0.234 m, median 0.014 m; 19 tee pads at 0.0 m
- 03Deterministic flight and contact model; tree index of 282,009 proxies over a 3 km × 2.8 km world
- 04PDGA stance rules researched verbatim and applied in the line-of-play frame, including straddle putts
- 05One gesture on every device; room-aware pull length on phones so 100% power is always reachable
- 06Camera director: flyover, chase, look-back, hole-out — with the wrong-basket bug found and fixed in a numbered wave
- 07Perf instrumentation: CPU work per frame, engine step, GPU timer brackets; one-sided budgets instead of a vsync-floored p50
- 08361 test files, 5,428 cases; 28 Playwright specs; golden lanes on SwiftShader and RTX 4090; axe accessibility lane
- 09Nine course bundles published to R2; native Android and Electron shells generated from a manifest
Gallery








Nearby
SHEET 18 · Terrain & GIS

xyzski
58 real ski mountains in a browser tab — USGS terrain, OSM lifts, LiDAR forests, a GPU terrain renderer at 60 fps, a patrol shift you can ski inside, and an embed any resort drops in with one tag
2026live58 resorts17.4 ms soak p95
SHEET 21 · Web Platforms

XYZ Industries
A holding-company monorepo and xyzOS, its multi-brand operator console — three brands, 24 brand apps composed from a roster file, five packages frozen at SHA-256, live at xyzind.com
2026live3 brands24 brand apps
SHEET 19 · Games

Ski With Your Friends
The consumer brand of Skiride: one relay, 20 Hz pose replication, eight per lobby, voice that fades with distance — separated from the xyzski monorepo at a pinned commit and live on its own domain since 2026-09-17
2026live20 hz relay8 players lobby