Cycle 24

Week 3 of 6

18 working days left

Open navigation
Appetiter24

Every token, primitive and section Appetite ships

19 sections, 17 primitives and 108 tokens across two modes, rendered from the source in the download.

tokens

src/theme.css

--background
--card
--surface-sunken
--surface-overlay
--primary
--primary-soft
--accent
--accent-soft
--secondary
--muted
--selection
--info
--positive
--warning
--critical
--field

fills — the dot, the bar, the glyph, the chart mark. A graphic is held to 3:1, so these keep their saturation. The darker --info, --positive, --warning and --critical values are the text tier.

  • --info-fill
  • --positive-fill
  • --warning-fill
  • --critical-fill
  • --priority-high
  • --priority-medium
  • --priority-low
  • --priority-none
type-d4Appetite is fixed
type-d3Scope is what varies
type-d2The hill says what is unknown
type-d1Six weeks, then cooldown
type-leadA bet is a commitment of time, not a promise of features
type-bodyThe betting table decides what a team will not build this cycle.
type-smallDigest composer sits at 62 on the hill, past the crest.
type-captionMoved 2 days ago by Mei Lindqvist
type-labelCircuit breaker
--radius-sm
--radius
--radius-lg
--radius-xl
brand mark

ui

src/components/ui/index.ts

Buttons

Six tones, five sizes, three icon sizes

tones

Open the hill

disabled

pending

sizes

icon sizes

Badges and marks

Lifecycle, appetite, priority, owners

lifecycle

ShapingShapedBetSet asideShipped

tones

NeutralPrimaryAccentInfoPositiveWarningCritical

appetite and priority

Small batch2wBig batch6wNo appetite yetHighMediumLowNo priority

hill tracks and owners

Threshold editor sits at 88 on the hill, past the crest.S-1Delivery and retries sits at 12 on the hill, before the crest.S-4Gap detection has shipped.S-5Harbour subscription list sits at 41 on the hill, before the crest.S-3Mei LindqvistInes Kaur

eyebrow

Circuit breaker

Fields

Three sizes, label, description, invalid, read only, disabled

default

What a person would call it in a meeting.

sizes

invalid

Two or six. Nothing between.

Use 2 or 6. An appetite between the two is a wish.

read only

Read only while a cycle is running.

disabled

Observers cannot change a team.

textarea, checkbox, switch

One message when the bet is placed.
The honest signal.
Off on purpose.

Panels, figures and tables

Surfaces, metrics and the table shell

figures

Cycle standing

18working days left

Scopes past the crest

5 of 11

Week 3 of 6

Stalled

1

Over five working days

appetite well

2.4 of 6 weeks spent

2 of 2 weeks spent

3 of 2 weeks spent, 1 over

empty state

Nothing is shaped for this cycle

A pitch reaches the table once it has a problem, an appetite and its no-gos written down.

filter chips

ShapedSearch: harbour

table shell

Three scopes with their hill position and owner.
ScopeOwner
Threshold editor88Rafi Osei
Digest composer62Mei Lindqvist
Harbour subscription list41Jonas Wilk

surfaces

sunken

card

raised

Overlay surfaces live in the overlays frame below, shown open.

overlay-gallery

src/components/overlay-gallery.tsx

Overlays

Dialog, confirm, popover, dropdown menu, tooltip, command palette and calendar. No overlay library.

Date picker

A typeable field beside a calendar in a popover.

Calendar

September 2026

Mo
Tu
We
Th
Fr
Sa
Su

Shaded days are weekends. Cycles only count working days.

Keyboard

Escape closes every layer. Tab is trapped inside modal layers and returns to the trigger on close. The menu takes arrow keys, Home, End and type-ahead. The calendar takes arrows, Home, End, Page Up and Page Down. The palette opens on Command or Control K.

bet-index

src/components/cycle-overview.tsx

Cycle 24 standing

18working days left

4 bets, 12 of 12 team-weeks, running to 11 Sep 2026.

