Fig. 5 / 6

Dodo

Fifteen days on Mauritius, planned from tonight’s bed.

A two-person trip companion for one Mauritius holiday. Every plan, forecast and suggestion is relative to the hotel the couple sleeps at that night.

  • 15 days on three coasts of Mauritius
  • 2 Open-Meteo feeds, forecast and marine, behind every lagoon call
  • 240 test files, plus a phone-viewport end-to-end path on every pull request

Figures read from the repositories on 24 Oct 2026.

Platform
Web app · PWA
Status
In active build · in use by the couple
For
One couple, one trip
Year
2026
Role
Product and design direction. Built with Claude Code agents.
Stack
Next.js 15, React 19, TypeScript, Tailwind CSS v4, Motion, PostgreSQL 17 + Drizzle, Claude API, Docker on Coolify
Typeface
Archivo
Commits
745 · 693 co-authored by agents · read 24 Oct 2026
See it
Private print. Built for two.
Colour bar sampled from the film: #f6e7cd, #f5a52d, #eb7d5f, #e16991, #2d190f.

The film · 1:13

On dark brown, a large daylight bar with a pink now-marker and one dashed box, headed A first guess.

Full film withheld: it is being re-cut to remove private names, dates and places.

Chapters

  1. 0:00 Dodo, fifteen days for two
  2. 0:05 Three coasts
  3. 0:09 The trip clock
  4. 0:18 Everything relative to tonight’s bed
  5. 0:32 The unfold and marking done
  6. 0:46 The Scout and two phones
  7. 1:04 The recap
Shot list: every frame, described
Frame Time Shot On screen
Frame 01 0:00 A brown dodo head with a pink offset shadow beside the word Dodo, its last letter still sliding into place. Withheld: shows private travel dates. Dodo
Frame 02 0:02 Dodo wordmark with the dodo head on cream, a hairline and a one-line tagline beneath, registration marks in the corners. Withheld: shows private travel dates. Fifteen days on Mauritius, for two.
Frame 03 0:04 A ruled list of the fifteen trip dates, banded in four colours, beside a huge brown 15 and the word days. Withheld: shows private travel dates. 15 days
Frame 04 0:06 Three horizontal colour bands, yellow, pink and coral, name the east, north and west coasts beside a large 3. Withheld: shows where the travellers stay. 3 coasts
Frame 05 0:08 Two empty daylight bars with dashed boxes, one per traveller, on yellow beside a large 2 and the words of us. Withheld: shows a private name. 2 of us
Frame 06 0:10 A flight arc from GVA to MRU with a plane icon and a trip clock whose digits blur as they roll. Withheld: shows private travel dates. The trip clock
Frame 07 0:12 The same flight arc at rest, a large clock beneath it and a departure time at each end of the arc. Withheld: shows private travel dates. Island time: UTC+4, whatever the phone says.
Frame 08 0:14 A thin brown line begins to trace the outline of Mauritius on a tan ground.
Frame 09 0:16 The island of Mauritius in cream, its coast washed pink in the north, yellow in the east and coral in the west.
Frame 10 0:18 The island map with three bed icons marking the three bases, on the north, east and west coasts. Withheld: shows where the travellers stay.
Frame 11 0:20 The island map gains road lines, dashed distance rings and labelled stops, as a headline starts to appear at right. Withheld: shows where the travellers stay. Everything relative to tonight's bed.
Frame 12 0:22 The island map with roads and drive-time labels from the northern base, beside a large headline on tonight's bed. Withheld: shows where the travellers stay. Everything relative to tonight's bed.
Frame 13 0:24 A framed photo of giant green water lilies among palms, titled Giant water lilies at Pamplemousses. Withheld: shows where the travellers stay. Giant water lilies at Pamplemousses
Frame 14 0:26 A framed aerial photo of a white sand spit and turquoise lagoon, titled Golf day on Ile aux Cerfs. Withheld: shows where the travellers stay. Golf day on Île aux Cerfs
Frame 15 0:28 A framed photo of red and ochre dunes under a deep blue sky, titled Chamarel’s coloured earth. Withheld: shows where the travellers stay. Chamarel's coloured earth
Frame 16 0:30 A framed photo of a green rock massif above forest, titled Le Morne, the south-west point. Withheld: shows where the travellers stay. Le Morne, the south-west point
Frame 17 0:32 A phone screen streaks with motion blur: two small buttons, a dark Save idea bar and a turquoise lagoon photo. Withheld: shows a private name.
Frame 18 0:34 A phone shows one day of the trip in yellow; a ringed callout on the lagoon status reads Rough today, drawn as waves. Withheld: shows where the travellers stay. The lagoon call
Frame 19 0:36 The same phone with a second ring on the daylight bar: sunrise to sunset, each plan boxed in ink. Withheld: shows where the travellers stay. The daylight bar
Frame 20 0:38 A phone shows a sunrise over wavy sea above the list of days, beside the headline The unfold. Withheld: shows where the travellers stay. The unfold
Frame 21 0:40 The phone's day list slides open on a pink day panel, with the spring curve plotted beside the headline The unfold. Withheld: shows where the travellers stay. The unfold
Frame 22 0:42 A close-up of a yellow day screen listing two plans with empty checkboxes, beside the word Done. Withheld: shows where the travellers stay. Done.
Frame 23 0:44 The same close-up with the first plan ticked and struck through, and a Marked Blue Bay done toast with Undo. Withheld: shows where the travellers stay. Done.
Frame 24 0:46 A phone on the Ideas tab shows coast and kind filters and a list of places, beside the headline The Scout. Withheld: shows where the travellers stay. The Scout
Frame 25 0:48 A bottom sheet, Ask the Scout, lists a snorkelling spot with a photo and reasons, over the Ideas screen. Withheld: shows where the travellers stay. The Scout
Frame 26 0:50 Two phones side by side show the same yellow day screen, each with a traveller label above, one box being ticked. Withheld: shows a private name. Two phones, one trip: one marks, the other sees.
Frame 27 0:52 The two phones now show the same plan ticked and struck through, with a toast on each screen. Withheld: shows a private name. Two phones, one trip: one marks, the other sees.
Frame 28 0:54 The two phones again, now on a dark night cloth, the day screens unchanged but the page turned brown. Withheld: shows a private name. Night: the cloth changes at once.
Frame 29 0:56 On dark brown, a large daylight bar with a pink now-marker and one dashed box, headed A first guess. A first guess
Frame 30 0:58 The daylight bar on dark brown with one box filled yellow and struck through, headed Done. Done
Frame 31 1:00 The daylight bar on dark brown with two overlapping plans hatched, headed Overlap. Overlap
Frame 32 1:02 A flat coral sunset over cream water with a palm silhouette, captioned West coast, the sunset side. West coast · The sunset side
Frame 33 1:04 A day-by-day list is mid-fill, yellow and pink stripes growing, beside a phone listing the same days, titled The recap. Withheld: shows private travel dates. The recap
Frame 34 1:06 A full-width list of 15 days filled in yellow, pink and coral by coast, beside a phone showing the same recap. Withheld: shows private travel dates. The recap
Frame 35 1:08 Only the brown dodo head with its pink shadow, off-centre on a pale cream ground, the wordmark yet to arrive.
Frame 36 1:10 The closing card: Dodo wordmark, a tagline, a motion reel credit and a line of photo credits at the foot. Withheld: shows private travel dates. A trip companion for two, built end to end with Claude Code.
Frame 37 1:12 The closing card, settled: Dodo wordmark, tagline, motion reel credit and photo credits on cream. Withheld: shows private travel dates. A trip companion for two, built end to end with Claude Code.

