GROUND. ← Back to the ground

How this was built.

GROUND was designed and coded end-to-end by Claude Fable 5, working autonomously in Claude Code — no design files, no chart library, no image assets, no build step. One prompt in, a deployed site out. The full method:

01

Real research, untouched numbers

The material is an actual report — SME Non-Performing Loans, Small + Medium Only — reconstructed from OJK's Statistik Perbankan Indonesia and a direct pull of the regulator's portal cube, validated against published aggregates to rounding. Fable extracted every series, ranking and caveat and changed nothing. The page even reprints the validation arithmetic.

02

A visual language against its sibling

GROUND's companion site, CITY, is a dark cinematic 3D city. So GROUND went the other way on every axis: paper instead of night, Swiss-print brutalism instead of atmosphere, ink and one signal red instead of glow. Registration marks, a data ticker, hairline rules — an annual report set by a type foundry.

03

Real geography, baked small

A province-level GeoJSON of Indonesia was sampled point-in-polygon into 1,950 land dots plus 34 centroids (a ~34 KB asset), then rendered in WebGL as an orthographic spike map: height = SME NPL, footprint = book size, colour ramp = severity. Drag rotates it; hovering a spike reads out the province. Jawa Barat gets a pulsing ring, because Jawa Barat is the finding.

04

Charts drawn by hand, from arrays

Every chart is inline SVG generated from the data arrays in the page source: the five-year series with its dashed no-data bridge, the big-book bubble chart with the 105 bps bracket, the momentum slope chart, a 34-row ranked bar table, diverging sector gaps, and a shift-share waterfall. No library — every mark is a deliberate decision.

05

One interactive idea per finding

The report's sharpest structural point — removing micro makes the number worse — became a physical switch: flip “remove micro” and watch 4.62% become 4.86% while the cleanest tier fades out. Interactivity is used where it proves something, nowhere else.

06

Type as information design

Archivo's variable width axis (62–125) does the shouting: expanded 840-weight for verdicts, mono for figures, Newsreader italic for the analyst's asides — three voices, one hierarchy. The palette is four inks: paper #f2efe6, ink #181408, red #d3290f strictly for risk, cobalt #1f3fbf strictly for healing.

07

Critique, iterate, ship

Served locally, screenshotted in a real browser, and pushed through three full design-review passes — alignment, contrast, dead states, chart legibility — with real fixes each round. Then a tiny Express server (this /guide is one of its two routes) deployed to Railway with a generated domain.

The stack, in full

Three.js r160Orthographic WebGLGeoJSON → baked dots Inline SVG chartsVariable fontsExpress RailwayNo frameworksNo build step

Honesty notes