Open the hill chart
  1. B-1

    Surge alert digest

    Big batch6w

    One daily message a harbour master can act on instead of nine separate alarms.

    Team Chart4 scopesMean hill 51

    2.4 of 6 weeks spent

    • Threshold editor sits at 88 on the hill, past the crest.Threshold editorRafi Osei
    • Digest composer sits at 62 on the hill, past the crest.Digest composerMei Lindqvist
    • Harbour subscription list sits at 41 on the hill, before the crest.Harbour subscription listJonas Wilk
    • Delivery and retries sits at 12 on the hill, before the crest.Delivery and retriesMei Lindqvist
  2. B-2

    Sensor gap backfill

    Small batch2w

    Fill the holes a dropped station leaves in the tide record, and show where they were.

    Team Alerts3 scopesMean hill 76

    2 of 2 weeks spent

    • Gap detection has shipped.Gap detectionTom Reddaway
    • Backfill job sits at 74 on the hill, past the crest.Backfill jobNell Okonjo
    • Audit trail sits at 55 on the hill, past the crest.Audit trailPriya Raman
  3. B-3

    Berth planner rewrite

    Small batch2w

    Replace the spreadsheet berths still live in with a grid that knows the tide.

    Team Alerts2 scopesStarts in week 5

    0 of 2 weeks spent

    • Berth grid has not started.Berth gridPriya Raman
    • Conflict rules has not started.Conflict rulesTom Reddaway
  4. B-4

    Tide table export

    Small batch2w

    Give port authorities the printed table they still put on the wall.

    Team Alerts2 scopesStarts in week 6

    0 of 2 weeks spent

    • CSV and PDF writer has not started.CSV and PDF writerNell Okonjo
    • Scheduled delivery has not started.Scheduled deliveryTom Reddaway

Appetite is fixed and scope is what varies. A bet that will not fit gets broken, not extended.

attention-queue

src/components/cycle-overview.tsx

Needs a person

3 open in week 3

  • Harbour subscription list has not moved in 6 days

    Still deciding how a harbour inherits a region's thresholds.

    Open scope
  • Delivery and retries is still uphill in week 3

    Nobody has tried the provider's bounce webhook yet. 18 working days left in C-24.

    Review the bet
  • 2 team-weeks are still uncommitted for C-25

    10 of 12 weeks are bet. The table closes at cooldown.

    Open the table

cycle-shape

src/components/cycle-overview.tsx

Where the work is

Counted from the eleven scopes in this cycle

On the hill
Started and not shipped
6
Not started
Bets that begin in week 5 and 6
4
Shipped
Left the hill this cycle
1

Furthest along

Gap detection. Shipped.

pitch-queue

src/components/pitch-queue.tsx

C-25 demand

30team-weeks asked for against 12

7 shaped pitches want the next cycle. 3 are still being shaped.

Open the betting table
Write a pitch
Pitch queue, 12 pitches, sorted by shaped
StateBy
Multi-harbour accounts

A port authority running four harbours keeps four separate logins and four separate bills.

ShapedBig batch6wHighInes Kaur2d ago
Sensor health board

Nobody notices a station has gone quiet until a forecast is already wrong.

ShapedSmall batch2wMediumMei Lindqvist4d ago
Alert acknowledgement

An alert goes out and nobody can tell whether a person saw it.

BetSmall batch2wMediumAna Vestergaard5d ago
Admiralty feed import

Two harbours send us a weekly CSV that someone pastes in by hand.

BetSmall batch2wHighTom Reddaway6d ago
Harbour digest, second pass

Harbour masters read the digest on a phone at 05:00 and cannot reorder it.

BetBig batch6wHighAna Vestergaard9d ago
Public tide widget

Harbour websites embed a screenshot of our table and it goes stale.

ShapedBig batch6wLowRafi Osei12d ago
Historical replay

After a flood, the harbour asks what we predicted and we rebuild it by hand.

ShapedBig batch6wLowInes Kaur18d ago
Whitelabel harbour portal

One harbour wants our screens under their own brand.

Set asideBig batch6wNo priorityInes Kaur44d ago
Native mobile app

The digest is read on a phone, so the ask is a phone app.

Set asideBig batch6wNo priorityRafi Osei61d ago
Station install checklist

Every new station install goes differently and the engineer improvises.

ShapingSmall batch2wMediumPriya RamanNot yet
Forecast confidence bands

