Design guide

Every city hides a game.

This is how we turn the visual language of metro maps into a growing collection of short city games. A living guide to our identity, voice, colour, type and product craft.

01 Identity

A collection, not a single game.

The identity starts with the same tension as a metro map: strict structure, immediate recognition and enough colour to make a complex place feel inviting.

Canonical lockup
The descriptor always travels with the name on public surfaces.
Name the StationCity games on real networks
Spectrum rail
Six editorial colours, always in the same order, form the master-brand signature.
InkCityPlay
02 Colour

Colour behaves like a line.

Six saturated inks form one fixed editorial spectrum. They organise the collection like a diagram without ever replacing the official colours of a real transport line.

  1. Network blue

    Explorer and orientation

    #0065BD
  2. Signal blue

    Signal Hunt and detection

    #00ADD0
  3. Station magenta

    Name the Station

    #DA39AF
  4. Connection orange

    Last Connection and urgency

    #FF6319
  5. Progress yellow

    Network Cascade and progression

    #F0AB00
  6. Play green

    Drop and placement

    #00AF3F

Colour tells you where you are in the product. Ink tells you what to do. Official operator colours remain untouched whenever the interface represents a real line.

03 Typography

One voice, several speeds.

One grotesque family carries both editorial headlines and practical interface copy. A mono face appears only when a value is truly data.

Primary family
Helvetica Neue where available, Archivo everywhere else, and Noto Sans JP for Japanese.

Aa 東京

Follow the lines. Catch the last train.

Data voice
Geist Mono is reserved for time, coordinates, codes and scores.

08:42

G0935.6762° NROUND 031,240 PTS
04 Game worlds

Each mechanic gets a line.

The master brand stays constant while each game owns one editorial accent and one specific verb. Colour creates recognition; the mechanic creates the personality.

The collection map
Stable roles make the collection legible across hubs, sessions, results and sharing.
  1. Explorer

    Read the true map behind every challenge.

  2. Name the Station

    Recognise the hidden station from the network around it.

  3. Drop

    Place a station from its name and the lines that serve it.

  4. Last Connection

    Trace a viable route before the last train leaves.

  5. Signal Hunt

    Follow sparse signals until the right station emerges.

  6. Network Cascade

    Watch one disruption ripple through the network.

05 How we made it

One map. Many games.

The interface is the last stop in a longer route. Official data becomes a frozen city world, that world feeds several mechanics, and each mechanic reveals a different way to read the same network.

  1. 01

    Collect the real network

    We begin with official operator and government datasets, with sources and licences recorded.

  2. 02

    Freeze a city world

    A versioned, immutable world keeps every game fair, reproducible and attributable.

  3. 03

    Design the mechanic

    Each game asks a genuinely different question of the same stations, lines and connections.

  4. 04

    Return to the city

    Maps, city pages and station stories make every answer feel connected to a real place.

Built as one connected system

A type-safe stack keeps the route from source data to screen explicit. The technology stays quiet so the city and the mechanic can do the talking.

TanStack Start
SSR, routing and the React product surface.
PostgreSQL + Drizzle
Versioned worlds and durable game state.
oRPC + TanStack Query
One typed contract from server procedure to interface.
MapLibre GL
Real networks rendered as responsive, interactive maps.
06 Working with AI

We code with AI. We never vibecode.

AI sits in the workshop with us: it drafts, refactors and double-checks. What it produces is still engineering work. Written intent comes first, then a typed contract, then a person reading every line before it merges.

  1. 01

    Intent before prompt

    A feature starts as written intent: data source, states, edge cases. The first prompt comes after that.

  2. 02

    Types are the referee

    Strict TypeScript, Zod at every boundary and one typed contract from server procedure to screen. A wrong guess fails to compile.

  3. 03

    Every diff is read

    A human review, the check suite, a passing build and the acceptance tests. Four gates, no exceptions.

  4. 04

    The city is never generated

    Models help us build the tools. Stations, lines and timetables come from official operator data, with sources and licences recorded.

Two habits, one tool
The difference is never the tool. It is what we refuse to skip.
VibecodingEngineering with AI

Prompt until the screen looks right.

Write the intent, then prompt against it.

Ship code nobody has read.

Read every diff before it merges.

Let the model fill in the missing data.

Bind every value to an official source.

Patch symptoms until the error goes quiet.

Fix the cause, then keep the check that caught it.

The real delivery loop
A classic, human-led product process. AI accelerates a few bounded tasks inside it; it never owns the work end to end.
  1. 01

    Define the problem

    People investigate the problem, speak with the people concerned and write a PRD: the outcome, constraints, risks and definition of done.

  2. 02

    Design the solution

    People turn the PRD into product and UX choices, acceptance criteria, data contracts and an architecture that can be challenged before code exists.

  3. 03

    Use AI as an instrument

    Claude Code and Codex help explore the codebase, implement contained tasks, suggest refactors, document options and surface checks. Their output remains a proposal in a working branch.

  4. 04

    Verify and decide

    People review the diff, run the checks, test the experience with real product judgement, validate it against the PRD and decide whether to release.

Claude Code and Codex are implementation tools, not authors of the product. People do the research, define the direction, curate the data, make the product and UX choices, judge trade-offs, test the experience and decide whether it is ready for players.

AI raises our pace, not our tolerance for guesswork. Nothing reaches a player because a model sounded confident.

Now take the network for a spin.

The guide is only useful if the product feels like it. Follow a line, read the city, and see the system in motion.