neon-metro is a metro booking application for everyday city riders and for booking managers who reserve metro travel on behalf of other people. The product lets a person find a metro route or trip, choose a suitable option, complete a reservation, and obtain a confirmed ticket — and then return later to review the bookings they have made.
The audience is two-fold. The Metro Rider books metro travel for themselves and needs to find and reserve a route quickly and trust that the ticket is correct. The Booking Manager arranges travel for other travelers — family, colleagues, or other passengers — and needs line-by-line clarity when issuing tickets for people who are not themselves.
The product is deliberately small and exact: exactly four pages — Landing, Search, Booking, and Bookings. It is a wayfinding product at heart, and its visual language is the sober, civic, slightly nocturnal confidence of a transit system: a near-black ground, one exact acid-yellow signal colour, ruled tables instead of cards, and a diagrammatic metro map that is both the hero artwork and the navigation.
neon-metro is delivered as a first-party web application with a custom user interface and an application-owned identity. It consists of four pages:
Two accepted human personas act in the product: the Metro Rider and the Booking Manager. Both may search, book, and review bookings; the Booking Manager additionally arranges travel on behalf of other travelers, so booking creation and booking-history visibility are role-aware.
The application owns durable state: routes and trips, bookings, tickets, and the identity that binds a booking to the correct participant. A backend service provides route/trip search, booking creation and confirmation, and booking-history retrieval. Identity is established on first use and verified on return before protected booking workflows are reached.
Narrow exclusions. This document does not add payment processing, seat-map selection, loyalty or rewards, refunds and cancellation workflows beyond the disruption/cancellation display code described in the visual system, notifications, or any account-management capability beyond first-use identity establishment and returning verification. No page beyond the four named above is in scope.
Delivery ownership. neon-metro is a first-party application. All four pages are custom application surfaces owned by the product; there is no provider-owned or external-only surface in the current scope, and no headless-only delivery. The backend that serves route search, booking creation, and booking history is part of the same application and is reached only through these four pages.
Access ownership. The Landing page is anonymously reachable — it is the public entry surface and carries no access requirement. Search, Booking, and Bookings are protected: a visitor must establish identity before reaching them. Because a protected destination cannot own the interaction that establishes access to itself, first-use identity establishment and returning verification are treated as an anonymous entry interaction that precedes protected work; the protected state itself remains unavailable until identity is established. Booking creation and booking-history visibility are role-aware, so what a Booking Manager can do on behalf of other travelers is distinguished from what a Metro Rider does for themselves.
Current vs. future boundary. Everything described in this document is current. No future-horizon requirements were accepted in the authoritative thread; the only forward-looking statement is the four-page limit itself, which is a current hard constraint rather than a deferred feature.
Not applicable. No reference directive in this project declares a content_source, so no verified factual inventory is carried into this document.
SEARCH ROUTES — a solid acid-yellow button with black text that moves the visitor toward route search. SIGN IN — a bare text link that begins the access interaction.FR-1 — Anonymous entry to the product (explicit) As a visitor, I should arrive at the Landing page without any access requirement, so that I can understand what neon-metro is and decide how to proceed.
FR-2 — Enter route search from the public entry (explicit) As a visitor, I should be able to start searching metro routes from the Landing page, so that I can look for travel without first reading anything else.
SEARCH ROUTES.FR-3 — Set origin and destination from the network diagram (explicit) As a visitor or actor, I should be able to click an interchange station on the network diagram to set the origin or destination, so that the map itself is the navigation.
FR-4 — First-use identity establishment (required_inference) As a first-time rider or booking manager, I should be able to establish my own identity for the application, so that my bookings remain bound to me and I can return to them.
SIGN IN on first use.FR-5 — Returning verification (required_inference) As a returning rider or booking manager, I should be able to verify my identity before reaching protected booking workflows, so that my existing bookings and history stay private to me.
FR-6 — Search metro routes or trips (explicit) As a Metro Rider or Booking Manager, I should be able to search metro routes or trips, so that I can find a suitable option for the journey I need.
FR-7 — No matching routes (explicit) As a Metro Rider or Booking Manager, I should be told clearly when no routes or trips match my search, so that I can revise my inputs rather than assume the app is broken.
FR-8 — Select a metro option (explicit) As a Metro Rider or Booking Manager, I should be able to select one of the matching routes, so that I can proceed to reserve it.
FR-9 — Complete a reservation and obtain a confirmed ticket (explicit) As a Metro Rider, I should be able to complete the reservation for the selected metro option and obtain a confirmed ticket, so that I have proof of travel.
FR-10 — Book on behalf of other travelers (required_inference) As a Booking Manager, I should be able to enter the details of the traveler or travelers a booking is being made for, so that correctly issued tickets reach the intended passengers.
FR-11 — Review existing bookings (explicit) As a Metro Rider or Booking Manager, I should be able to revisit a list of my existing bookings and their details, so that I can check what I have reserved.
FR-12 — No bookings yet (explicit) As a Metro Rider or Booking Manager with no bookings, I should see an explicit empty state, so that I understand there is nothing to show and know how to start.
FR-13 — Role-aware booking creation and history visibility (required_inference) As the application, I should distinguish booking creation and booking-history visibility by role, so that a Booking Manager's bookings for other travelers and a Metro Rider's own bookings are each handled correctly.
FR-14 — Exactly four pages (explicit) As the product owner, I should have the application contain exactly four pages — Landing, Search, Booking, and Bookings — so that the scope stays as requested.
Product context. The Metro Rider is the primary human actor in neon-metro. They travel the city by metro and use the app to find and reserve their own travel. They are usually in motion or about to be — deciding on a route, checking a departure time and platform, and wanting the answer to be exact the first time. The interface they want is legible under pressure: a ruled table of routes, tabular numerals, and one clear signal colour telling them what is selected and what is confirmed.
Primary goal. Find a suitable metro route or trip and complete a booking so that they hold a confirmed ticket for their own travel.
Distinct accepted responsibilities. The Metro Rider searches metro routes or trips (FR-6), reads and revises the results when nothing matches (FR-7), selects one option (FR-8), completes the reservation for themselves and obtains a confirmed ticket (FR-9), and revisits their existing bookings and their details (FR-11), including seeing an explicit empty state when they have none (FR-12).
Relevant inputs and decisions. Origin and destination — which they may set by clicking an interchange station on the network diagram (FR-3) or by typing into the search form — plus travel parameters, the choice among matching routes, and the decision to confirm the reservation.
Interactions with other accepted participants. The Metro Rider interacts with the application's identity boundary: they establish their own identity on first use (FR-4) and verify it on return (FR-5) so that their bookings stay bound to them. They do not act on behalf of others; that is the Booking Manager's distinct responsibility.
Observable success. A confirmed ticket rendered as a printed artefact with a barcode/QR block, departure time, and platform; and, on return, their own bookings listed as ruled rows with their details available.
Product context. The Booking Manager arranges metro travel on behalf of other people — family, colleagues, or other passengers. Their work is not a single journey but a set of journeys belonging to someone else, and their failure mode is a ticket issued to the wrong person or a booking they cannot later account for. They need line-by-line clarity: which traveler, which route, which departure, which platform, and which bookings are theirs to manage.
Primary goal. Create and keep track of bookings made for other travelers, with the outcome that correctly issued tickets reach the intended passengers.
Distinct accepted responsibilities. The Booking Manager searches metro routes or trips (FR-6), selects an option (FR-8), enters the details of the traveler or travelers the booking is being made for and completes the reservation (FR-10), and reviews the resulting bookings and their details (FR-11), distinguishing bookings made on behalf of others.
Relevant inputs and decisions. Origin, destination, and travel parameters; the choice among matching routes; and — the decision that distinguishes this role — which travelers the booking is for and whether the entered traveler details are correct before committing.
Interactions with other accepted participants. The Booking Manager interacts with the application's identity boundary on their own behalf (FR-4, FR-5), and their bookings are bound to the travelers they name, who are the materially affected parties of the booking. The Booking Manager's role is what makes booking creation and booking-history visibility role-aware (FR-13).
Observable success. Correctly issued tickets for the intended passengers, each rendered as a printed artefact identifying its traveler, and a Bookings list in which those bookings are distinguishable from the manager's own travel.
SEARCH ROUTES. Because Search is protected, the access interaction is presented before any protected search state is reached (FR-2).SIGN IN, or proceeds directly into route search (FR-2).SIGN IN, or activates SEARCH ROUTES and is met by the access interaction because Search is protected (FR-2).Muse and headline. Peter Saville. The identity is carried by one exact colour code on a near-black ground, treated like a printed record sleeve rather than a SaaS dashboard — monochrome plus one exact spot colour, small precise type in a lot of silence. The project name neon-metro gives the spot colour permission to be electric rather than heritage.
Colour tokens (dark mode).
| Role | Hex | Use |
|---|---|---|
| Background | #0B0B0C | Near-black ground; carries ~70% of every screen — the gallery wall |
| Surface | #141416 | Panels, sitting on the ground with 1px #2A2A2C hairlines, never shadows |
| Text | #F2F0EB | Warm off-white type, never pure white |
| Primary | #E8FF3A | Acid yellow — the network code: active line, selected fare, confirmed ticket, the one link that matters |
| Accent | #FF4B23 | Vermilion — a second, rarer code used only for disruption, cancellation, and destructive actions, never decoratively |
| Muted | #7A7A78 | Metadata blocks, timestamps, platform numbers, all secondary labels |
| Hairline | #2A2A2C | 1px panel borders and full-bleed section rules |
No gradients anywhere; every colour is a flat printed ink. Any blue, indigo, or violet accent is forbidden.
Typography. Headings and body both use Archivo — a condensed-feeling neo-grotesque. Headings are set very tight at -0.03em and very large, uppercase for station names and network words, sentence case for editorial statements, weight 500–600 only, with no black weights. Display sizes are allowed to be enormous because the type is the image. Small metadata is set in uppercase Archivo at 11–12px with +0.14em tracking, like catalogue numbers on a sleeve. Scale is 1.5 modular: 40/28/20/15/12, with hero clamp(40px, 9vw, 128px), section heads clamp(24px, 4vw, 44px), body 15–17px/1.6, metadata 11px/1.4 uppercase. Tabular numerals are used for all times, fares, and platform numbers. Inter, Roboto, Poppins, and any rounded geometric sans are forbidden for headings and body.
Shape language. Almost no radius: 2px on inputs and buttons, 0 on panels and images. Everything is a rectangle with a hairline. The only circular forms are the transit roundel — a filled spot-colour disc with a cut bar — and line-colour dots in the network diagram. Rules are 1px and always horizontal; verticals exist only as grid column edges.
Layout. A 12-column grid with a visible left metadata rail (40px wide on desktop, collapsed to a top strip on mobile) running the full page height and carrying catalogue-style labels: page name, date, rider ID, line code. Content lives in columns 3–11 on desktop, single column at 375px. Sections are separated by full-bleed 1px hairlines, never by cards. Search results and bookings are ruled tables, not card grids — each route or booking is a row with origin, destination, time, fare, and a line-colour dot, aligned on tabular numerals.
Imagery. No photography of people, no stock city skylines. The imagery is the network itself: a diagrammatic metro map drawn as SVG with 2px lines, 8px station dots, and interchange rings, rendered in the line colours on the black ground. Secondary imagery is scientific-diagram-like — a ticketing barcode, a QR block, a topographic contour of the fare zones, a timetable grid. All artwork is line and flat fill; nothing is rendered or photographed. Illustration with personality or mascots is forbidden.
Readable text and controls. Headlines, wordmarks, labels, numbers, table text, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling (for example font-size: clamp(...) with its mobile size) to fit, and no other element covers any part of them. Imagery, decoration, and motion may be cropped, bled off an edge, rotated, overlapped, or cut exactly as the direction asks, as long as they cover no readable text or control.
The first screen is a printed record sleeve, not a SaaS hero.
The Landing page is composed as a catalogue artefact. A full-height metadata rail occupies the left third in 11px uppercase grey — NEON METRO / NETWORK ACCESS / 04 SURFACES / 2024 — running the entire page height and reading like the spine text of a sleeve. The right two-thirds carries an oversized uppercase Archivo headline, MOVE THROUGH THE CITY, set at clamp(40px, 9vw, 128px) in #F2F0EB, stacked over four lines, flush left, with tight leading so the block fills the viewport height. The dominant element is the type block; there is no centred stack, no gradient, no illustration, and no floating cards.
Beneath the type block, one acid-yellow 1px rule spans the full content width. Under the rule sits a single line of 15px grey text and two flush-left actions: a solid #E8FF3A button with black text reading SEARCH ROUTES, and a bare text link reading SIGN IN.
Behind and to the right, the SVG network diagram is cropped by the viewport edge — 2px lines and 8px station dots bleeding off the right and bottom, with one acid-yellow line drawn across it. The diagram is not decoration: its interchange stations are clickable and set the origin/destination in the search form, so the hero artwork is also the navigation. This is the signature move of the whole product — a wayfinding diagram that is simultaneously the identity, the image, and the first input.
The concept recomposes only accepted content, states, and controls: the headline, the supporting line, the two actions, the metadata rail, and the network diagram with its clickable interchanges. It introduces no new behaviour, page, or destination.
Interaction Model: Static (direction) Motion Tempo: still Hero Dimensionality: flat
Landing Hero Motion Brief.
SEARCH ROUTES button and SIGN IN text link flush left; the network diagram bleeding off the right and bottom edges with its acid-yellow line fully drawn.prefers-reduced-motion, everything appears instantly and the diagram is shown fully drawn. The first frame is identical to the composed first frame above, with no draw-on and no fades.NFR-1 — Exact page count (explicit) The application must contain exactly four pages: Landing, Search, Booking, and Bookings. No additional page may be added. Rationale: the authoritative thread states "make 4 pages" and the planning scope records an exact page-count constraint of 4.
NFR-2 — Durable state (required_inference) The application must persist routes and trips, bookings, tickets, and the identity that binds a booking to the correct participant, so that a booking made in one session is revisitable in another. Rationale: Bookings is a revisitable list of existing bookings and their details; without durable state the accepted journey cannot complete.
NFR-3 — Application-owned identity (required_inference) Identity must be owned by the application, with first-use establishment and returning verification, so that a booking remains bound to the correct participant and each actor sees their own bookings. Rationale: the accepted journeys require continuity of actor-specific booking state across sessions.
NFR-4 — Role-aware authorization (required_inference) Booking creation and booking-history visibility must be role-aware, distinguishing a Booking Manager's bookings for other travelers from a Metro Rider's own bookings. Rationale: the Booking Manager's accepted responsibility is arranging travel on behalf of others, which requires differentiated control over booking creation and history visibility.
NFR-5 — Legibility under pressure (explicit) All times, fares, and platform numbers must be set in tabular numerals, and search results and bookings must be presented as ruled tables rather than card grids. Rationale: the creative direction requires that a cancelled ticket be legible from across the room on the black ground and that results align on tabular numerals.
NFR-6 — Responsive integrity (explicit) Readable text and controls must stay whole and entirely inside the viewport and their container at 375px, 768px, and 1280px. At 375px the metadata rail collapses to a single horizontal strip above the content, and each table row reflows into a stacked label/value block with the same rules. Rationale: the creative direction's readable-text-and-controls rule.
NFR-7 — Reduced motion (explicit)
With prefers-reduced-motion, everything must appear instantly and the network diagram must be shown fully drawn. Rationale: the creative direction's motion specification.
NFR-8 — No gradients, no shadows (explicit) No gradients may be used anywhere; every colour is a flat printed ink. Panels sit on the ground with 1px hairlines and never shadows. Rationale: the creative direction's palette and shape language.
NFR-9 — Backend integration (required_inference) Route/trip search, booking creation and confirmation, and booking-history retrieval must be served by the application's backend, reached only through the four pages. Rationale: the accepted journeys require server-side search and durable booking state.
[Default — not specified by user][Default — not specified by user][Default — not specified by user][Default — not specified by user][Default — not specified by user]No source-specified technology choices were given in the authoritative thread, so the above are labeled defaults and carry no product behavior.
Constraints (binding).
#0B0B0C, surface #141416, text #F2F0EB, primary #E8FF3A, accent #FF4B23, muted #7A7A78; Archivo for headings and body; 2px radius on inputs and buttons and 0 on panels; no gradients; no blue, indigo, or violet accent; no stock photography; no centred hero stack; no cards with drop shadows or hover-lift.Assumptions (narrow, labeled).
#FF4B23 code is used only to display disruption or cancellation status where such a status exists; it does not imply a cancellation or refund workflow.#E8FF3A, the single exact colour code marking active, selected, and confirmed states.#FF4B23, used only for disruption, cancellation, and destructive actions.
Network diagram / set origin & destination
Origin — / Destination —
Choose one interchange for the origin, then a second for the destination.
A metro booking system for everyday riders and for the booking managers who reserve on their behalf — find a route, hold it, and carry a confirmed ticket for the whole journey.
First use on this device. Your identifier and secret bind the bookings issued under your name.
Held only for this submission. Never stored on the page.
No protected state is created until the identity service returns success.

Network diagram / set origin & destination
Origin — / Destination —
Choose one interchange for the origin, then a second for the destination.
A metro booking system for everyday riders and for the booking managers who reserve on their behalf — find a route, hold it, and carry a confirmed ticket for the whole journey.
First use on this device. Your identifier and secret bind the bookings issued under your name.
Held only for this submission. Never stored on the page.
No protected state is created until the identity service returns success.
No comments yet. Be the first!