Domain: Vibe Coding ✨
Difficulty: Easy 🟢
To design and build an AI-powered tool that enhances the overall student experience by simplifying campus life, improving organization, or fostering community engagement.
University campuses are vibrant but often complex environments. Students juggle academic schedules, extracurricular activities, and social events. Finding relevant information, managing time effectively, and discovering new opportunities can be challenging.
This challenge asks you to build a smart tool that addresses one key aspect of student life. You will choose one of three project options, each designed to make the campus experience more efficient and engaging.
To tackle the "Smart Campus" challenge, please choose one of the following three project options to build. You can use mock data for your chosen project.
- Concept: Build an intelligent chatbot that acts as a 24/7 virtual guide for students.
- Core Features:
- Answer student questions about events (e.g., "What's happening this week?"), timetables (e.g., "Where is my next class?"), and facilities (e.g., "What time does the gym close?").
- Implement Natural Language Understanding (NLU) to process conversational queries.
- Design a simple and user-friendly chat interface.
- Concept: Develop a system that suggests campus events, workshops, and clubs to students based on their personal interests.
- Core Features:
- Allow users to create a profile and select their interests (e.g., "Coding," "Music," "Sports," "AI").
- Match events from a campus database to the user's profile.
- Display personalized event recommendations through a clean dashboard, email, or notification system.
- Backend: Node.js, Express, JSON file storage (mock DB), JWT, bcrypt, CORS
- AI Logic: Content-based filtering via TF‑IDF and cosine similarity (using
natural) - Frontend: React (TypeScript, CRA), Axios, React Router
.
├─ server.js
├─ package.json
├─ data/
│ ├─ users.json
│ ├─ events.json
│ └─ interests.json
├─ routes/
│ ├─ auth.js
│ ├─ events.js
│ └─ recommendations.js
├─ utils/
│ └─ recommendationEngine.js
└─ client/
├─ package.json
└─ src/
├─ api.ts
├─ types.ts
├─ context/
│ └─ AuthContext.tsx
├─ components/
│ ├─ Navbar.tsx
│ └─ EventCard.tsx
└─ pages/
├─ LoginPage.tsx
├─ SignupPage.tsx
├─ ProfilePage.tsx
└─ DashboardPage.tsx
POST /api/auth/register– Register a userPOST /api/auth/login– Login and receive JWTPUT /api/auth/profile– Update profile (interests, year, major)GET /api/auth/profile/:userId– Get user profileGET /api/events– List events (query:category,search,limit)GET /api/events/:eventId– Get event by IDGET /api/recommendations/user/:userId?algorithm=hybrid|content-based|collaborative|diverse|popular&limit=10– Personalized recommendationsPOST /api/recommendations/by-interests– Get recs by provided interest tagsGET /api/recommendations/explain/:userId/:eventId– Get explanation of a recommendation
- TF‑IDF is built from event title, description, category, and tags
- User profile vector is created from interests
- Cosine similarity ranks events; exact tag matches add a small bonus
- Fallback to popular events, plus hybrid/diverse and a mocked collaborative variant
# from project root
npm install
npm run dev # starts the Express server on http://localhost:5000Health check: http://localhost:5000/api/health
cd client
npm install
npm start # starts React dev server on http://localhost:3000The frontend expects the backend at http://localhost:5000/api. If you need to change it, set REACT_APP_API_BASE before npm start (e.g. in your shell).
- Use email
john.doe@university.eduand passwordpassword - Or sign up a new account, then select interests on the Profile page
- Register/login with mock JSON storage
- Select interests and update profile
- Content-based AI recommendations with multiple algorithms
- Simple, clean dashboard UI with event cards
- Notifications
- Add a
notificationsservice that surfaces top 3 weekly events per user - Options: in‑app toasts, email (e.g., nodemailer), or scheduled digests (cron)
- Add a
- Collaborative Filtering
- Persist user interactions (views, favorites, RSVPs)
- Compute user‑user/item‑item similarities using cosine/pearson
- Calendar Integrations
- Google Calendar: OAuth + create calendar events for RSVPs
- University ERP: read course schedules to avoid conflicts
- Personalization
- Short/long‑term preference models; decay older interests
- Re‑rank by time, capacity, and popularity signals
# Fetch all events
curl http://localhost:5000/api/events
# Recommendations for a user (hybrid)
curl "http://localhost:5000/api/recommendations/user/user_001?algorithm=hybrid&limit=5"
# Recommendations by interests
curl -X POST http://localhost:5000/api/recommendations/by-interests \
-H "Content-Type: application/json" \
-d '{"interests":["ai","coding"],"limit":5}'- This project uses JSON files for storage for simplicity. Replace with a real DB for production.
- JWT secret is hardcoded for development. Use environment variables in production.
create-react-appis deprecated; it is used here for speed. You can migrate to Vite/Next.js later.
The tech stack can be chosen by the contributors themselves. You have complete freedom to use any languages, frameworks, or tools you are comfortable with. The main goal is to build a functional and creative solution, not to master a specific technology.
Submissions will be judged based on the following criteria:
-
Creativity & Innovation (30%)
- Uniqueness of the design and overall idea.
-
Execution Quality (30%)
- Aesthetics and usability (UI/UX) of the final product.
-
Technical Relevance (20%)
- Relevance of the solution to the project's context and problem statement.
-
Documentation & Clarity (10%)
- Proper explanations, comments, and clarity in the code and
README.mdfile.
- Proper explanations, comments, and clarity in the code and
-
AI Usage Transparency (10%)
- Declared use of AI assistance in the design or coding process.
- Push your final code to a public GitHub repository.
- Include a clear
README.mdin your repository that explains how to set up and run your project. - Submit the link to your repository for evaluation.
Happy Hacking! 💻