Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ git rebase upstream/main
## Design Decisions You Must Respect

1. **Hidden rank column** — The rank column and some stats are intentionally invisible. Admins can select-all and copy the table for one-stroke data capture. Do not "fix" this visibility.

2. **Keep it simple** — Avoid over-engineering. no unnecessary abstractions.

## AI-Assisted Contributions
Expand Down
14 changes: 8 additions & 6 deletions GEMINI.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Gemini AI Context — Opensource Contribution Leaderboard
# Gemini AI Context — OpenSource Contribution Leaderboard

## What This Project Is

Expand All @@ -9,11 +9,11 @@ Built originally for Rocket.Chat's GSoC contributor tracking, but works for any
## Project Architecture (keep it simple)

```
index.html ← frontend (vanilla HTML, rendered via webpack)
src/index.js ← frontend JS entry point (axios + socket.io-client)
src/server/app.js ← Express server (serves static files + proxies API + spawns refresh)
src/server/refresh.js ← background worker that polls GitHub API and writes data.json
src/server/config.json ← YOUR config (copy from config-example.json)
index.html ← frontend (vanilla HTML, rendered via webpack)
src/index.js ← frontend JS entry point (axios + socket.io-client)
src/server/app.js ← Express server (serves static files + proxies API + spawns refresh)
src/server/refresh.js ← background worker that polls GitHub API and writes data.json
src/server/config.json ← YOUR config (copy from config-example.json)
src/server/util/API.js ← GitHub API calls
src/server/util/Util.js ← helper utilities
admin/ ← admin panel (separate webpack build)
Expand Down Expand Up @@ -74,7 +74,9 @@ Dynamic/runtime values stay in `config.json` (modifiable via admin panel):
## Design Decisions You Must Respect

1. **No code changes without explicit request.** This project favors documentation and configuration changes. Keep the codebase stable.

2. **Hidden rank column.** The rank column and some metadata are intentionally invisible on-screen. Admins can scrape the full stats by mouse-drag selecting the leaderboard table and copying — that's a one-stroke capture by design. Do not "fix" this by changing CSS or rendering logic.

3. **Simplicity over complexity.** Avoid over-engineering.

## REST API
Expand Down
47 changes: 46 additions & 1 deletion admin/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,48 @@
# GSoC-Contribution-Leaderboard-Node-Admin

This is the Administration Panel for GSoC-Contribution-Leaderboard-Node.
This is the Administration Panel for GSoC-Contribution-Leaderboard-Node.


Built to help communities like Rocket.Chat monitor contributor activity, engagement, and growth.


## 🚀 Features

### Get getOpenPRsNumber,
getMergedPRsNumber,
getIssuesNumber,
getStats,
getRanks

### 📈 Contribution Analytics Dashboard
- Visualize contributions over time
- Track Pull Requests, Issues, and Contributors
- Interactive charts using Analytics.js


### 🌱 Good First Issue Tracker
- Displays beginner-friendly issues
- Helps new contributors get started easily


## 🛠 Tech Stack

- HTML5
- CSS3
- Vanilla JavaScript (ES Modules)
- Analytics.js
- GitHub REST API

## 📁 Project Structure
src/
├── utils/
│ └── API.js
| |__ Util.js
├── index.js
├── style.css
index.html
Analytics.html



This project is open-source and available under the MIT License.
13 changes: 7 additions & 6 deletions admin/build/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const path = require('path')
const CleanWebpackPlugin = require('clean-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const InlineManifestWebpackPlugin = require('inline-manifest-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const optimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const merge = require('webpack-merge')
Expand Down Expand Up @@ -121,23 +121,24 @@ const production = merge(common, {
}
},
minimizer: [
new UglifyJsPlugin({
new TerserPlugin({
exclude: /\.min\.js$/,
cache: true,
parallel: true,
sourceMap: false,
extractComments: false,
uglifyOptions: {
parallel: 4,
terserOptions: {
ecma: 8,
compress: {
toplevel: true,
warnings: false,
},
output: {
comments: false
}
}
}),

}),

new optimizeCssAssetsPlugin({
assetNameRegExp: /\.css$/g,
cssProcessorOptions: {
Expand Down
Loading