Case study · Web apps · 1 min read
Roam
A trip-planning and booking interface: browse destinations, build an itinerary, watch the cost add up and walk through checkout.
- Role
- Front-end build
- Type
- Web apps
- Stack
- Next.js 16, React 19, TypeScript, Tailwind

- 4main screens in the flow
- 0API routes, so it exports as static HTML
- Next.js 16with React 19 and TypeScript
- Liveon GitHub Pages
01
Problem
Roam is a front-end prototype of a travel planning site. Every page and component is built and interactive, and it's live on GitHub Pages.
Planning a trip usually means juggling destination research, a rough itinerary and a running budget across several tabs. Roam explores what it looks like to keep all three in one place before you book.
02
What I did
- Destination browsing with search and filters for budget, season and activity.
- A trip planner with an itinerary builder, a cost calculator and an "expert review" panel.
- A booking flow with review, payment and confirmation screens, plus a user dashboard, auth screens, content pages, and light and dark themes.
Decisions along the way
- Static export
- There are no API routes, so the whole site is exported as static HTML and deployed to GitHub Pages by GitHub Actions. That makes it free to host and easy to share.
- Off-the-shelf accessible components
- UI is built on Radix UI primitives via shadcn/ui, with React Hook Form and Zod for form validation, rather than hand-rolling dialogs and inputs.
- Clean up credentials properly
- An earlier local copy had live API credentials in an env file the old .gitignore didn't exclude. It was never pushed, and .gitignore now excludes every .env file except the example.
Stack
- Framework
- Next.js 16 (App Router, static export), React 19, TypeScript
- Styling
- Tailwind CSS 4, tailwindcss-animate
- Components
- Radix UI, shadcn/ui
- Forms and charts
- React Hook Form, Zod, Recharts
- Hosting
- GitHub Pages via GitHub Actions
03
What I found
- Building the whole flow as a clickable prototype first shows which back-end pieces actually matter.
- Static export forces you to be honest about what's real and what's mocked.
More screens

The trip planner.
04
What I'd do next
- Connect flight search, payments and accounts to a real back end.
- Replace the placeholder images and sample data.
05
Limitations
- Front-end prototype. Flight search, payments and accounts aren't connected to a back end.
- All data is hard-coded sample data and nothing is saved. Login, signup and payment forms don't submit anywhere.
- Images are placeholders.