How mirsinghh/hackupc2025 works
Midpoint is a group trip-planning web app. Users sign in, create or join a group, submit travel preferences, and view group members’ preferences before requesting AI-generated destination suggestions. Suggested destinations have a results view, while separate endpoints provide flight and car-hire searches; group invitations and an AI chat endpoint are additional capabilities. The graph follows the sampled page and API behavior; wiring inside unsampled components, including the suggestion button and group modal, is not asserted.
Main entry points: app/page.tsx Home & groups · [id]/page.tsx Group details · submit/route.ts Save preferences · suggest-trip/route.ts Suggestion API
Components 23
Identity & groups
- Home & groups
frontend/src/app/page.tsx - Group details
frontend/src/app/groups/[id]/page.tsx - Group list
frontend/src/components/GroupList.tsx - Group modal
frontend/src/components/GroupModal.tsx - User records
frontend/src/lib/models/user.ts - Group records
frontend/src/lib/models/groups.ts - MongoDB
frontend/src/lib/mongodb.js - Auth0 session
frontend/src/lib/auth0.ts - Invitation API
frontend/src/app/api/send-invitations/route.ts
Trip planning
- Preferences form
frontend/src/app/preferences/page.tsx - Save preferences
frontend/src/app/api/trip/submit/route.ts
Recommendations
- Suggestion control
frontend/src/components/SuggestButton.tsx - Suggestion API
frontend/src/app/api/suggest-trip/route.ts - Prompt builder
frontend/src/lib/promptBuilder.ts - Gemini client
frontend/src/lib/gemini.ts - Trip results
frontend/src/app/trip-result/page.tsx - Chat API
frontend/src/app/api/chat/route.ts
External services
- Email service
- Gemini
- Flight search API
frontend/src/app/api/flight/search/route.ts - Car hire API
frontend/src/app/api/skyscanner/route.ts - Skyscanner
Other components
- Traveler
Connections 30
- Traveler → Home & groups: opens
- Home & groups → Auth0 session: checks session
- Home & groups → MongoDB: connects
- Home & groups → User records: finds or updates
- Home & groups → Group records: queries or creates
- Home & groups → Group list: renders
- Group list → Group modal: opens
- Traveler → Group details: opens
- Group details → MongoDB: connects
- Group details → Group records: loads group
- Group details → User records: loads members
- Group details → Suggestion control: renders
- Traveler → Preferences form: submits
- Preferences form → Save preferences: posts preferences
- Save preferences → Auth0 session: checks session
- Save preferences → MongoDB: connects
- Save preferences → User records: updates preferences
- Suggestion control → Suggestion API: requests suggestions
- Suggestion API → Prompt builder: builds prompt
- Suggestion API → Gemini client: requests response
- Gemini client → Gemini: calls
- Traveler → Trip results: views
- Traveler → Chat API: sends message
- Chat API → Gemini: generates response
- Traveler → Flight search API: searches flights
- Flight search API → Skyscanner: creates and polls
- Traveler → Car hire API: searches car hire
- Car hire API → Skyscanner: forwards search
- Traveler → Invitation API: invites members
- Invitation API → Email service: sends email