Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

198 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Skolar — A modern learning platform

Skolar

A modern, student-first learning platform.


Overview

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/

Tech Stack

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

Prerequisites

  • Go 1.25+ | Node.js 18+ | pnpm 8+ | PostgreSQL 14+ (or Docker)

Note: Visit https://skolar.iitdholakpur.rocks/ to try the live application.

Quick Start

1. Clone Repository

git clone https://github.com/adhitht/dev-duel
cd dev-duel

2. Backend Setup

Option A: Using Docker (Recommended)

Start PostgreSQL:

cd backend
make docker-run  # Starts PostgreSQL in Docker container

Configure 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 reload

Option B: Using Local PostgreSQL

Create Database:

# Ensure PostgreSQL is running locally
createdb skolar

Configure 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/skolar

Run Migrations and Start:

make migrate-up  # Apply database migrations
make watch       # Start backend with live reload

Edit .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_password

3. Frontend Setup

cd frontend
pnpm install
cp .env.example .env

Edit .env:

VITE_API_URL=http://localhost:8080
VITE_GOOGLE_CLIENT_ID=your_google_client_id
VITE_WS_URL=ws://localhost:8080

Start Development Server:

pnpm dev

Frontend available at: http://localhost:5173

4. Access Application

Frontend: http://localhost:5173 | API: http://localhost:8080 | Docs: http://localhost:8080/swagger/index.html

Available Commands

Backend (Makefile)

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 artifacts

Frontend (pnpm)

pnpm install       # Install dependencies
pnpm dev           # Start dev server
pnpm build         # Build for production
pnpm preview       # Preview production build

Project Structure

dev-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

Architecture

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

API

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": {}
}

Documentation

License

MIT License.

About

ElanxNVision'26 Dev Dual EdTech Theme Submission

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages