All projects

in-progress / case study

Roam

A shared trip planner for decisions, itineraries, packing, expenses, and the messy middle of planning together.

Status
in progress
Surface
Preview
Latest proof
2026-07-05

Why this project matters

A shared trip planner for decisions, itineraries, packing, expenses, and the messy middle of planning together.

A public record of what the project is, why it exists, and what tradeoffs shaped it.

Field notes / Roam

What it is

Roam is a self-hosted group trip planner. The center of the product is a shared trip workspace: a crew joins one group, builds one itinerary, tracks money and packing, checks maps and weather, and sees activity updates as the plan changes.

The visual direction is intentionally more travel journal than SaaS dashboard: stamp cards, ticket-stub days, map pins, warm editorial typography, and a planning surface that feels like part of the trip instead of a spreadsheet wearing nicer shoes.

Why I built it

Group travel planning usually ends up split across chat, spreadsheets, pinned messages, map links, and payment reminders. The problem is not that any one tool is terrible. The problem is that none of them owns the trip.

Roam is the attempt to make one workspace feel good enough that the group actually uses it.

What it does now

  • Groups and invites — create a planning crew and invite friends with redeemable codes.
  • Trip workspace — trips carry city, country, dates, itinerary days, items, votes, expenses, packing, weather, currency, and activity.
  • Itinerary builder — add days and places, geocode locations, save map coordinates, reorder cards, lock plans, add notes, and vote.
  • Map, weather, and FX panels — map pins, forecast helpers, and currency conversion sit inside the same workspace.
  • Live activity — changes are persisted and streamed so another session can see the trip evolve.
  • Demo account — local development seeds a reviewable sample trip so the app can be tested without setup theater.

What I learned

  • Travel planning wants texture, but not clutter. The editorial skin helps Roam feel distinct, yet the itinerary and expense controls still have to behave like real product UI.
  • A map is part of the workflow, not decoration. Saved coordinates, geocoding states, and map pins need to line up with itinerary cards or the feature becomes a postcard.
  • Light paper can be too bright. The next visual direction keeps the travel-journal warmth but moves toward a darker, calmer reading surface.

Status & next steps

Roam shipped. v0.6 is live at roamapp.jhinx.dev — group-level decisions, candidates as draft trips, availability, votes and ranks, free-only flight links, and a winner that graduates into the real trip. The dark editorial visual direction landed with it.

The static preview at roam.jhinx.dev is the visual preview; roamapp.jhinx.dev is the running app. Remaining work is iteration: visible web-push notification proof is blocked until the VAPID public key is configured, then day-level reorder, richer member-setting refresh, and a longer look at the production auth story.