Features
One Tool for Every Leg of the Journey
Day-by-day itineraries, reservations, places on a map, shared multi-currency expenses, packing and prep checklists, real-time collaboration, and a post-trip journal — all in one app. Nomad auto-imports booking confirmations from Courier, pushes your itinerary to Cadence, generates packing lists via Packed, files prep to-dos into Slate, exports reimbursable expenses to Trellis and Meridian, resolves travel companions from Tribe, and publishes travelogues through Narrative. Circuit-breaker isolation means a downed fleet service degrades exactly one feature — never the whole trip.
Itineraries
Day-by-Day Plans, Down to the Hour
Day-by-Day Itinerary Builder
Organize every trip into dated days. Drag reservations, activities, and free-form notes into any day slot. Reorder with a handle. Each day shows a running timeline so you can see exactly how packed the schedule is before you land.
Reservation Types
Structured support for flights, lodging, restaurants, activities, rail, rental cars, and ferries. Every type captures the fields that matter — confirmation number, provider, check-in / check-out, terminal, seat, cancellation policy — with no generic “event” catch-all.
Trip Templates
Save any trip as a reusable template — skeleton itinerary, checklists, and linked services intact. Instantiate a template for a recurring destination (quarterly offsite, annual family trip) and the structure is ready before you open a browser tab.
Trip Search & Filters
Full-text search across trip names, destinations, reservation confirmation numbers, and notes. Filter by status (planning / active / completed / cancelled) and date range. Find last year’s hotel confirmation in two keystrokes.
Public Share Links
Generate a read-only public share link for any trip. Share an itinerary with family who aren’t on the fleet, or attach it to a travel approval request. Read-only — no write access leaked, no Renkara account required to view.
Reservations & Places
Every Booking, Every Pin, One Map
Courier Email Import
Nomad scans your Courier mailbox for booking confirmations — flights, hotel, restaurant, activity — and parses them into structured reservation drafts. Parsed reservations land in a human-in-the-loop review queue (
email_import_jobs), never auto-committed. Deduplicated by(provider, confirmation_number)so forwarding a confirmation twice creates one reservation.Document & Attachment Storage
Attach PDFs, photos, visa copies, and insurance cards to any trip or reservation. Files go to S3 (
nomad-renkara-attachments) with KMS encryption and lifecycle rules. Per-trip quotas enforced server-side. Archived trips get a grace period before GC runs.Places & Map Pins
Pin any place — restaurants to try, scenic stops, hotel addresses — to the trip map. Geocoding resolves addresses to coordinates; results are Valkey-cached so repeated lookups are free. Map tiles via MapLibre GL over open-source tile infrastructure — no vendor lock.
Trip Journal
Write daily journal entries during or after the trip, attach photos, and keep notes per day. Publish as a post-trip travelogue via Narrative with one click. Journal entries are private by default; publishing is explicit and per-trip.
Comments & Annotations
Comment on any item in the itinerary — reservations, places, journal entries, checklist items. Threaded comments notify collaborators in real time over the WebSocket. Useful for “can we move dinner an hour earlier?” threads that belong next to the reservation, not in a side chat.
Expenses
Multi-Currency, Shared, Settled
Multi-Currency Expense Tracking
Log expenses in any currency. Live exchange rates are fetched on a schedule and cached in Valkey (prefix
nomad:fx:) so you always see home-currency equivalents without a network round-trip. Per-trip currency summary shows total spend by category, person, and currency.Shared Expenses & Settle-Up
Mark any expense as shared across some or all trip members. Nomad computes the minimum-transaction settle-up graph and shows each person exactly what they owe whom at the end of the trip. No more spreadsheets.
Expense Categories
Categorize expenses: transport, lodging, food, activities, shopping, misc. Per-category breakdowns on the expense summary page let you see where the trip budget actually went.
Trellis & Meridian Export
Export any trip’s expenses directly to Trellis (accounting) or Meridian (time-and-expense billing) for reimbursable or billable travel. The export maps expense categories to the appropriate chart-of-accounts codes. One button turns a vacation tab into a reconciled expense report.
Checklists & Prep
Packed and Ready Before You Leave
Packing Lists via Packed
Generate a packing list tailored to the trip’s destination, climate, duration, and activity types by calling Packed. The generated list is editable in Nomad — check items off as you pack, add custom items, remove suggestions that don’t apply. The list syncs back to Packed if you want it in your master packing library.
Pre-Departure Tasks via Slate
Create prep to-dos directly inside Nomad (get travel insurance, arrange pet care, notify the bank, download offline maps) and mirror them into Slate, your daily task tracker. Pre-departure tasks show up alongside your regular work so they don’t fall off the radar two days before departure.
Custom Checklists
Beyond packing and prep, attach arbitrary checklists to any trip — “things to buy at the airport,” “restaurants to try,” “must-see spots.” Checklists are shared with all trip members and show completion in real time.
Collaboration & Fleet
Real-Time, Role-Based, Fleet-Wide
Real-Time Collaboration
Every trip has a WebSocket channel. When any collaborator adds a reservation, updates the itinerary, or logs an expense, every other member sees the change immediately — no refresh, no polling. Presence indicators show who’s looking at the trip right now.
Role-Based Access
Trip members are
owner,editor, orviewer. Non-members get a 404 (no existence leak). Editors can modify itinerary and expenses; viewers get read-only. Role enforcement is centralized inrequire_trip_role(min_role)at the API layer — no scattered client-side guards.Tribe Companion Resolution
Resolve travel companions from Tribe when adding members to a trip. Nomad logs a “traveled together” interaction back to Tribe so your contact relationship history reflects the trip automatically.
Cadence Calendar Push
Sync the full trip itinerary to Cadence as calendar events — one event per day with all reservations as sub-items. Pull per-day weather forecasts from Cadence so you can see Tuesday’s forecast right next to Tuesday’s activities while planning.
Narrative Journal Publish
When the trip is over, publish the journal as a formatted travelogue to Narrative. Photos, day entries, and places all render as a shareable post. The journal stays private in Nomad until you explicitly publish — one opt-in action, not automatic.
Reminder Notifications
Nomad schedules check-in, departure, and reservation reminders via notification-service. Reminders run as EventBridge + Lambda automations — no in-process scheduler. You get a push notification 24 hours before your flight, not a missed email.
MCP Tool Surface
Nomad exposes all core operations as MCP tools via FastMCP at
/mcp(Streamable HTTP) plus a stdio bridge inmcp-server/server.pyfor direct Claude Code registration. AI agents can read trip itineraries, create reservations, log expenses, and trigger fleet sync — same auth and role checks as the REST API.
Accessibility
Built for Everyone
WCAG 2.1 AA Compliance
4.5:1 contrast for body text, 3:1 for large text and UI components, in both light and dark themes.
Keyboard Navigation
Every interaction reachable via keyboard. Logical tab order, visible focus indicators, Escape-to-dismiss for modals.
Screen Reader Support
VoiceOver, NVDA, and JAWS tested. Semantic HTML, ARIA labels, live regions for dynamic updates.
Reduced Motion
Respects
prefers-reduced-motion. Usable at 200% zoom. Touch targets meet 44x44 minimum.
How It Works
From Confirmation Email to Travelogue
Step 1: Import
Nomad scans your Courier inbox for booking confirmations and parses them into structured reservation drafts. Review the queue, approve what looks right, and the flight or hotel appears on the correct day of your itinerary automatically.
Step 2: Plan
Build out the day-by-day schedule — drag reservations into day slots, pin places to the map, add packing items via Packed, create prep tasks that mirror into Slate, and invite collaborators who see every change in real time.
Step 3: Travel
Departure reminders fire via notification-service. Cadence shows your itinerary alongside the weather forecast. Log expenses in whatever currency you’re spending in — live FX rates convert everything home. Check off packing items as you go.
Step 4: Wrap Up
The settle-up graph shows who owes whom. Export expenses to Trellis or Meridian for reimbursement. Publish the journal to Narrative as a travelogue. Save the trip as a template for next time.
Technical Specifications
Under the Hood
Backend
- FastAPI 0.115+ (Python 3.12+)
- SQLAlchemy 2.0 async + asyncpg
- Pydantic 2.5+
- PostgreSQL (shared RDS, dedicated
nomaddatabase) - Valkey cache + pub/sub (prefix
nomad:) - S3 object storage for documents and journal photos (KMS-encrypted)
- FastMCP at
/mcp— Streamable HTTP + stdio bridge - 96% test coverage, 128 backend tests (Phases 1–9)
Frontend
- React 19 + TypeScript (strict) + Vite 8
- @avian/design-system tokens, components, and Tailwind preset
- @avian/auth-react 0.1.4 (OIDC via auth.renkara.com)
- MapLibre GL for open-source map tiles
- PWA-capable (offline cache + replay via Service Worker)
- Light and dark mode
Fleet Integration
- Courier — booking email import with human-in-the-loop review queue
- Cadence — itinerary calendar push + per-day weather pull
- Packed — climate- and activity-tailored packing list generation
- Slate — pre-departure task mirroring
- Trellis / Meridian — expense export for reimbursable travel
- Tribe — companion resolution + “traveled together” interaction logging
- Narrative — post-trip journal publishing
- notification-service — check-in, departure, and reservation reminders
- Circuit-breaker isolation: one downed tool degrades one feature, never the app
Automations & Infrastructure
- All workers run as EventBridge + Lambda (
automation-nomad-*) - Automations: reminders, trip status transitions, currency refresh, email scan, document GC
- API domain:
nomad-api.renkara.com - Frontend domain:
nomad.renkara.com - RS256 JWT auth from
auth.renkara.com - Role enforcement: owner / editor / viewer, 404 on non-member access (no existence leak)
- All workers run as EventBridge + Lambda (
Real-Time Fabric
- Per-trip WebSocket channels via Valkey pub/sub
- Live presence indicators for active collaborators
- Instant propagation of itinerary, expense, checklist, and comment changes
- Valkey-cached FX rates, geocode results, and fleet-link status
- Chronicle observability: structlog + Prometheus
/metrics+ OTel traces
Development
100% Built by Claude
Every tool in the Renkara fleet was built by Claude (Anthropic) working alongside a single human supervisor. Every line of code, every test, every deployment: AI-authored with human direction. The leverage factor across the fleet runs in the 20x–50x range, with individual sessions regularly exceeding 100x.
See the daily leverage records for per-task numbers across the full build history.