◆ For the curious & the technical

The Nerdy Stuff

A full 3D island life-sim that ships in ~8.5 MB — because there isn't a single art asset. Every mesh, material, character and note of music is generated in code. Here's how it all fits together.

Back to the island
◆ The headline flex

100% procedural. Zero binary assets.

No texture files, no 3D models, no audio files, no sprite sheets. The entire world is built at runtime in TypeScript — which is why the whole download is smaller than a single high-res photo on some apps.

Babylon.js 9 WebGL2 TypeScript (strict) Vite Capacitor 8 Capgo OTA Web Audio API Cloudflare Pages ~8.5 MB 0 asset files Built with Claude + Gemini

🧱 Procedural generation

  • Meshes — assembled from Babylon primitives in code (no model files).
  • Characters — a shared rig (torso / limbs / face / hair helpers) builds the whole cast.
  • Materials & signs — code-defined colours; labels drawn live to canvas textures.
  • Audio — fully synthesised; the music is composed, the instruments & SFX synth-generated.
  • Sky — a gradient dome with a day/night crossfade. No skybox images.

🎮 Engine & rendering

  • Babylon.js 9 on WebGL2.
  • Post-FX pipeline: bloom, ACES tone-mapping, vignette, FXAA + a glow layer.
  • Real-time sun & dynamic shadows that move with the in-game clock.
  • Custom GPU vertex-shader for foliage wind-sway.
  • Shader warm-up on load & frozen static meshes for a hitch-free first frame.

🏗️ Language & architecture

  • TypeScript, strict — and a point of pride: zero as any, zero @ts-ignore.
  • System-based (ECS-flavoured): every feature is an ISystem in a strict dependency order.
  • Systems never import each other — they talk only through a fully-typed event bus.
  • Decoupled loop: simulation is a fixed 1/60s step; render is capped at 60fps.
  • Math-based collision (no physics engine) and per-system save/load serialisation.

📦 Cross-platform & delivery

  • One codebase → desktop browser, mobile browser and native Android (Capacitor 8).
  • Over-the-air updates (Capgo) — ship fixes to installed apps with no store round-trip; auto-rollback on a bad bundle.
  • Signed release APK (v2 APK Signature Scheme).
  • CI/CD on Cloudflare Pages — git-push deploys, auto-SSL, global CDN.
  • One version number locked across package.json, the git tag and the live bundle.
◆ How it fits together

The architecture, at a glance

01
DELIVERY
how it ships & reaches players
Desktop browser
WebGL2 canvas
Mobile browser
touch input
Android native
Capacitor 8 · WebView
◄ git push
Cloudflare Pages
CDN + SSL CI / CD
CAPGO OTA live JS bundle pushed straight to the Android WebView · auto-rollback on failure
02
RUNTIME & ENGINE
boot path → render
index.html src/main.ts MenuScreen + Game
Game Loop
simfixed 1 / 60
render≤ 60 fps
simulation & rendering fully decoupled
renders
Babylon.js 9 WebGL2
bloom ACES tone shadows glow GPU wind shader
update(dt)
03
CORE
the wiring spine
GameContext
SERVICE LOCATOR
scene · clock · camera · input · …
HUB
EventBus
FULLY TYPED
systems never import each other — they only publish & subscribe here
SystemManager
ISystem ORDER
init · update · dispose
04
SYSTEMS
~50 independent modules · all via the bus
brew friendship mainQuest personalQuests festival pubs vibrancy farming weather audio graphics lighting social save + ~36 more
05
GENERATION · CONTENT · PERSISTENCE
Procedural Gen the flex
meshesMeshBuilder
charsNpcKit rig
texturescode / canvas
audioWeb Audio synth + score
skygradient dome
→ NO asset files
Content
DATA TABLES
catalog festivals quests flowers …and more
Persistence
SaveManager
per-system serialize →
localStorage
Capacitor Preferences
◆ Under the bonnet

Every system, listed

~50 independent systems, each owning one slice of the game and coordinating only through the typed event bus. Registered in a deliberate dependency order.

Core loop, input & world

Brewing, economy & growing

People, story & progression

Festivals, decorating & play

Rendering, atmosphere & audio

◆ Casual brag material

A few numbers & quirks

⚡ Performance & feel

  • Thermal-aware: a render-DPR cap + fps cap cut GPU load ~4× — without changing game feel (the sim is fixed-step).
  • Identical timing on a 60Hz and a 120Hz phone.
  • QA via headless soak tests (Puppeteer + SwiftShader software-GL) that fast-forward seasons, festivals & save/load.

🌍 The world

  • A 9-act main quest, ~50+ chained friendship favours, a hidden finale.
  • Four seasonal festivals with a band & minigames; live day/night & a turning year.
  • A wardrobe of 17 procedural outfits — every character built from the same code rig.
  • British island, British spelling, happy hour all the way down.
Every line of code was written by AI — Anthropic's Claude (Fable 5 & Opus 4.8), with the intro film & loading art by Google's Gemini — directed, designed and tuned by one person. Made with Babylon.js · TypeScript · Vite · Capacitor — and rather a lot of care.