A fun, focused tool that helps Network School members find and connect with each other based on shared interests and availability.
- 🔐 Discord OAuth authentication
- 📸 Camera capture or file upload for profile pictures
- 🏷️ Interest-based matching (up to 5 interests)
- 💬 Connection preferences (Workout, Grab a Meal, Co-work, Chat)
- ⏰ Availability preferences (Mornings, Lunchtime, Afternoons, Evenings)
- 👆 Swipe interface with animations
- 💖 Real-time match notifications
- 📋 Discord handle sharing for matches
git clone <your-repo-url>
cd ns-coding-challenge
npm install- Create a project at supabase.com
- Run the database schema from
supabase/schema.sql - Enable Discord OAuth in Authentication > Providers
- Add Discord OAuth credentials
Create .env.local:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
NEXT_PUBLIC_SITE_URL=http://localhost:3000npm run dev- Frontend: Next.js 14 (App Router) + TypeScript
- Backend: Supabase (Auth, Database)
- Styling: Tailwind CSS + ShadCN/UI Components
- Animations: Framer Motion
- Deployment: Vercel
- Welcome: User lands on welcome page, clicks "Connect with Discord"
- Auth: Discord OAuth flow, automatic profile creation
- Profile Setup: User adds photo, selects interests, connection preferences, and availability
- Swiping: Users swipe through other member profiles
- Matching: When two users like each other, they match
- Connection: Match reveals Discord username for manual friend request
- Push code to GitHub
- Import project to Vercel
- Add environment variables:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYNEXT_PUBLIC_SITE_URL(your Vercel URL)
- Deploy!
After deployment, update your Supabase Discord OAuth settings:
- Go to Authentication > URL Configuration
- Add
https://your-app.vercel.app/auth/callbackto Redirect URLs
app/
├── page.tsx # Welcome page with Discord login
├── profile/page.tsx # Profile setup page
├── swipe/page.tsx # Main swiping interface
├── auth/callback/route.ts # Discord OAuth callback
components/
├── SwipeCard.tsx # Swipeable card component
├── MatchModal.tsx # Match notification modal
lib/
├── supabase.ts # Supabase client and types
supabase/
└── schema.sql # Database schema
- Next.js 14: React framework with App Router
- Supabase: Backend as a Service (Auth + Database)
- Framer Motion: Smooth swipe animations
- Tailwind CSS: Utility-first styling
- ShadCN/UI: Beautiful UI components
- TypeScript: Type safety
The app uses three main tables:
- profiles: User profiles with Discord info, interests, preferences
- likes: Records of swipe actions (who liked whom)
- matches: Mutual likes between users
Row Level Security (RLS) ensures users can only:
- View all profiles
- Update their own profile
- View their own likes and matches
- Discord OAuth authentication
- Profile creation with photo, interests, and preferences
- Swipeable card interface
- Mutual match detection
- Discord handle display on match
- Deployed and functional
This MVP was built in under an hour following the PRD requirements:
- 15 min: Setup & Auth
- 15 min: Profile Creation
- 20 min: Core Swiping
- 5 min: Match & Deploy
Built with ❤️ for Network School!