Inspiration
Planning a multi-city trip usually means juggling five browser tabs: one spreadsheet for dates, another for hotels, a third for flights, and a group chat to keep your partner in sync. Most tools optimize for one booking — a single hotel or a single flight — not a chain of cities with linked check-ins, transfers, and shared context.
I built SplitStay for travelers who hop between cities on one journey (friends, couples, solo backpackers) and need one place to see the whole plan: where they stay, how they move between cities, what's booked, and what's still missing.
What it does
SplitStay is a multi-city trip planner deployed on Vercel:
- Trip wizard — Add legs (city, country, dates); check-out auto-links to the next check-in
- Timeline builder — Gap/overlap detection, leg status chips, next actions
- Hotel booking — Live LiteAPI rates per leg; in-app prebook → book (sandbox); nearby-city fallback when a destination has sparse inventory(monitizable with booking.coms partnership program)
- Transport hub — Flights via LiteAPI between major hubs (e.g. JFK → ORD → LAX); ground transport via outbound links; save confirmation refs on each segment
- Trip overview — Progress, total cost, interactive map (MapLibre + Mapbox)
- Share link — Public read-only itinerary at
/share/[token]for a travel partner
Canonical demo route: US Summer — New York → Chicago → Los Angeles (Aug 1–11, 2026). Trip metadata, legs, transfers, and share tokens persist in Amazon Aurora PostgreSQL. Hotel and flight rates are fetched from LiteAPI at runtime.
How I built it
| Layer | Tech |
|---|---|
| Frontend | Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS v4 |
| Auth | Clerk |
| Database | Amazon Aurora PostgreSQL (Vercel Marketplace) |
| ORM | Drizzle |
| Deploy | Vercel |
| DB auth | Vercel OIDC → AWS IAM → RDS auth tokens (no long-lived AWS keys in the app) |
| Hotels & flights | LiteAPI |
| Maps | MapLibre GL JS + Mapbox (OSM fallback) |
| Geocoding | geocoded.me + Mapbox |
Challenges we ran into
Architecture: Browser → Next.js on Vercel → authenticated API routes → Aurora (trip state) + LiteAPI (live inventory) + Clerk (users). I designed the UI from Stitch mockups, pushed the schema with Drizzle + IAM auth, and connected Aurora through the Vercel Marketplace integration so production uses short-lived OIDC credentials instead of static AWS keys.
Accomplishments that I am proud of
- A working end-to-end flow on a live Vercel URL: sign in → create multi-leg trip → book a hotel → search flights → share itinerary
- Real persistence in Aurora — not mock data — with IAM/OIDC auth wired for serverless
- Live LiteAPI integration for hotel search, prebook, book, and flight rates (not static placeholders)
- Timeline validation that catches gaps and missing hotels/transfers before travel day
- Shareable public itinerary with Open Graph metadata for messaging apps
- Resilient hotel search for edge cases (nearby radius, nearest city, rate-error retry)
- A cohesive UI built from design specs, not a generic template
What I learned
- Marketplace integrations are project-scoped — Aurora env vars from one Vercel project don't transfer to another; Storage must be connected per project.
- Environment variables require a redeploy after changing Vercel settings — updating the dashboard alone isn't enough.
- Serverless + IAM DB auth needs connection pooling discipline (token expiry, max lifetime, pool reset on auth failures).
- Demo data matters — choose cities with real API coverage (US hubs for flights) so judges see live behavior, not error states.
- Multi-leg trips are a different product shape than single-booking travel apps — the data model (legs + transfers + validation) is the core innovation, not just another hotel search box.
What's next for SplitStay
- Stripe / SplitStay checkout — native payment instead of sandbox-only LiteAPI booking
- More transport APIs — deeper train/bus integration (Omio, Gopaxo) beyond outbound links
- Collaborative editing — partner can comment or co-edit, not just view the share link
- Email notifications — booking confirmations, gap warnings, trip reminders
- Mobile app — timeline-first PWA or React Native
- Cost splitting — divide hotel and transfer costs across travel companions
- Pro tier — unlimited legs, priority support, advanced export (PDF/iCal)
- Ai Agent — Agentic capability where users can just talk to the chat agent about their trip and agent recommends hotels/flights/buses/trains. Also Agent can plan everything and do real bookings when given the permission.
Built With
- amazon-marketplace-web-service
- clerk
- drizzle
- geocoded.me
- liteapi
- mapbox
- maplibre
- next.js-15-(app-router)
- react-19
- tailwindcss
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.