A modern, student-first learning platform.
Skolar is a modern, student-first Learning Management System designed as a focused alternative to Google Classroom and Moodle. Instead of feature overload, Skolar prioritizes clarity, deadlines, and usability with integrated productivity tools, real-time collaboration, and AI assistance.
Key Features:
- Deadline-first dashboard with visual task tracking
- Built-in Pomodoro timer and focus hub
- WebRTC-powered study sessions with whiteboard and chat
- AI assistant powered by Google Gemini
- Real-time notifications via WebSocket
- Comprehensive grade management
- Mobile-first responsive design
Live Demo: https://skolar.iitdholakpur.rocks/
Frontend: React 19, TypeScript, Vite, Tailwind CSS, Radix UI, TipTap, Zustand, WebRTC
Backend: Go 1.25, Gin, PostgreSQL, JWT, WebSocket, Google Gemini AI
Infrastructure: Docker, Swagger API documentation
- Go 1.25+ | Node.js 18+ | pnpm 8+ | PostgreSQL 14+ (or Docker)
Note: Visit https://skolar.iitdholakpur.rocks/ to try the live application.
git clone https://github.com/adhitht/dev-duel
cd dev-duelStart PostgreSQL:
cd backend
make docker-run # Starts PostgreSQL in Docker containerConfigure Environment:
cp .env.example .env
# Edit .env with your values (use default DATABASE_URL below)Run Migrations and Start:
make migrate-up # Apply database migrations
make watch # Start backend with live reloadCreate Database:
# Ensure PostgreSQL is running locally
createdb skolarConfigure Environment:
cd backend
cp .env.example .env
# Edit .env and update DATABASE_URL to match your local PostgreSQL:
# DATABASE_URL=postgresql://your_user:your_password@localhost:5432/skolarRun Migrations and Start:
make migrate-up # Apply database migrations
make watch # Start backend with live reloadEdit .env file:
# Database (use default for Docker, update for local PostgreSQL)
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/skolar
# JWT Secret (generate a strong random string)
JWT_SECRET=your_secure_random_string
# Google OAuth (get from Google Cloud Console)
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# Google Gemini AI (get from Google AI Studio)
GEMINI_API_KEY=your_gemini_api_key
# Email Configuration (for notifications)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your_email@gmail.com
SMTP_PASSWORD=your_app_passwordcd frontend
pnpm install
cp .env.example .envEdit .env:
VITE_API_URL=http://localhost:8080
VITE_GOOGLE_CLIENT_ID=your_google_client_id
VITE_WS_URL=ws://localhost:8080Start Development Server:
pnpm devFrontend available at: http://localhost:5173
Frontend: http://localhost:5173 | API: http://localhost:8080 | Docs: http://localhost:8080/swagger/index.html
make docker-run # Start PostgreSQL container
make docker-down # Stop PostgreSQL container
make migrate-up # Apply database migrations
make migrate-down # Rollback last migration
make watch # Development with live reload
make build # Build production binary
make run # Run built binary
make test # Run tests
make clean # Remove build artifactspnpm install # Install dependencies
pnpm dev # Start dev server
pnpm build # Build for production
pnpm preview # Preview production builddev-duel/
├── backend/
│ ├── main.go # Entry point
│ ├── internal/
│ │ ├── server/ # HTTP server & routes
│ │ ├── controllers/ # Request handlers
│ │ ├── services/ # Business logic
│ │ ├── models/ # Data models
│ │ ├── ai/ # Gemini AI integration
│ │ ├── database/ # DB connection
│ │ ├── helpers/ # Utilities
│ │ ├── constants/ # App constants
│ │ ├── email/ # Email service
│ │ ├── cron/ # Scheduled tasks
│ │ └── response/ # Response helpers
│ ├── migrations/ # Database migrations
│ ├── templates/ # Email templates
│ ├── docs/ # Swagger documentation
│ └── uploads/ # File storage
│
├── frontend/
│ ├── src/
│ │ ├── pages/ # Route components
│ │ ├── components/ # Reusable components
│ │ ├── services/ # API clients
│ │ ├── stores/ # Zustand state management
│ │ ├── hooks/ # Custom React hooks
│ │ ├── contexts/ # React contexts
│ │ ├── lib/ # Utility libraries
│ │ ├── types/ # TypeScript types
│ │ └── assets/ # Images, icons, etc.
│ └── public/ # Static assets
│
├── assets/ # Project assets (header image)
└── README.md # Readme file
Backend:
- Controllers: HTTP handlers, validation
- Services: Business logic, database operations
- Models: Data structures, DTOs
- Middleware: CORS, JWT auth, error handling
Frontend:
- Pages: Route-level components
- Components: Feature-specific & reusable UI
- Stores: Zustand for global state
- Services: API communication with Axios
Database: PostgreSQL with indexed queries, migrations
Real-Time: WebSocket for notifications, WebRTC for P2P video/audio
REST Endpoints: API organized by resource (auth, courses, assignments, etc.)
WebSocket Endpoints:
/auth/notifications/ws- Real-time notifications/courses/:id/ws- Course updates/sessions/:id/ws- Study session WebRTC signaling
Response Format:
{
"success": true,
"message": "Operation successful",
"data": {}
}- API Documentation: https://api.skolar.iitdholakpur.rocks/docs/
- Frontend Docs: See frontend/README.md
- Backend Docs: See backend/README.md
MIT License.