We publish a single number for a prediction that is really a range.

ShapingNo appetite yetLowJonas WilkNot yet
Dredging window planner

Dredging contractors ask us for windows and we answer by email.

ShapingNo appetite yetNo priorityNell OkonjoNot yet

Showing 12 of 12 pitches

shaping-lane

src/components/pitch-queue.tsx

Still shaping

3 pitches without a settled appetite

  • Station install checklistSmall batch2w

    Every new station install goes differently and the engineer improvises.

    Shaped by Priya Raman

  • Forecast confidence bandsNo appetite yet

    We publish a single number for a prediction that is really a range.

    Shaped by Jonas Wilk

  • Dredging window plannerNo appetite yet

    Dredging contractors ask us for windows and we answer by email.

    Shaped by Nell Okonjo

A pitch reaches the table with a problem, an appetite and its no-gos written down.

pitch-document

src/components/pitch-document.tsx

P-5ShapedBig batch6w

Appetite

6weeks

Six weeks. A port with four harbours is our largest account shape and the workaround is now a spreadsheet somebody maintains by hand. Two weeks would buy a shared login and nothing else, which is the half that does not solve the invoice.

Falmouth Port runs four harbours through us. Every one of them is a separate workspace with its own login, its own threshold list and its own invoice. Their operations manager keeps a spreadsheet mapping which login sees which harbour, and last month a threshold change went into the wrong one.

Ines KaurShaped by Ines Kaur, 2 days ago

Solution

Three places, drawn as a breadboard. Enough to argue about, not enough to be a design.

  1. 1

    Organisation switcher

    One account holds many harbours. The switcher sits where the harbour name is today, so nothing else on the page moves.

  2. 2

    Shared threshold sets

    A set belongs to the organisation and a harbour opts into it. A harbour that opts out keeps its own list, unchanged.

  3. 3

    One invoice, itemised by harbour

    Billing moves to the organisation. The invoice keeps a line per harbour so the port can still recharge internally.

Places connect in order. Nothing here fixes a layout.

Rabbit holes

Named so nobody falls in

  • Per-harbour permissions. One role per person per organisation, and that is the whole model this cycle.

  • Migrating the three ports that already have separate accounts. We build the shape first and move them in cooldown.

  • Threshold set versioning. If a set changes, harbours get the change. No history, no rollback.

No-gos

Out of scope on purpose

  • No single sign-on. It comes up in every enterprise conversation and it is not this bet.

  • No harbour-level billing addresses. One address per organisation.

  • No transfer of an existing harbour between organisations.

Why it matters

A no-go is a promise. It is what keeps the appetite honest when week four gets hard.

pitch-decision

src/components/pitch-decision.tsx

Decision for C-25

10 of 12 team-weeks are already bet

This pitch wants 6 weeks and only 2 are uncommitted. Something already on the table has to come off first.

Circuit breaker

A bet that will not fit gets broken and the pitch returns here. Nothing rolls over automatically.

betting-table

src/components/betting-table.tsx

C-25 capacity

10 of 12team-weeks committed

2 uncommitted. Two teams, six weeks each, opening 28 Sep 2026.

Betting table for C-25, 7 shaped pitches in priority order
OrderPitchAppetitePriorityShaped byDecision
Harbour digest, second pass

Harbour masters read the digest on a phone at 05:00 and cannot reorder it.

Big batch6wHighAna VestergaardAna Vestergaard
Sensor health board

Nobody notices a station has gone quiet until a forecast is already wrong.

Small batch2wMediumMei LindqvistMei Lindqvist
Public tide widget

Harbour websites embed a screenshot of our table and it goes stale.

Big batch6wLowRafi OseiRafi Osei
Admiralty feed import

Two harbours send us a weekly CSV that someone pastes in by hand.

Small batch2wHighTom ReddawayTom Reddaway
Multi-harbour accounts

A port authority running four harbours keeps four separate logins and four separate bills.

Big batch6wHighInes KaurInes Kaur
Alert acknowledgement

An alert goes out and nobody can tell whether a person saw it.

Small batch2wMediumAna VestergaardAna Vestergaard
Historical replay

