TravelTogether is a Next.js + Supabase app for collaborative travel planning.
AGENTS.md- starting point for AI coding agentsdocs/PRODUCT_CONTEXT.md- product goals, user journeys, limitationsdocs/ARCHITECTURE.md- codebase structure, data model, auth and implementation notesdocs/PRODUCT_BACKLOG.md- prioritized product roadmap and acceptance criteriadocs/ENGINEERING_BACKLOG.md- implementation and infrastructure backlog
- Email/password sign up and login with Supabase Auth
- Auth-protected dashboard with shared/private trip access
- Create itineraries with:
- destination
- themed image URL or uploaded image (Supabase Storage bucket
trip-images) - trip length (days)
- private/public visibility
- Private trips shared by invite email
- Public trips viewable by link (
/public/[slug]) - Embedded Google Maps with nearby points of interest and itinerary place search
- Flexible timeline:
- day-by-day structure
- add extra days
- event types (
stay,museum,travel,food,activity,custom) - event-type custom fields (stored as JSON metadata)
- full vs condensed trip length views
- Portable calendar export for date-range trips:
- downloads the full timeline as an
.icsfile - supports timed and all-day events, locations, notes, and booking links
- uses the portable iCalendar format supported by Google Calendar, Apple Calendar, Outlook, and other calendar apps
- excludes confirmation codes and ticket references
- downloads the full timeline as an
- Next.js App Router (TypeScript)
- Supabase Auth, Postgres (RLS), Storage
- Tailwind CSS
- React Leaflet
- Install Node.js 20+
- Install dependencies:
npm install
- Copy env vars:
cp .env.example .env.local
- Fill in Supabase values in
.env.local - Run the Supabase migrations in filename order:
supabase/migrations/001_init_triptogether.sqlsupabase/migrations/002_itinerary_planning_and_editing.sql
- Start dev server:
npm run dev
- This means your app is connected to Supabase Auth, but your database schema migration has not been applied in that project yet.
- In Supabase Dashboard, open SQL Editor and run:
supabase/migrations/001_init_triptogether.sql
- Refresh the app after it finishes.
- To verify setup, run this query in SQL Editor:
select table_name from information_schema.tables where table_schema = 'public' and table_name in ( 'profiles', 'itineraries', 'itinerary_members', 'itinerary_invites', 'trip_days', 'itinerary_events', 'itinerary_markers' ) order by table_name;
- If you do not set Supabase env vars, the app now runs in scaffold mode.
- You can browse the frontend (
/,/dashboard,/trips/new,/trips/[id],/public/[slug]) with mock content. - Auth and persistence actions are intentionally disabled until Supabase is configured.
- Ensure Email auth provider is enabled.
- Storage bucket
trip-imagesis created by the migration. - RLS policies are included for all core tables.
- Direct Google Calendar connection and automatic event updates
- Public-page and individual-event calendar exports
- Explicit trip timezone and overnight/multi-timezone event modeling
- Subscribe-to-calendar feeds with automatic updates
- Photo uploads with per-user/per-trip limits and moderation workflow
- Better real-time collaboration and change history
- Push repo to GitHub.
- Import project in Vercel.
- Set environment variables:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYNEXT_PUBLIC_SITE_URL(your Vercel domain)
- Deploy.
- In Supabase Auth settings, add your Vercel URL to redirect URLs.
Before finishing a change, run:
npm run typecheck
npm run buildThe repository does not currently have an automated test suite. The calendar export implementation was verified with both commands above.