Inspiration
University can be isolating. Many students struggle to find study partners, make friends outside their immediate circles, or connect with people who share their interests and schedules. Existing social platforms aren't designed for the unique context of campus life—matching based on shared courses, overlapping free time, and proximity on campus. We built Frienddit to solve this problem specifically for SFU students, creating a safe, purpose-built platform where meaningful connections happen naturally.
What it does
Frienddit is a friend-making and study circle platform for SFU students. Users can: Discover compatible peers through a smart matching algorithm that considers shared courses, overlapping availability, campus location, and interests Chat in real-time with direct messages and group chats, with message requests to prevent spam Form study groups around courses, interests, or auto-matched study circles Plan events like study sessions and hangouts with built-in RSVP Play icebreaker mini-games (Two Truths, Would You Rather, Trivia) to break the ice Earn rewards through daily quests, badges, streaks, and leaderboards Stay safe with blocking, reporting, quiet mode, and granular privacy controls
How we built it
Frontend: Next.js 14 with App Router, TypeScript, Tailwind CSS, and Radix UI components Backend: Next.js API routes with Prisma ORM connecting to PostgreSQL Authentication: Passwordless OTP system via Resend email API with rate limiting through Upstash Redis Real-time: Socket.IO for live messaging and Supabase for real-time subscriptions PWA: Installable progressive web app with offline support Analytics & Monitoring: PostHog for analytics, Sentry for error tracking
Challenges we ran into
Designing the matching algorithm: Balancing multiple factors (courses, availability, interests, campus) while keeping match scores meaningful and transparent to users Real-time chat at scale: Handling message delivery, typing indicators, and online status across Socket.IO and Supabase real-time Privacy vs. discoverability trade-off: Building granular privacy controls that let users feel safe while still enabling meaningful connections Database schema complexity: Modeling 35+ interconnected tables for users, friendships, chats, groups, quests, and gamification while maintaining performance Accomplishments that we're proud of Passwordless authentication that's both secure (hashed OTPs, rate limiting, attempt tracking) and user-friendly Transparent matching that shows users why they're matched, not just a score Comprehensive safety system with blocking, reporting, message requests, and quiet mode Full gamification layer with points, badges (bronze/silver/gold tiers), daily streaks, and quests 50+ API endpoints covering every aspect of the platform Production-ready architecture with error tracking, analytics, and graceful fallbacks
What we learned
How to architect a complex social platform with bidirectional relationships (friends, blocks, chats) The importance of privacy-by-design and giving users control over their data Real-time system design with WebSockets and database subscriptions Building accessible UI components with Radix UI primitives Rate limiting strategies to prevent abuse while maintaining good UX
What's next for Frienddit
AI-powered recommendations: Use machine learning to improve match suggestions based on successful connections Campus map integration: Expand the map feature to show live study spot availability and friend locations (with consent) Course schedule sync: Import schedules directly from SFU's system Expand to other universities: Make the platform configurable for other Canadian campuses Native mobile apps: Build iOS and Android apps for push notifications and a smoother experience
Built With
- api
- next.js
- node.js
- prisma
- react-native
- socket.io
- sql
- tailwindcss
- typescript
- upstash
Log in or sign up for Devpost to join the conversation.