Design: the ship configurator on the site

Design, 28 October 2026 (Mark: "I thought we were building a cool configurator that users could build out their perfect ship and then order it by paying a deposit", "similar to the way Tesla configurator"). It brings Spec it, and put down a deposit out of the game and onto the site.

Why

The yard's configurator is in the game, at a shipyard, so you only meet it once you've docked. Tesla's sells the car before you've sat in one: the car turning in the paint you just picked, the price adding up, a deposit and a date. The site can do the same for our hulls, and every spec shared as a link carries the game with it.

The page

/ships/<id>/build/ for every hull the yard sells (inYards). There's a "Build yours" button on each ship page.

Ordering: reserve online, pay at the yard

The deposit is paid in credits, and credits live in the save. The site doesn't change saves: the game owns them, its checksum and its ledger. So Order puts the spec where the game will find it, and the game takes the deposit:

  1. This browser: localStorage['witchspace.spec.v1'] = { spec: Spec, at: number }. The site shares the game's origin, so this works with no account.
  2. Your account, if you're signed in: PUT /me/spec, so it reaches the Home Screen app on a phone, and any other device.

The site then says: "She's on order. Dock at any shipyard and the yard has your spec ready: the deposit is X Cr."

For the game dev session (the contract)

Shared, pure (src/game/shipyard.ts): validSpec(spec: unknown): Spec | null. It checks the ship is inYards, that the colours are orderable, and that the glow, the lasers, the upgrades (in UPGRADES) and the luxuries are real, and it applies cleanName. The site, the server and the game all use it.

Server (accounts):

Game:

Rules

Think something here should change? Say so on the ideas board, where others can vote it up, or email hello@witchspace.org.uk. If you code: this page is docs/design/ship-configurator.md on GitHub, open to pull requests.