After a flood, the harbour asks what we predicted and we rebuild it by hand.

Big batch6wLowInes KaurInes Kaur

Rows are in priority order. Reorder with the arrows or by dragging.

Decision log

4 decisions recorded for C-25

  1. BetHarbour digest, second pass17 Aug 2026

    Six weeks for Chart. The digest is what the renewal conversation is about.

    Ines Kaur

  2. BetAdmiralty feed import17 Aug 2026

    Two weeks. Removes the paste-by-hand step for two harbours.

    Ines Kaur

  3. BetAlert acknowledgement18 Aug 2026

    Two weeks. Support asks for this every week.

    Ines Kaur

  4. PassedHistorical replay18 Aug 2026

    Shaped well, but nothing forces it this cycle.

    Ana Vestergaard

Why it is written down

Six weeks later the only honest answer to “why did we build this” is the sentence someone wrote at the table.

hill-ridge

src/components/cycle-hill.tsx

Cycle 24 hill

5 of 11scopes past the crest

2 still uphill, 4 not started, with 18 working days left.

The left side is figuring the work out. The right side is doing it. A marker that stops moving is the signal, not a percentage.

Figuring it outMaking it happenCrestS-1S-2S-3S-4S-5S-6S-7
Not started, so not on the hill: S-8, S-9, S-10, S-11.The hill runs from figuring work out on the left to making it happen on the right. A marker past the crest means the unknowns are behind that scope. Position is not a completion percentage; the table below carries every exact value.

appetite-burn

src/components/appetite-burn.tsx

Appetite spent

Team-weeks, week 3 of 6, Europe/London

4.4 of 12 team-weeks are spent. 2 of 4 bets have started; the other two begin in weeks five and six and sit at zero rather than missing. A six-week bet burning past the dashed line is behind its own appetite.

Share of each bet's appetite that is spent. The track is the whole appetite; the dashed line is how much of the cycle has elapsed.
BetTeamAppetiteSpentLeftBurn
B-1 Surge alert digestChart6w2.4w3.6w40%
B-2 Sensor gap backfillAlerts2w2w0w100%
B-3 Berth planner rewriteAlerts2w0w2w0%
B-4 Tide table exportAlerts2w0w2w0%

A bar that fills before its scopes are past the crest is the circuit breaker warning up.

circuit-breaker

src/components/circuit-breaker.tsx

Circuit breaker

1 of 2 running bets carry an unresolved unknown

  • B-1Surge alert digestAt risk

    2.4 of 6 weeks spent, 2 scopes still uphill.

    • S-3 Harbour subscription list. Still deciding how a harbour inherits a region's thresholds.
    • S-4 Delivery and retries. Nobody has tried the provider's bounce webhook yet.

Stalled scopes

Harbour subscription list has not moved for more than five working days.

scope-ledger

src/components/cycle-hill.tsx

Scopes

11 scopes across four bets, 27 of 43 tasks closed

Every scope in cycle 24 with its hill position, owner and task count. Hill position is not a completion percentage.
ScopeBetHillPositionTasksOwnerLast moved
Threshold editor

Editing rules landed; only the empty state is left.

Surge alert digestThreshold editor sits at 88 on the hill, past the crest.887/8Rafi Osei1d ago
Digest composer

Template assembly is settled. Rendering is now plain work.

Surge alert digestDigest composer sits at 62 on the hill, past the crest.626/9Mei LindqvistToday
Harbour subscription list

Still deciding how a harbour inherits a region's thresholds.

Surge alert digestHarbour subscription list sits at 41 on the hill, before the crest.412/6Jonas Wilk6d ago
Delivery and retries

Nobody has tried the provider's bounce webhook yet.

Surge alert digestDelivery and retries sits at 12 on the hill, before the crest.121/5Mei Lindqvist2d ago
Gap detection

Shipped to the Falmouth station on Thursday.

Sensor gap backfillGap detection has shipped.Shipped5/5Tom Reddaway4d ago
Backfill job

Interpolation window agreed with the forecasting team.

Sensor gap backfillBackfill job sits at 74 on the hill, past the crest.744/6Nell Okonjo1d ago
Audit trail

Just over the crest. The reader view is the remaining question.