The sheet · 37 frames, one every 2 s

The problem

A holiday spread over three hotels on three coasts, one small rental car and a flight pair does not fit a generic travel planner. Most of the useful questions depend on where the couple sleeps that night: how far is this beach, will the lagoon be calm, is there time before sunset.

On the trip the app is used outdoors, in bright sun, sometimes with patchy mobile data. Decisions need to take seconds.

The product

Dodo plans one fifteen-day trip for a household of two. Today opens on the day in progress, shown as a folded pareo: the open day is wide and dyed by its coast, the other fourteen sit folded beside it.

Each day of the trip takes plans on a sunrise-to-sunset bar and shows its weather, hourly temperature, rain and wind, and a lagoon call of calm, choppy or rough once the sea forecast reaches it. Plans are marked done or skipped, with a rating and a note from each of the two. A golf day lays out two lanes side by side.

Three features call Claude. The Scout suggests places from tonight’s base and the forecast. “Shape this day” proposes an order and times, and the couple add all of it or step through. “Ask Dodo” answers from the trip’s data and tools, and says where the answer came from.

A budget in CHF, EUR and MUR splits costs the Tricount way, and a recap builds the trip as dyed stripes, numbers and a replayed route.

How it’s made

One Next.js 15 application on React 19 and strict TypeScript, one PostgreSQL 17 database through Drizzle, one Docker image deployed from main by Coolify. The container migrates and seeds the trip at start, and a failed migration keeps the previous container serving.

Access is a household passphrase plus a profile picker, so the app is private. The model is claude-sonnet-5-5, called server-side; every API key stays on the server.

The repository began in October 2026 and was live behind the passphrase the next day. Its commits are written largely by Claude Code agents working through numbered issues, with docs/STATUS.md as the shared state they read first.

Details

The visual world is a block-printed market cotton: calico ground, tamarind ink, a small set of flat dyes, printed slightly out of register. The type is Archivo, set wide for display. At night the app wears a darker tamarind cloth, following the phone.

Accessibility is tested rather than assumed: the audit reads zero violations on every screen and state. Every pull request walks the core path on a phone viewport and measures Today’s largest contentful paint.

Status as of 15 Oct 2026: most surfaces are shipped and in use. The recap becomes meaningful only once the trip has happened.

Decisions

  1. Fig. 5.1

    The pareo

    The open day is a full-width field dyed by tonight’s coast: mango east, hibiscus north, brick west. The other days fold as narrow selvedges. One tap unfolds a day on a tuned spring.

  2. Fig. 5.2

    Suggestions with reasons

    The Scout proposes places near tonight’s base on Claude and Google, citing drive time and forecast fit. Stated exclusions are respected, and photos carry their photographer’s credit.

  3. Fig. 5.3

    Works with patchy signal

    Serwist caches the pages last seen; edits made offline wait in an IndexedDB outbox and replay later. A change on one phone reaches the other within seconds over server-sent events.

  4. Fig. 5.4

    Motion with a frequency gate

    High-frequency actions stay near-instant: marking a plan done runs 220 ms, budget totals swap without counting up. Only the day unfold and the recap are authored sequences.

  5. Fig. 5.5

    Island time

    Times follow Indian/Mauritius (UTC+4) whatever the phone says. Hotels, flights and the car are anchors that only the database seed can write, enforced by a trigger.

Production notes

Commits on the default branch, read 24 Oct 2026
Span 7 Oct to 22 Oct 2026, 16 days
Commits 745
Co-authored by Claude Code agents 693
Share 93%
Read on 24 Oct 2026

Credits

Product and final cut
Sven Borden
Built with
Claude Code agents · 693 of 745 commits co‑authored, read 24 Oct 2026
Film
Motion reel by Claude
Printed by
Coolify on a Synology in Vaud

Next print · Fig. 6 / 6

Après-Ski