How jensenhuangyankai/meetwhenah works
WhenMeetAh? coordinates group events through a Telegram bot and an embedded web UI. The flow begins when a participant starts or interacts with the bot, creates an event with a date range, shares it for others to join, and collects each participant’s selected availability. The API persists event, membership, user, and availability records in Supabase; event analysis ranks common meeting slots for the bot to present. The README documents the Telegram-to-web UI experience, while source excerpts confirm key API and selection behavior; unsampled page and bot wiring is represented conservatively.
Main entry points: supabase.ts Supabase access · api-client.ts API client · telegram.py Telegram bot · route.ts Event analysis API
Components 20
Telegram bot
- Telegram bot
python-backend/telegram.py - Bot data access
python-backend/supabase_db.py
Embedded web UI
- Event date picker
frontend/app/datepicker/page.jsx - Date-range UI
frontend/components/datepicker/CustomDateRangePicker.jsx - Availability selector
frontend/app/dragselector/page.tsx - Grid selection
frontend/components/dragselector/DragSelector.tsx - Area selection
frontend/components/dragselector/useAreaSelection.tsx - Selected slots
frontend/components/dragselector/useSelected.tsx - Web submission
frontend/app/api/webapp-submit/route.ts
Application API
- API client
frontend/lib/api-client.ts - User API
frontend/app/api/users/route.ts - Event API
frontend/app/api/events/route.ts - Membership API
frontend/app/api/event-members/route.ts - Availability API
frontend/app/api/availability/route.ts - Event analysis API
frontend/app/api/event-analysis/route.ts
Persistence and analysis
- Slot calculations
frontend/lib/availability-utils.ts - Supabase access
frontend/lib/supabase.ts - Supabase database
Other components
- Participant
- Telegram platform
Connections 27
- Participant → Telegram platform: messages
- Telegram bot → Telegram platform: sends replies
- Telegram bot → Participant: presents results
- Telegram bot → Event date picker: opens web app
- Participant → Event date picker: sets date range
- Event date picker → API client: submits event
- Participant → Availability selector: selects slots
- Availability selector → Grid selection: renders grid
- Grid selection → Area selection: tracks gesture
- Grid selection → Selected slots: checks selection
- Availability selector → Web submission: submits availability
- API client → User API: requests users
- API client → Event API: requests events
- API client → Membership API: requests membership
- API client → Availability API: requests availability
- API client → Event analysis API: requests analysis
- Web submission → Supabase access: reads and writes
- User API → Supabase access: reads and writes
- Event API → Supabase access: reads and writes
- Membership API → Supabase access: reads and writes
- Availability API → Supabase access: reads and writes
- Event analysis API → Supabase access: reads event data
- Event analysis API → Slot calculations: calculates slots
- Supabase access → Supabase database: queries
- Telegram bot → Bot data access: uses data access
- Bot data access → Supabase database: accesses records
- Telegram bot → Event analysis API: requests best times