@aicolab/kolo playground
Each route below mounts a slice of @aicolab/kolo against a minimal scene so the primitives can be eyeballed in isolation, away from the source repo's /hd2d demo where they were originally tuned.
The Chart · every destination on one sheet
/chartThe layer above the worlds, in the manner of Rogue Trader’s system map and Octopath’s continent: a drawn nautical chart with the lighthouse commons at its centre, the walkable worlds and the Insight Bridge reports as islands, and the hives you belong to as an archipelago of your own. Pick an island and you are at its harbour. Every chessboard place is a URL (/place/<world>/<space>?at=<entry>), the URL follows you between spaces, and each world has a compass on its rail and a “to the chart” exit at its harbour. Inside a world the chart is the map’s widest facet, not a page you fall off the island onto.
Place · every chessboard place as a URL
/place/training-data/islandThe chessboard engine mounted on every world this playground serves, by URL: the village and its cottage, the Insights island with its ferry to Lantern Islet, and a REPORT ISLAND per Insight Bridge corpus whose site serves the world record (Training Data, Second Chair) — the record read at request time, the island its site, a paved square round the sky table, kit buildings on a ring facing it (Topics, Sources, a hall per task), rooms per topic and source behind their doors, facet lobbies as bazaars, front halls as introducing bays, exhibit cards you dive into. The map is a subset of the building by the record’s own relations: the room you stand in drawn large, every room above it to its front hall. The Training Data island on /place is the GOLDEN ORACLE the /hex and /overture routes are held equal to, object by object.
- Village
- the greenthe cottage
- Insights Island
- the harbourLantern Islet
- Training Data
- the harbour
- Second Chair
- the harbour
Hex · the island as claims on a lattice
/hex/training-data/islandThe same places, with a report’s island composed as CLAIMS on an H3 hex lattice (kolo spatial/hex, res 15, one fixed globe origin) instead of laid by coordinate arithmetic — coast and land by cell centre, footprints by overlap, doors as discs, paths as strips, the shore band by full containment — and its kit built from a kolo SCENE DOCUMENT written from the plan: placements by relation (seated, stood, carried, turned), three-free, with the parts measured from the catalogue. Held equal to /place to the millimetre, so this is where islands were first made the new way. /hex/<world>/plan draws the claims by kind as SVG.
- Training Data
- the harbourplan (SVG)
- Second Chair
- the harbourplan (SVG)
Overture · islands declared as map data
/overture/training-data/islandIslands DECLARED in the Overture Maps schema at real coordinates — a GeoJSON feature collection of land, land use, water, infrastructure, buildings, segments with connectors and width rules, places — validated against the release’s JSON Schema (vendored in kolo, zod generated per definition), then resolved: Smelik-style layers with priorities and an interaction table (a road over water becomes a bridge; a river through a cut turns to ice), a Tutenel-style rule solver that sites things by relation (at, around, along, scattered) with backtracking, the ground’s rules (nothing plants below sea level), and the ground’s LEVELS — land declared at elevations, a way climbing from one to the next over the ramp it declares, every face of the land one solid. Realised into the very plan the /place scene builds from and held equal to it live. The realisation obeys the table: every outcome a meeting became is built from its record, and the island AS BUILT (the land once cut, each bank as laid, the boards, every way as laid) is written as a second Overture document and laid as claims of its own. A report island is declared from its record at request time; Riverside, Tundra and Fenwater are authored islands, their programs written out as GeoJSON files held equal by test. Each island sits on a 2 km slot of one archipelago, so the whole set reads neatly in any GeoJSON reader, DuckDB or QGIS. CANBERRA is a real city read from an Overture Maps release and walked as ONE ground: seven tiles of the Parliamentary Triangle, each an H3 cell cut from the release and realised the same way, streaming in as you near them and walked across their seams with no transition.
- Training Data
- the harbourdeclaration.geojsonas-built.geojsonplan (SVG)
- Second Chair
- the harbourdeclaration.geojsonas-built.geojsonplan (SVG)
- Riverside
- arrivaldeclaration.geojsonas-built.geojsonplan (SVG)
- Tundra
- arrivaldeclaration.geojsonas-built.geojsonplan (SVG)
- Fenwater
- the quaydeclaration.geojsonas-built.geojsonplan (SVG)
- Canberra
- the lakeshoreParliament Housea tile (GeoJSON)as-built.geojson
Chessboard · isometric click-to-walk village
/chessboardThe Rogue Trader exploration grammar on the kolo chessboard engine: an isometric camera you pan, turn and zoom; click the ground to walk (the scene’s own ground, indexed into H3 cells at load); glowing ground glyphs to examine, talk and leave through; a scripted warden who walks the village and stops to talk; presence portraits, a rail, a bottom-third dialogue panel and a full-screen area map. Multiplayer by INTENT: one move command per click through a Durable Object room, replayed identically on every client — no pose stream. Guests welcome (anonymous session); the cottage interior needs `pnpm three-resources:dev`.
Chessboard · Insights Island
/chessboard-islandThe same chessboard engine mounted on the authored Insights destination (@aicolab/insights/spatial): SVG geography through the shared kolo builder, roads from the authored centrelines, the harbour pier, the Insight Library as an enterable hall with exhibit cards and a camera-facing cutaway, the other landmarks as examine glyphs, a docent on the harbour spine, and the Lantern Ferry as an exit to Lantern Islet. Its own room; the village is untouched.
Tilt-shift cubes
/tilt-shift-cubesFull-bleed WebGPU scene wiring the engine primitives — TiltShiftDiorama recipe, AdaptiveDpr, keyboard + touch input, camera follow, physics, stats panel, error capture. Cubes on a ground plane, no avatar.
Avatar builder
/avatar-builderMounts AvatarBuilder against the in-package LPC manifest, then spawns the resulting AvatarSelection into a physics scene through LayeredAvatarAnimator. Sprite assets served by the dedicated aicolab-sprites worker through the SPRITES service binding (`pnpm sprites:dev` locally). Exercises the avatar-system subpath end to end.
Top-down squish
/topdown-squishThe avatar-system's opt-in stylised foreshortening. Build an avatar, then orbit the camera from eye-level up to straight-down: the sprite squishes toward its feet (head-dominant chibi blob instead of an edge-on sliver) while its shadow stays pinned to the feet. Curvature + engage band tunable live; off by default for every other consumer.
House interior · portal destination scene
/house-interiorA cozy tavern-room interior built as its own three.js Scene from the VoxelDungeonSet asset pack (served by the three-resources worker): modular floor/wall grid, furniture, warm flickering torch + lantern light, its own fog/atmosphere. Rendered by a standalone non-R3F harness (rendering kept separate from the scene file) so it can be eyeballed in isolation before being wired as a portal destination in /portals. Needs `pnpm three-resources:dev`.
Island · sky/water addon showcase
/islandthree r0.185's TSL-native sky/water addons (SkyMesh + Water2Mesh) hosted by a renderer we own — Preetham skydome with procedural clouds, and flow-based reflect+refract water for both the ocean and a lagoon pool on a procedural island (Water2Mesh chosen over the classic WaterMesh mirror ocean after an A/B: its refraction responds to the composed seabed, giving natural shoreline transitions). Six atmosphere presets (noon → golden hour → haze → squall → dusk → moonlit night) retarget every uniform and damp toward it, so switching plays as a timelapse. A viability probe for high-quality water/sky in the portal platform without giving up pipeline ownership.
Spherical water · reflection/refraction probe
/spherical-waterAn isolated adoption probe for the complete /island water path on genuine sphere geometry: native Aureole lighting, animated flow normals, analytic-sky reflection, SSR, sampled scene refraction and contact foam measured along local radial depth. No existing scene consumes its sphere-specific coordinate hooks.
Portal village · scene-linking prototype
/portalsStaging ground for the three.js portal system (linking scenes with seamless transitions). Avatar control + physics from /avatar-builder, but under a fixed-angle ORTHOGRAPHIC pan-follow camera (HD-2D 3/4 read) and a portal-ready village: cottages with glowing doorways and mountains with cave mouths. Each opening is registered as a portal anchor (world position + outward normal) — the attachment points for the real render-target portals + walk-through transitions to come.
Portal village · DO-relay multiplayer
/portals-doThe same multiplayer village + engine as /portals-moq, but with an ALTERNATE network architecture: instead of a MoQ relay, a single Cloudflare Durable Object (PortalsRelayServer) is BOTH the roster and the pose relay — coalescing every player's dead-reckoned frame into a 20 Hz binary slot-batch fan-out (area-of-interest culled, per-tab source-excluded). Faithful adoption of the /hd2d SharedWorldDO pattern; reuses the identical engine, motion-sync and pose codec over the shared PoseTransport seam. Requires an auth session; open in two browsers (two accounts) to see two players.
Portal village · SpacetimeDB multiplayer
/portals-stdbThe same village + engine again, but the network plane is SpacetimeDB — a standalone database (local in dev, maincloud in prod), NOT Cloudflare. A `player` table IS both the roster and the pose data plane: clients subscribe to it and stream pose through an update_pose reducer; row deltas drive the shared PoseTransport seam. Identity bridges via OIDC — better-auth mints an ES256 id_token (the workers.dev replica signs ES256; SpacetimeDB rejects EdDSA) and SpacetimeDB derives a stable Identity = BLAKE3(iss|sub). Avatar/last-location still persist in the Cloudflare user-hub DO. Requires an auth session; open in two browsers (two accounts) to see two players.
Broker pattern · Morton-sharded
/brokerClient↔Worker↔DOs broker prototype on @aicolab/room-service RoomServer. Per-entity hub DOs + Morton-shard-named directory DOs; the Worker isolate brokers so two tabs interact in real time while never sharing an entity DO, and re-brokers across shard borders with no socket reconnect. Requires an auth session (real platform/auth, no placeholder).
Archipelago · world-composer demo
/archipelagoFour hand-authored island scenes + an imported glTF on one flat plane wrapped onto a sphere by the shared kolo warp, with a stylised flow ocean built on the same warp; sliders for sphere radius, island scale, warp blend; legend teleport; shadow-probe diagnostic for swappable light types. Walk far enough to circle the globe.
Home world · the platform planet
/home-worldThe platform's spatial home as a living day/night planet: feature areas are continents (real SpatialDestination exports — insights first, ghost landmasses for what's coming), each placed at a canonical H3 home cell and bent onto the globe by its own chart warp, with a lighthouse-harbour hub commons at the centre and genuine timetabled ferry lines across the straits. A real-UTC sun sweeps the terminator, so every visitor shares the same planet-time; the camera is a north-up pan (never a free twist) with fixed canonical arrivals at every place.
Spatial launcher · canonical DOM world
/spatial-launcherA mobile-first, non-Three.js projection of the exact island and landmark coordinates authored by /library-diorama. Squircle app-like destinations preserve the same spatial hierarchy while replacing continuous 3D rendering with accessible Solid/HTML navigation.
Insights · canonical world
/insights-spatial-mpTHE Insights destination (authored by the insights worker) as one canonical world: an illustrated map and a traversable HD-2D face from the same @aicolab/kolo/spatial definition — roads/bridges/physics from shared Catmull-Rom centrelines, the enterable insight-library gallery with LIVE DOM insight-note exhibits (depth-punched CSS3D through the HD-2D post pipeline), the Lantern Ferry with walk-on flush boarding to Lantern Islet, the harbour pier, and the in-world editor exporting patches toward the authored state. Multiplayer is join-gated: the island stays explorable solo; sign in and Join MP for live presence.
Page world · enter the exhibit
/page-worldMario-64-style exhibit dive, standalone: a museum anteroom with one wall-mounted insight note (the component's live HTMLTexture face) — jump INTO it (TSL ripple + white-out on the texture itself) and land inside the note, where the FULL PAGE is the floor: a depth-punched CSS3D dom-panel walked on by the avatar under a straight-down orthographic camera. Walking down the page is scrolling (clamped follow), the chibi squish handles the top-down sprite, and the page stays a real page — text selection aside, clicks still land on it. Stand on the exit pill (or Esc) to climb back out. Knobs: pitch 60–90°, zoom, squish band, post-FX.