How upendradungana/sportsfb works
SportsFB is a Bhutan-focused sports-facility booking product for players, facility owners, and administrators. Players discover facilities and reserve slots, then pay and submit proof; owners manage listings, approve requests, and verify payments. Admins verify owners and facilities, review plan payments, manage users, and handle feedback. Authentication, role/MFA guards, and shared booking logic form key internal layers. The README documents the product branches; sampled sources show selected API, persistence, notification, and booking relationships, so unsampled links are omitted or marked unverified.
Main entry points: schema.ts Neon Postgres · booking.ts Booking lifecycle · notify.ts Notification service · auth.ts Google sign-in
Components 27
Identity and access
- Google sign-in
src/auth.ts - Role and MFA guards
src/lib/guard.ts - Authenticator MFA
src/lib/totp.ts - Profile onboarding
src/app/api/onboarding/route.ts - Account controls
src/app/api/me/route.ts
Player booking
- Facility discovery
src/app/api/facilities/route.ts - Map display
src/components/MapView.tsx - Booking endpoints
src/app/api/bookings/reserve/route.ts - Booking lifecycle
src/lib/booking.ts - Payment proof
src/app/api/payments/upload-proof/route.ts - Booking receipts
src/app/api/receipts/[bookingId]/route.ts - Booking expiry hook
src/app/api/webhooks/expire-booking/route.ts
Owner operations
- Facility management
src/app/api/owner/facilities/route.ts - Availability and blocks
src/app/api/owner/blocks/route.ts - Owner plans
src/app/api/owner/plan/route.ts - Subscription rules
src/lib/subscriptions.ts
Administration
- Admin review and actions
src/app/api/admin/action/route.ts - Admin data
src/app/api/admin/data/route.ts - Admin MFA setup
src/app/api/admin/totp/route.ts - Feedback
src/app/api/feedback/route.ts - Notifications
src/app/api/notifications/route.ts - Notification service
src/lib/notify.ts
Other components
- Players
- Facility owners
- Administrators
- Neon Postgres
src/db/schema.ts - QStash timers
Connections 45
- Players → Google sign-in: sign in
- Facility owners → Google sign-in: sign in
- Administrators → Google sign-in: sign in
- Google sign-in → Neon Postgres: reads and writes
src/auth.ts - Google sign-in → Role and MFA guards: provides session
src/lib/guard.ts - Role and MFA guards → Authenticator MFA: checks MFA
src/lib/guard.ts - Administrators → Admin MFA setup: enroll MFA
src/app/api/admin/totp/route.ts - Admin MFA setup → Authenticator MFA: verifies codes
src/app/api/admin/totp/route.ts - Admin MFA setup → Neon Postgres: stores MFA state
src/app/api/admin/totp/route.ts - Players → Profile onboarding: set up profile
src/app/api/onboarding/route.ts - Profile onboarding → Neon Postgres: updates user
src/app/api/onboarding/route.ts - Players → Facility discovery: find facilities
- Facility discovery → Neon Postgres: searches facilities
src/app/api/facilities/route.ts - Facility discovery → Notification service: alerts on listing
src/app/api/facilities/route.ts - Map display → Players: shows locations
- Players → Booking endpoints: reserve slots
- Booking endpoints → Booking lifecycle: dispatches booking
- Booking lifecycle → Neon Postgres: updates bookings
src/lib/booking.ts - Booking lifecycle → Notification service: sends booking alerts
src/lib/booking.ts - Booking lifecycle → QStash timers: schedules expiry
src/lib/booking.ts - Players → Payment proof: upload proof
- Payment proof → Booking lifecycle: submits proof
src/app/api/payments/upload-proof/route.ts - Facility owners → Booking receipts: view receipts
- Booking receipts → Booking lifecycle: loads receipt
src/app/api/receipts/[bookingId]/route.ts - Booking expiry hook → Booking lifecycle: expires booking
src/app/api/webhooks/expire-booking/route.ts - Facility owners → Facility management: manage listings
- Facility management → Neon Postgres: manages facilities
src/app/api/owner/facilities/route.ts - Facility management → Notification service: requests review
src/app/api/owner/facilities/route.ts - Facility owners → Availability and blocks: set blocked times
- Availability and blocks → Neon Postgres: stores blocks
src/app/api/owner/blocks/route.ts - Facility owners → Owner plans: pay for plan
- Owner plans → Neon Postgres: stores subscription
src/app/api/owner/plan/route.ts - Owner plans → Notification service: requests payment review
src/app/api/owner/plan/route.ts - Subscription rules → Neon Postgres: reads subscriptions
src/lib/subscriptions.ts - Administrators → Admin review and actions: review and manage
- Admin review and actions → Neon Postgres: updates records
src/app/api/admin/action/route.ts - Admin review and actions → Notification service: sends updates
src/app/api/admin/action/route.ts - Administrators → Admin data: review queues
- Admin data → Neon Postgres: reads records
src/app/api/admin/data/route.ts - Players → Feedback: send feedback
- Feedback → Neon Postgres: stores feedback
src/app/api/feedback/route.ts - Feedback → Notification service: alerts admins
src/app/api/feedback/route.ts - Players → Notifications: view alerts
- Notifications → Neon Postgres: reads and marks read
src/app/api/notifications/route.ts - Notification service → Neon Postgres: writes notifications
src/lib/notify.ts