Projects

in-progress / case study

Roam

A group-native trip planner for shared itineraries, expenses, packing, maps, weather, and the messy middle of planning together.

Statusin-progress
SurfacePreview
Updated2026-06-02
OutcomeA group-native trip planner for shared itineraries, expenses, packing, maps, weather, and the messy middle of planning together.

Stack and decisions

FastAPI

Part of Roam's current operating boundary.

SvelteKit

Part of Roam's current operating boundary.

SQLite

Part of Roam's current operating boundary.

Nominatim

Part of Roam's current operating boundary.

Open-Meteo

Part of Roam's current operating boundary.

Timeline

Started 2026-05-21

Updated 2026-06-02

Surface Preview

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

What I learned

Status & next steps

Roam shipped. v0.5 "Decide Together" 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: day-level reorder, richer member-setting refresh, and a longer look at the production auth story.