π£οΈ Join our Discord Server for all contributors: https://discord.gg/BEMjApACe
CampusConnect solves the chaos of college clubs juggling WhatsApp groups, spreadsheets, and paper certificates. It provides a single, unified platform for students and organizers to manage events, track memberships, and engage with their campus community seamlessly.
- Event Management: Create, manage, and promote campus events.
- RSVP + QR Check-in: Seamless registration and fast, verifiable QR code check-ins.
- Club Directory: Discover and join various campus clubs in one centralized place.
- Discussion Feed: Engage with the community through club-specific discussion boards.
- Certificate Generation: Automatically generate and distribute event certificates.
- Realtime Updates: Instant notifications and live updates powered by Supabase Realtime.
| Category | Technology |
|---|---|
| Frontend | Vite, React, TypeScript, Tailwind CSS |
| Backend | Supabase (Postgres, Auth, Storage, Realtime) |
| Package Manager | npm |
CampusConnect stores its data in Supabase (Postgres) and uses Supabase Auth plus Row Level Security to protect access. The schema is defined in supabase/schema.sql and centers on clubs, the members and events they run, and the posts their members write.
erDiagram
PROFILES ||--o{ CLUBS : "creates"
PROFILES ||--o{ CLUB_MEMBERS : "joins as"
CLUBS ||--o{ CLUB_MEMBERS : "has"
CLUBS ||--o{ EVENTS : "hosts"
CLUBS ||--o{ POSTS : "has"
PROFILES ||--o{ EVENTS : "creates"
EVENTS ||--o{ EVENT_RSVPS : "receives"
PROFILES ||--o{ EVENT_RSVPS : "makes"
PROFILES ||--o{ POSTS : "authors"
POSTS ||--o{ COMMENTS : "has"
PROFILES ||--o{ COMMENTS : "authors"
EVENTS ||--o{ CERTIFICATES : "issues"
PROFILES ||--o{ CERTIFICATES : "receives"
PROFILES {
uuid id PK
text full_name
text avatar_url
text college
text bio
enum role "student | club_admin"
}
CLUBS {
uuid id PK
text name
text slug UK
text description
uuid created_by FK
}
CLUB_MEMBERS {
uuid id PK
uuid club_id FK
uuid user_id FK
enum role "member | admin"
enum status "pending | approved"
}
EVENTS {
uuid id PK
uuid club_id FK
text title
text description
timestamptz event_date
uuid created_by FK
}
EVENT_RSVPS {
uuid id PK
uuid event_id FK
uuid user_id FK
bool checked_in
}
POSTS {
uuid id PK
uuid club_id FK
uuid author_id FK
text content
}
COMMENTS {
uuid id PK
uuid post_id FK
uuid author_id FK
text content
}
CERTIFICATES {
uuid id PK
uuid event_id FK
uuid user_id FK
text certificate_url
}
| Table | Key columns | Purpose |
|---|---|---|
profiles |
id (PK, = auth.users.id), full_name, avatar_url, college, bio, role |
One row per authenticated user; auto-created by the on_auth_user_created trigger on signup. |
clubs |
id (PK), name, slug (unique), description, banner_url, logo_url, created_by β profiles.id |
A campus club/society. slug is used for the public /clubs/:slug route. |
club_members |
id (PK), club_id β clubs.id, user_id β profiles.id, role, status |
Join table linking users to clubs, with a member/admin role and a pending/approved status. Unique per (club_id, user_id). |
events |
id (PK), club_id β clubs.id, title, description, event_date, location, created_by β profiles.id |
An event hosted by a club. |
event_rsvps |
id (PK), event_id β events.id, user_id β profiles.id, checked_in |
A user's RSVP to an event, plus a checked_in flag set on QR check-in. Unique per (event_id, user_id). |
posts |
id (PK), club_id β clubs.id, author_id β profiles.id, content |
A discussion post on a club's feed. |
comments |
id (PK), post_id β posts.id, author_id β profiles.id, content |
A reply to a post. |
certificates |
id (PK), event_id β events.id, user_id β profiles.id, certificate_url |
A generated certificate issued to a user for attending an event. |
- All tables have Row Level Security enabled; the policies in supabase/schema.sql define exactly who can read and write data.
posts,comments, andevent_rsvpsare included in thesupabase_realtimepublication to power live-updating feed and RSVP behavior.- Storage buckets such as
avatars,club-banners,event-banners, andcertificatesare public-read, with writes restricted to the authenticated user's own folder.
-
Clone the repository:
git clone https://github.com/krushit1307/CampusConnect.git cd CampusConnect -
Install dependencies:
npm install
-
Set up database & environment variables: Choose one of the following two options to run your database:
-
Option A: Remote Supabase (Default)
- Copy
.env.exampleto.env.local:cp .env.example .env.local
- Fill in your remote hosted Supabase URL and Anon Key.
- Apply database migrations to your remote project:
supabase db push
- Copy
-
Option B: Local Supabase Container (Recommended for offline development) Follow the Supabase Local Development & Seeding guide below to spin up a local container stack pre-populated with test records.
-
-
Start the development server:
npm run dev
Alternatively, you can run the project containerized using Docker. This allows you to build and run the application without needing Node/npm installed locally on your host machine.
-
Set up environment variables:
cp .env.example .env.local
Fill in your Supabase URL and Anon Key in
.env.local. -
Start the development container:
docker compose up --build
This will build the dev image and launch the Vite dev server inside the container. The application will be accessible at
http://localhost:8080with volume-mounted hot-reloading (HMR) fully functional.
-
Build the production Docker image:
docker build --target runner -t campusconnect:latest . -
Run the production container:
docker run -d -p 3000:3000 --env-file .env.local --name campusconnect campusconnect:latest
The production-built SPA will be served via the static file server (
serve -s dist -l 3000) onhttp://localhost:3000.
Instead of connecting to a remote Supabase instance, you can spin up the full Supabase database stack locally using Docker. This avoids API rate limits and populates your workspace with pre-seeded test data (users, events, clubs, posts, comments).
-
Start the local Supabase container stack:
supabase start
Note: This command requires Docker to be running on your system.
-
Copy the credentials to
.env.local: After the database starts successfully, the CLI will output your local API credentials. Copy these keys and update your.env.localfile:VITE_SUPABASE_URL: Set tohttp://127.0.0.1:54321VITE_SUPABASE_ANON_KEY: Paste theanon keyprinted by the CLISUPABASE_SERVICE_ROLE_KEY: Paste theservice_role keyprinted by the CLI
-
Reset and seed the database: To apply the initial schema and automatically seed the database with test data:
supabase db reset
This will completely provision your local database. You can log in using:
- Admin Account:
admin@campusconnect.com/password123 - Student Account:
student@campusconnect.com/password123
- Admin Account:
-
Access Supabase Studio: You can view and manage your local database tables by opening the local Supabase Studio dashboard in your browser at
http://127.0.0.1:54323/.
src/β Contains all frontend React components, pages, hooks, and utilities.supabase/β Database migrations, seed data, and Edge Functions.public/β Static assets like images and fonts.
We welcome contributions! Please see our CONTRIBUTING.md for details on how to get started. This is an ECSoC 2026 project, so we are actively looking for contributors. Check out issues labeled good first issue to begin!
Note
Automated Assignments: We use a bot to manage issue assignments. Simply comment /claim on an issue to assign it to yourself. You have a 30-hour window to submit a Pull Request before the issue is automatically unassigned.
Important
Code Formatting: Before committing and pushing your code, you MUST run npm run lint locally. This will automatically format your files and prevent our CI (GitHub Actions) from failing due to Prettier or ESLint errors. Pull Requests with failing CI checks will not be merged.
- Phase 1: Core web platform β
- Phase 2: Contributor feature build (In Progress)
- Phase 3: AI layer (Q4 2026) β AI event recommender, AI post summarizer, RAG chatbot via pgvector
This project is licensed under the MIT License - see the LICENSE file for details.
Krushit Prajapati - GitHub Profile
| Rank | Contributor | Contributions |
|---|---|---|
| π₯ | krushit1307 |
120 |
| π₯ | Aryanbuha890 |
24 |
| π₯ | Jivan-Patel |
22 |
| 4οΈβ£ | Ayush-0918 |
18 |
| 5οΈβ£ | nayanraj864-cmyk |
15 |