Track. Analyze. Ace your coding journey.
Your all-in-one platform for competitive programming excellence
- Overview
- Key Features
- Screenshots
- Tech Stack
- Getting Started
- Project Structure
- API Integrations
- Database Schema
- Environment Variables
- Testing
- Deployment
- Contributing
- License
CoderSTAT is a comprehensive full-stack platform designed to help competitive programmers track, analyze, and improve their coding journey. It consolidates data from multiple coding platforms, provides detailed analytics, tracks DSA progress, and keeps you updated with upcoming contests—all in one beautifully designed dashboard.
- Competitive programmers tracking multi-platform progress
- Students preparing for technical interviews
- Developers monitoring their DSA improvement
- Teams competing on leaderboards
- Anyone serious about systematic coding practice
- Real-time synchronization with LeetCode, Codeforces, CodeChef, and GeeksforGeeks
- Automatic stats refresh with caching
- Difficulty-wise problem breakdown (Easy, Medium, Hard)
- Rating history and rank tracking
- Contest participation statistics
- Track progress through Striver's 450 DSA Sheet and custom problem sets
- Mark questions as: Not Started, In Progress, Solved, or Bookmarked
- Filter by difficulty, topic, status, and source
- Direct links to problems on various platforms
- Personal notes and solution tracking
- Progress statistics with visual indicators
- Live contest updates from 7+ platforms via CList API
- IST timezone conversion
- Filter contests by platform (Codeforces, CodeChef, LeetCode, AtCoder, etc.)
- Calendar view with event details
- Local storage caching for offline access
- Today's contests quick filter
- Customizable profile with bio, location, institute, and profile picture
- Social media links integration (GitHub, LinkedIn, Twitter, Instagram, Portfolio)
- Coding platform username management
- Public/Private profile visibility toggle
- Embeddable profile widget for sharing
- Real-time profile updates
- Global and friend leaderboards
- Compare progress with peers
- Platform-wise rankings
- Total problems solved tracking
- Clerk-powered authentication system
- OAuth integration
- Protected routes with middleware
- Session management
- Fully responsive design (mobile, tablet, desktop)
- Dark/Light theme support
- Smooth animations and transitions
- Loading skeletons and states
- Toast notifications for user feedback
- Accessible components
- Upload new question sheets
- Manage master questions database
- Platform content management
- Framework: Next.js 15.2.4 (App Router)
- UI Library: React 19.0.0
- Styling: Tailwind CSS 4.0
- Icons: Lucide React, React Icons
- Components: Radix UI, shadcn/ui
- Animations: tw-animate-css
- Charts: Recharts
- Calendar: React Big Calendar
- State Management: React Hooks
- Toast Notifications: React Toastify
- Loading States: React Loading Skeleton
- API Routes: Next.js API Routes
- ORM: Drizzle ORM
- Database: PostgreSQL (Neon serverless)
- Authentication: Clerk
- HTTP Client: Axios
- Web Scraping: Cheerio
- Package Manager: npm
- Version Control: Git
- Database Management: Drizzle Kit
- Runtime: Node.js
- TypeScript Support: @types/node
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- npm or yarn
- PostgreSQL database (or use Neon)
- Git
-
Clone the Repository
git clone https://github.com/amanbind898/coderstat.git cd coderstat -
Install Dependencies
npm install
-
Set Up Environment Variables
Create a
.env.localfile in the root directory and add:# Database NEXT_PUBLIC_DRIZZLE_DB_URL=postgresql://user:password@host/database # Clerk Authentication NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxxxxxxxxxxxx CLERK_SECRET_KEY=sk_test_xxxxxxxxxxxxx NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up # CList API for Contest Data NEXT_PUBLIC_CLIST_API=https://clist.by/api/v4/contest/?username=xxxxx&api_key=xxxxx&limit=100&start__gt=2025-01-01T00:00:00&order_by=start
-
Set Up Database
# Generate database schema npx drizzle-kit generate # Push schema to database npx drizzle-kit push
-
Run Development Server
npm run dev
-
Open Your Browser
Navigate to http://localhost:3000
coderstat/
├── public/ # Static assets
│ ├── logo.png
│ ├── mascot.png
│ └── [platform logos] # LeetCode, Codeforces, CodeChef, etc.
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── (auth)/ # Authentication routes
│ │ ├── api/ # API routes
│ │ │ ├── leaderboard/
│ │ │ ├── profile/
│ │ │ ├── questions/
│ │ │ ├── stats/
│ │ │ └── updatePlatformStats/
│ │ ├── components/ # Reusable components
│ │ │ ├── Navbar.js
│ │ │ ├── UserProfile.js
│ │ │ ├── PlatformCards.js
│ │ │ ├── ContestCalendar.js
│ │ │ ├── Leaderboard.js
│ │ │ └── Loader.js
│ │ ├── event-tracker/ # Contest calendar page
│ │ ├── profile/ # Public profile pages
│ │ ├── profile-tracker/ # User dashboard
│ │ ├── question-tracker/ # DSA sheet tracker
│ │ ├── settings/ # User settings
│ │ ├── upload/ # Admin upload page
│ │ ├── embed/ # Embeddable widgets
│ │ ├── layout.js # Root layout
│ │ └── page.js # Landing page
│ ├── db/ # Database configuration
│ │ ├── schema.js # Database schema
│ │ └── index.js # Database connection
│ ├── lib/ # Utility functions
│ │ └── questionTrackerApi.js
│ ├── middleware.js # Auth middleware
│ └── components/ # UI components
│ └── ui/ # shadcn/ui components
├── docs/ # Documentation
│ └── Testing Approach for CoderSTAT Platform.docx
├── drizzle/ # Drizzle migrations
├── drizzle.config.js # Drizzle configuration
├── tailwind.config.js # Tailwind configuration
├── next.config.mjs # Next.js configuration
├── components.json # shadcn/ui config
└── package.json # Dependencies
| Platform | Features | Data Points |
|---|---|---|
| LeetCode | Problems solved, difficulty breakdown | Easy, Medium, Hard counts, Rating |
| Codeforces | Contest rating, ranks | Current Rating, Max Rating, Global/Country Rank |
| CodeChef | Problems solved, rating | Star rating, Highest rating |
| GeeksforGeeks | Solved problems count | Total solved, Profile data |
| CList | Contest calendar | Upcoming contests across platforms |
POST /api/updatePlatformStats- Refresh platform statisticsGET /api/profile/[userId]- Fetch user profile dataGET /api/stats/[clerkId]- Get coding statisticsGET /api/leaderboard- Fetch leaderboard dataGET /api/questions- Get question tracker dataPOST /api/questions- Update question statusGET /api/public-profile/[userId]- Public profile dataPOST /api/toggle-profile-visibility- Toggle profile visibility
Stores user profile information
- id (serial, primary key)
- clerkId (varchar, unique)
- name (varchar)
- primaryEmail (varchar)
- dateOfBirth (date)
- location (varchar)
- bio (varchar, max 500 chars)
- institute (varchar)
- profilePic (varchar, URL)
- Social links: instagram, linkedin, twitter, github, portfolio
- Platform usernames: leetCode, codeforces, codechef, geeksforgeeks
- isPublic (boolean, default true)
- createdAt (timestamp)Stores synchronized stats from coding platforms
- id (serial, primary key)
- clerkId (varchar, foreign key)
- platform (varchar)
- solvedCount (varchar)
- rating (varchar)
- highestRating (varchar)
- globalRank (varchar)
- countryRank (varchar)
- easyCount, mediumCount, hardCount (varchar)
- fundamentalCount (varchar)
- totalcontest (varchar)
- lastUpdated (timestamp)Master list of DSA/CP questions
- id (serial, primary key)
- topic (varchar)
- problem (varchar)
- url (varchar)
- difficulty (varchar: easy/medium/hard)
- source (varchar: platform name)
- sourceId (varchar)
- tags (json array)
- addedAt (timestamp)Tracks individual user's question progress
- id (serial, primary key)
- clerkId (varchar)
- questionId (integer, foreign key)
- status (varchar: not_started/in_progress/solved/bookmarked)
- timesAttempted (integer)
- lastAttemptDate (timestamp)
- solvedDate (timestamp)
- timeSpent (integer, minutes)
- solution (text)
- language (varchar)
- notes (text)
- confidence (integer, 0-5)
- updatedAt (timestamp)| Variable | Description | Required |
|---|---|---|
NEXT_PUBLIC_DRIZZLE_DB_URL |
PostgreSQL connection string | ✅ |
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY |
Clerk public key | ✅ |
CLERK_SECRET_KEY |
Clerk secret key | ✅ |
NEXT_PUBLIC_CLERK_SIGN_IN_URL |
Sign in route | ✅ |
NEXT_PUBLIC_CLERK_SIGN_UP_URL |
Sign up route | ✅ |
NEXT_PUBLIC_CLIST_API |
CList API endpoint with credentials | ✅ |
-
Clerk Authentication
- Sign up at clerk.com
- Create a new application
- Copy API keys from dashboard
-
CList API
- Register at clist.by
- Generate API key from settings
- Format:
https://clist.by/api/v4/contest/?username=YOUR_USERNAME&api_key=YOUR_KEY&limit=100&start__gt=2025-01-01T00:00:00&order_by=start
-
Database (Neon)
- Sign up at neon.tech
- Create a PostgreSQL database
- Copy connection string
The project follows a comprehensive testing strategy documented in docs/Testing Approach for CoderSTAT Platform.docx.
- ✅ Unit Tests - Component and utility functions
- ✅ Integration Tests - API routes and database operations
- ✅ End-to-End Tests - User flows and journeys
- ✅ Performance Tests - Load testing with k6
- ✅ User Acceptance Testing - 12 real users, 100% success rate
# Run all tests
npm test
# Backend API tests
npm run test:api
# Frontend component tests
npm run test:components
# End-to-end tests
npm run test:e2e
# Performance/Load tests
k6 run tests/load-test.js- 12 real users tested core flows
- 100% success rate on primary features
- Flows tested: sign up, profile setup, stats refresh, DSA tracking, contest viewing, profile sharing
- Push code to GitHub
- Import project to Vercel
- Add environment variables
- Deploy
# Install Vercel CLI
npm i -g vercel
# Deploy
vercelCompatible with:
- Netlify
- Railway
- Render
- AWS Amplify
For production, use:
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch
git checkout -b feature/AmazingFeature
- Commit your changes
git commit -m 'Add some AmazingFeature' - Push to the branch
git push origin feature/AmazingFeature
- Open a Pull Request
- Follow existing code style
- Write meaningful commit messages
- Add tests for new features
- Update documentation
- Ensure all tests pass
- Additional question sheets (OS, DBMS, System Design)
- Study planner with scheduling
- Friend system and team leaderboards
- Progress charts and analytics
- Mobile app (React Native)
- Browser extension
- Email/Push notifications for contests
- AI-powered question recommendations
- Code snippet storage
- Discussion forum
This project is licensed under the MIT License - see the LICENSE file for details.
- CList API for contest data
- Clerk for authentication
- Neon for database hosting
- Vercel for deployment
- shadcn/ui for UI components
- All coding platforms for public APIs
Aman Bind
- GitHub: @amanbind898
- Project: CoderSTAT
- Issues: GitHub Issues
- Discussions: GitHub Discussions
⭐ Star this repository if you find it helpful!
Built with ❤️ to help you ace your coding journey

