A full-stack web application for discovering and managing events at the University of Toronto. Students browse and RSVP to events; clubs post and manage them. Built with a Supabase backend and an AI-powered event import feature.
For students
- Browse and search campus events with date and category filters
- RSVP and bookmark events
- Personal dashboard showing upcoming RSVPs and saved events
- Profile and settings management
For clubs
- Club dashboard to create, edit, and manage posted events
- Smart Event Upload — paste raw text or upload an event flyer/image; GPT-4o-mini extracts structured event data (title, date, location, category) which you can review and confirm before posting
- Event analytics and attendee tracking
Platform
- Auth (sign up / sign in) powered by Supabase Auth
- Campus map view
- Featured events banner on landing page
- Dark mode by default
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, Vite |
| Styling | Tailwind CSS, shadcn/ui |
| Backend / DB | Supabase (PostgreSQL + Row Level Security) |
| Auth | Supabase Auth |
| AI | OpenAI GPT-4o-mini via Supabase Edge Functions (Deno) |
| State / Data | TanStack Query, React Hook Form, Zod |
src/
├── components/ # Shared UI components (Header, EventCard, CampusMap, etc.)
│ ├── auth/ # AuthModal, UserButton
│ └── ui/ # shadcn/ui primitives
├── hooks/ # useAuth, useProfile, use-toast
├── integrations/
│ └── supabase/ # Generated client + DB types
├── pages/ # Route-level components
│ ├── Index.tsx # Landing page
│ ├── ExploreEventsPageNew.tsx
│ ├── EventDetail.tsx
│ ├── ClubDashboardNew.tsx
│ ├── IndividualDashboard.tsx
│ └── ...
supabase/
├── functions/
│ └── ai-event-parser/ # Edge function: text/image → GPT-4o-mini → structured events
└── migrations/ # SQL schema migrations
- Node.js 18+
- A Supabase project (free tier works)
- OpenAI API key (for AI event parsing)
# 1. Clone
git clone https://github.com/AadiXD200/sceneu-uoft-events.git
cd sceneu-uoft-events
# 2. Install dependencies
npm install
# 3. Configure environment — copy the example and fill in your values
cp .env.example .env
# 4. Apply database migrations
# Run the SQL files in supabase/migrations/ against your Supabase project
# 5. Deploy the AI edge function
supabase functions deploy ai-event-parser
supabase secrets set OPENAI_API_KEY=sk-...
# 6. Start dev server
npm run devClubs can create events from unstructured content in two ways:
- Paste text — drop in an event description, email, or Instagram caption
- Upload an image — drag in a flyer or poster (PNG/JPG)
The edge function sends content to GPT-4o-mini which returns a structured JSON array of events. Clubs review and edit the parsed results before confirming, which writes them to the database.