Sensor gap backfillAudit trail sits at 55 on the hill, past the crest.552/4Priya Raman3d ago
Berth grid

Starts in week 5.

Berth planner rewriteBerth grid has not started.none yetPriya RamanNot started
Conflict rules

Starts in week 5.

Berth planner rewriteConflict rules has not started.none yetTom ReddawayNot started
CSV and PDF writer

Starts in week 6.

Tide table exportCSV and PDF writer has not started.none yetNell OkonjoNot started
Scheduled delivery

Starts in week 6.

Tide table exportScheduled delivery has not started.none yetTom ReddawayNot started

Furthest along: Gap detection. Shipped. Week 3 of 6.

scope-hill

src/components/scope-detail.tsx

S-2 hill position

62past the crest

Digest composer, part of Surge alert digest. Position says how much is still unknown, not how much is done.

Unmoved this session
Figuring it outMaking it happen62
Position 62

Drag the marker, or focus the control and use the arrow keys. Shift moves ten at a time.

scope-tasks

src/components/scope-detail.tsx

Tasks

6 of 9 closed. Tasks track work, the hill tracks unknowns.

  • Mei Lindqvist
  • Rafi Osei
  • Mei Lindqvist
  • Mei Lindqvist
  • Mei Lindqvist
  • Rafi Osei
  • Mei Lindqvist
  • Mei Lindqvist
  • Rafi Osei

6 of 9 closed. Closing every task does not move the hill by itself.

scope-history

src/components/scope-detail.tsx

Hill history

7 moves since 4 Aug 2026

  1. Mei Lindqvist

    58 to 62+418 Aug 2026

    Rendering is now known work.

    Mei Lindqvist

  2. Mei Lindqvist

    51 to 58+717 Aug 2026

    Plain-text fallback wired in.

    Mei Lindqvist

  3. Mei Lindqvist

    38 to 51+1313 Aug 2026

    Over the crest. Assembly is understood end to end.

    Mei Lindqvist

  4. Rafi Osei

    20 to 38+1812 Aug 2026

    Ordering moved to the threshold set. That removed the hard part.

    Rafi Osei

  5. Mei Lindqvist

    22 to 20-210 Aug 2026

    Went backwards. Sections cannot be ordered per harbour after all.

    Mei Lindqvist

  6. Mei Lindqvist

    8 to 22+146 Aug 2026

    Three template shapes tried; two thrown away.

    Mei Lindqvist

  7. Mei Lindqvist

    0 to 8+84 Aug 2026

    Started on the template model.

    Mei Lindqvist

Going backwards

On 10 August this scope moved from 22 to 20. A hill that only ever rises is a hill nobody is telling the truth on.

cycle-settings

src/components/settings-console.tsx

Tidemark workspace

9people on the Team plan

£126 a month at £14 per person. Times in Europe/London.

Team plan
Cycle shape

Cycle shape

Changing these takes effect from the next cycle, never the running one.

Six weeks is long enough to finish something and short enough to be worth betting.

No bets run during cooldown. It is where the next pitches get shaped.

C-24 closes on 11 Sep 2026.

Read only while a cycle is running.

What the team hears about

What the team hears about

Two notifications, both off by default for observers.

The honest signal. Someone found an unknown they did not expect.
The stall rule this workspace uses to flag a bet.
Off on purpose. Task counts are not the reading.

Nothing here writes to a backend yet.

team-settings

src/components/settings-console.tsx

People

9 seats at £14 each, £126 a month

Workspace roster: 9 people, their craft, cycle team and access.
PersonCraft and C-24 teamAccessSeat
Ines KaurInes KaurProductno team
Ana VestergaardAna VestergaardProductno team
Rafi OseiRafi OseiDesignchart
Mei LindqvistMei LindqvistEngineeringchart
Jonas WilkJonas WilkEngineeringchart
Priya RamanPriya RamanDesignalerts
Tom ReddawayTom ReddawayEngineeringalerts
Nell OkonjoNell OkonjoEngineeringalerts
Douglas FrameDouglas FrameSupportno team

Billing

9 seats × £14 = £126 a month. Removing a seat takes effect on the next invoice.