The official web application for C2SI and SCoRe Lab
Showcasing open-source projects, contributors, and community activity.
WebiU 2.0 is a full-stack web application that provides a comprehensive interface for showcasing C2SI/SCoRe Lab's open-source ecosystem. It integrates directly with the GitHub API to display real-time project statistics, contributor leaderboards, and individual contribution activity.
Key highlights:
- Real-time Project Data — Fetches repository stats (stars, forks, language, issues, PRs) directly from GitHub.
- Contributor Leaderboards — Aggregates contributions across all repositories to rank contributors.
- Contributor Search — Look up any contributor to see their issues and pull requests within the organization.
- Dark Mode — Toggle between light and dark themes with persistent preference.
- OAuth Sign-in — Sign in with Google or GitHub accounts.
- Modern Stack — Built with Angular 17+ (standalone components) and NestJS.
- Features
- Tech Stack
- Prerequisites
- Installation & Setup
- Project Structure
- API Endpoints
- Linting & Code Quality
- Testing
- Contributing
- Documentation
- License
| Feature | Description |
|---|---|
| Project Dashboard | Browse all C2SI/SCoRe Lab repositories with stars, forks, language, open issues, and PR counts |
| Contributor Leaderboards | See aggregated contribution stats across every repository in the organization |
| Contributor Search | Search by GitHub username to view their issues and pull requests |
| Publications | Dedicated page for research publications |
| GSoC | Google Summer of Code information and project ideas |
| Community | Community information and resources |
| Dark Mode | System-wide light/dark theme toggle with localStorage persistence |
| OAuth Authentication | Sign in with Google or GitHub |
| Responsive Design | Fully responsive layout for desktop, tablet, and mobile |
| Layer | Technology |
|---|---|
| Frontend | Angular 17+, TypeScript, SCSS, RxJS |
| Backend | NestJS 10, TypeScript, Express |
| API Integration | GitHub REST API via Axios |
| Authentication | JWT, Passport, Google OAuth 2.0, GitHub OAuth |
| Nodemailer (Gmail) | |
| Containerization | Docker, Docker Compose |
| Code Quality | ESLint, Prettier, Husky (pre-commit hooks) |
| Testing | Jest (backend), Karma + Jasmine (frontend) |
Before you begin, ensure you have the following installed:
- Node.js v18.x or higher — Download
- npm v9.x or higher (ships with Node.js)
- Angular CLI v17.x — Install globally:
npm install -g @angular/cli - Git — Download
- Docker (optional) — Download — only needed for containerized setup
You will also need a GitHub Personal Access Token for the backend to call the GitHub API. Generate one at github.com/settings/tokens (no special scopes required for public repo data).
git clone https://github.com/rajutkarsh07/Webiu.git
cd WebiuThe repository root has its own package.json that installs Husky and sets up the Git pre-commit hooks. You must run this from the root directory:
npm installThis runs the
preparescript which initialises Husky. Without this step, the pre-commit lint hooks will not be active.
cd webiu-ui
npm install
ng serveThe frontend will be available at http://localhost:4200.
cd webiu-server
npm install
cp .env.example .envOpen .env and fill in the required values:
PORT=5050
JWT_SECRET=your_jwt_secret_here
GITHUB_ACCESS_TOKEN=your_github_personal_access_token
FRONTEND_BASE_URL=http://localhost:4200
At minimum, JWT_SECRET and GITHUB_ACCESS_TOKEN are required. OAuth and email features need their respective variables — see .env.example for the full list.
Start the backend:
npm startThe server will run on http://localhost:5050.
From the repository root:
docker-compose up --build| Service | URL |
|---|---|
| Frontend | http://localhost:4200 |
| Backend | http://localhost:5050 |
Webiu/
├── webiu-ui/ # Angular frontend
│ └── src/app/
│ ├── components/ # Reusable UI components (navbar, cards)
│ ├── page/ # Page components (homepage, projects, contributors, etc.)
│ ├── services/ # Angular services (project caching, theming)
│ ├── common/ # Shared utilities
│ └── shared/ # Shared components (loading spinner)
│
├── webiu-server/ # NestJS backend
│ └── src/
│ ├── auth/ # Authentication (JWT + Google/GitHub OAuth)
│ ├── project/ # Project data endpoints
│ ├── contributor/ # Contributor data endpoints
│ ├── github/ # GitHub API wrapper
│ ├── user/ # User management
│ ├── email/ # Email service
│ └── common/ # Shared cache service
│
├── docs/
│ ├── Architecture.md # Code structure & data flow
│ ├── CONTRIBUTING.md # Contribution guidelines
│ ├── API_DOCUMENTATION.md # Full API reference
│ └── webiu.postman_collection.json
│
├── docker-compose.yml
└── README.md # This file
For a deep dive into the architecture, module system, data flow, and caching strategy, see Architecture.md.
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/projects/projects |
All repositories with PR counts |
GET |
/api/issues/issuesAndPr?org=...&repo=... |
Issue and PR counts for a repo |
GET |
/api/contributor/contributors |
Aggregated contributor leaderboard |
GET |
/api/contributor/issues/:username |
Issues by a specific user |
GET |
/api/contributor/pull-requests/:username |
PRs by a specific user |
GET |
/api/contributor/stats/:username |
Combined issues + PRs for a user |
POST |
/api/v1/auth/register |
Register a new account |
POST |
/api/v1/auth/login |
Log in |
GET |
/api/v1/auth/verify-email?token=... |
Verify email address |
GET |
/auth/google |
Google OAuth sign-in |
GET |
/auth/github |
GitHub OAuth sign-in |
Full API documentation (request/response schemas, validation, error codes) is in docs/API_DOCUMENTATION.md.
A Postman collection for all endpoints is available at docs/webiu.postman_collection.json — import it via Postman → Import → File to start testing immediately.
This project uses ESLint, Prettier, and Husky pre-commit hooks to maintain code quality. Commits that fail linting checks will be rejected automatically.
Important: Husky is installed via
npm installin the root directory (step 2 of setup). If you skipped that step, run it now from the repo root, otherwise pre-commit hooks will not fire.
Run linting manually:
# Frontend
cd webiu-ui && npm run lint
# Backend
cd webiu-server && npm run lint# Backend (Jest)
cd webiu-server && npm test
# Frontend (Karma + Jasmine)
cd webiu-ui && ng testWe welcome contributions! Please see CONTRIBUTING.md for guidelines on branching, code style, commit messages, and the pull request process.
| Document | Description |
|---|---|
| README.md | Project overview, setup, and quick reference |
| docs/ARCHITECTURE.md | Code structure, module system, data flow, and caching |
| docs/CONTRIBUTING.md | How to contribute (branching, code style, PRs) |
| docs/API_DOCUMENTATION.md | Full API reference — all endpoints, request/response schemas, error codes |
| docs/webiu.postman_collection.json | Postman collection — import and test all endpoints instantly |
This project is licensed under the MIT License. See the LICENSE file for details.
