A dark, hacker-themed dashboard that aggregates competitive programming contests from all major platforms and displays your ratings in one unified view.
npm install
# Create .env file with your Supabase keys (see below)
npm run dev-
Create
.envfile:VITE_SUPABASE_URL=https://your-project.supabase.co VITE_SUPABASE_ANON_KEY=your-anon-key-here
-
Run
DATABASE_SETUP.sqlin Supabase SQL Editor to create all tables -
Set yourself as admin (after creating your account):
UPDATE profiles SET is_admin = true WHERE id = 'your-user-id-here';
-
Enable OAuth (optional): Google, GitHub in Supabase Authentication → Providers
- 📊 Contest Tracking: 6 platforms (Codeforces, LeetCode, AtCoder, CodeChef, HackerRank, TopCoder)
- 🔐 Authentication: Email/Password, Google, GitHub OAuth
- 📈 Dashboard: Personal dashboard with reminders (preview for guests)
- 🔔 Reminders: Set reminders for contests (requires login)
- ❤️ Favorites: Bookmark favorite contests (requires login)
- 👑 Admin Dashboard: View user stats, platform distribution (
/admin- admin only)
- Contest fetching from Codeforces API + mock data for all platforms
- Authentication (Email/Password, Google, GitHub)
- Reminders and favorites saving to Supabase (requires login)
- Admin dashboard (shows user stats, platform distribution)
- Dark terminal-themed UI with responsive design
- Run
DATABASE_SETUP.sqlin Supabase (creates tables) - Set yourself as admin (see SQL above)
- Test API endpoints for AtCoder/CodeChef
- Platform linking functionality (UI exists, needs implementation)
- Real rating fetching from platform APIs
- Rating history tracking
- Profile editing page
- Calendar export for reminders
- Email notifications
Visit /admin (admin only) to see:
- Total users count
- Active users (last 30 days)
- Total reminders and favorites
- Platform distribution
- Recent users list
How to become admin: After creating your account, run this SQL in Supabase:
UPDATE profiles SET is_admin = true WHERE id = 'your-user-id-here';React 18 + TypeScript + Vite + Tailwind CSS + Supabase
Status: Core functionality works. Needs database setup for full functionality.