Update documentation, add the autoupdater workflow.

This commit is contained in:
2025-12-10 21:20:02 +00:00
parent 9d4de0e6b6
commit 1fba795fba
3 changed files with 914 additions and 134 deletions
+20
View File
@@ -0,0 +1,20 @@
name: Autoupdate go.mod and go.sum
on:
workflow_dispatch:
schedule:
- cron: "0 3 * * *"
permissions:
contents: write
actions: write
pull-requests: write
jobs:
autoupdate:
uses: lukaszraczylo/shared-actions/.github/workflows/go-autoupdate.yaml@main
with:
go-version: "1.24"
release-workflow: "release.yml"
secrets:
pat-token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
+427
View File
@@ -0,0 +1,427 @@
<p align="center">
<img src="https://img.icons8.com/fluency/96/rocket.png" alt="Git Velocity Logo" width="96" height="96"/>
</p>
<h1 align="center">Git Velocity</h1>
<p align="center">
<strong>Turn your GitHub activity into a game. Track velocity. Earn achievements. Win at development.</strong>
</p>
<p align="center">
<a href="https://github.com/lukaszraczylo/git-velocity/releases"><img src="https://img.shields.io/github/v/release/lukaszraczylo/git-velocity?style=flat-square&color=ff69b4" alt="Release"></a>
<a href="https://github.com/lukaszraczylo/git-velocity/blob/main/LICENSE"><img src="https://img.shields.io/github/license/lukaszraczylo/git-velocity?style=flat-square&color=a855f7" alt="License"></a>
<a href="https://goreportcard.com/report/github.com/lukaszraczylo/git-velocity"><img src="https://goreportcard.com/badge/github.com/lukaszraczylo/git-velocity?style=flat-square" alt="Go Report Card"></a>
<a href="https://github.com/lukaszraczylo/git-velocity/actions"><img src="https://img.shields.io/github/actions/workflow/status/lukaszraczylo/git-velocity/release.yml?style=flat-square&label=release" alt="Release Status"></a>
</p>
<p align="center">
<a href="#-features">Features</a> •
<a href="#-quick-start">Quick Start</a> •
<a href="#-github-action">GitHub Action</a> •
<a href="#-configuration">Configuration</a> •
<a href="#-achievements">Achievements</a>
</p>
---
## What is Git Velocity?
Git Velocity analyzes your GitHub repositories and generates a **beautiful, gamified dashboard** showing developer velocity metrics. It's like Spotify Wrapped, but for your code contributions.
```bash
$ git-velocity analyze --config .git-velocity.yaml
🚀 Fetching data from GitHub...
📊 Processing 3 repositories...
🏆 Calculating scores and achievements...
✨ Generated dashboard at ./dist
$ git-velocity serve --port 8080
🌐 Starting preview server at http://localhost:8080
```
## ✨ Features
### 📊 Comprehensive Metrics
- **Commits**: Count, lines added/deleted, files changed
- **Pull Requests**: Opened, merged, closed, average size, time to merge
- **Code Reviews**: Reviews given, comments, approvals, response time
- **Issues**: Opened, closed, comments
### 🎮 Gamification Engine
- **Scoring System**: Earn points for every contribution
- **34 Achievements**: From "First Steps" to "Code Warrior"
- **Leaderboards**: Compete with your team
- **Tier Progression**: Bronze → Silver → Gold → Diamond
### 👥 Team Analytics
- Configure teams and see aggregated metrics
- Team leaderboards and comparisons
- Member contribution breakdowns
### ⚡ Performance Optimized
- **Local Git Analysis**: Clone repos locally for 10x faster commit analysis
- **Smart Caching**: File-based caching with configurable TTL
- **Concurrent Requests**: Parallel API calls for faster data fetching
- **Bot Filtering**: Automatically excludes Dependabot, Renovate, and other bots
### 🎨 Beautiful Dashboard
- Modern Vue.js SPA with dark/light mode
- Responsive design for desktop and mobile
- Interactive charts and visualizations
- GitHub Pages deployment ready
### 🔐 Flexible Authentication
- Personal Access Token (PAT)
- GitHub App authentication
- Environment variable support
## 🚀 Quick Start
### Installation
```bash
# Go install
go install github.com/lukaszraczylo/git-velocity/cmd/git-velocity@latest
# Or download binary from releases
# https://github.com/lukaszraczylo/git-velocity/releases
```
### Create Configuration
Create `.git-velocity.yaml` in your repository:
```yaml
version: "1.0"
auth:
github_token: "${GITHUB_TOKEN}"
repositories:
- owner: "your-org"
name: "your-repo"
# Or use patterns:
- owner: "your-org"
pattern: "*" # All repos in org
teams:
- name: "Backend Team"
members: ["dev1", "dev2", "dev3"]
color: "#3B82F6"
- name: "Frontend Team"
members: ["dev4", "dev5"]
color: "#10B981"
scoring:
enabled: true
points:
commit: 10
commit_with_tests: 15
pr_opened: 25
pr_merged: 50
pr_reviewed: 30
fast_review_1h: 50
fast_review_4h: 25
output:
directory: "./dist"
```
### Run Analysis
```bash
# Set your GitHub token
export GITHUB_TOKEN=ghp_your_token_here
# Run analysis
git-velocity analyze --config .git-velocity.yaml --verbose
# Preview the dashboard
git-velocity serve --port 8080
```
## 🤖 GitHub Action
Automate your velocity reports with our GitHub Action:
```yaml
name: Git Velocity Report
on:
schedule:
- cron: '0 0 * * 1' # Weekly on Monday
workflow_dispatch: # Manual trigger
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Git Velocity Analysis
uses: lukaszraczylo/git-velocity/.github/actions/git-velocity@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
config_file: '.git-velocity.yaml'
output_dir: './velocity-report'
deploy_gh_pages: 'true'
upload_artifact: 'true'
artifact_name: 'velocity-dashboard'
```
### Action Inputs
| Input | Description | Default |
|-------|-------------|---------|
| `github_token` | GitHub token for API access | **Required** |
| `config_file` | Path to configuration file | `.git-velocity.yaml` |
| `output_dir` | Output directory for dashboard | `./dist` |
| `deploy_gh_pages` | Deploy to GitHub Pages | `false` |
| `upload_artifact` | Upload as workflow artifact | `true` |
| `artifact_name` | Name for the artifact | `git-velocity-dashboard` |
### Action Outputs
| Output | Description |
|--------|-------------|
| `output_dir` | Path to the generated dashboard |
## 🏆 Achievements
Git Velocity includes 34 unlockable achievements:
### Commit Achievements
| Achievement | Description | Threshold |
|-------------|-------------|-----------|
| 🍼 First Steps | Made your first commit | 1 commit |
| 🌱 Getting Started | Made 10 commits | 10 commits |
| 🔥 Committed | Made 100 commits | 100 commits |
| 🤖 Code Machine | Made 500 commits | 500 commits |
| 👑 Code Warrior | Made 1000 commits | 1000 commits |
### Pull Request Achievements
| Achievement | Description | Threshold |
|-------------|-------------|-----------|
| 🔀 PR Pioneer | Opened your first PR | 1 PR |
| 🌿 Pull Request Pro | Opened 10 PRs | 10 PRs |
| 🔀 Merge Master | Opened 50 PRs | 50 PRs |
### Review Achievements
| Achievement | Description | Threshold |
|-------------|-------------|-----------|
| 🔍 Code Reviewer | Reviewed your first PR | 1 review |
| 👁️ Review Regular | Reviewed 25 PRs | 25 reviews |
| 🎓 Review Guru | Reviewed 100 PRs | 100 reviews |
### Speed Achievements
| Achievement | Description | Threshold |
|-------------|-------------|-----------|
| ⚡ Speed Demon | Avg review response < 1 hour | < 1h |
| ⏰ Quick Responder | Avg review response < 4 hours | < 4h |
### Activity Pattern Achievements
| Achievement | Description | Threshold |
|-------------|-------------|-----------|
| 📅 Week Warrior | 7 day contribution streak | 7 days |
| 📆 Month Master | 30 day contribution streak | 30 days |
| 🌅 Early Bird | 50 commits before 9am | 50 commits |
| 🌙 Night Owl | 50 commits after 9pm | 50 commits |
| 💀 Nosferatu | 25 commits between midnight-4am | 25 commits |
| 🛋️ Weekend Warrior | 25 weekend commits | 25 commits |
### Code Quality Achievements
| Achievement | Description | Threshold |
|-------------|-------------|-----------|
| 🗜️ Small PR Advocate | 10 PRs under 100 lines | 10 PRs |
| ⚛️ Atomic Commits Hero | 50 PRs under 100 lines | 50 PRs |
| ✅ Clean Code | 5 PRs merged without changes requested | 5 PRs |
| 💎 Flawless | 25 PRs merged without changes requested | 25 PRs |
## ⚙️ Configuration
### Full Configuration Reference
```yaml
version: "1.0"
auth:
# Option 1: Personal Access Token
github_token: "${GITHUB_TOKEN}"
# Option 2: GitHub App
github_app:
app_id: 123456
installation_id: 789012
private_key_path: "./private-key.pem"
repositories:
# Single repository
- owner: "your-org"
name: "repo-name"
# All repos in organization
- owner: "your-org"
pattern: "*"
# Pattern matching
- owner: "your-org"
pattern: "frontend-*"
date_range:
start: "2024-01-01"
end: "2024-12-31"
teams:
- name: "Backend Team"
members: ["user1", "user2"]
color: "#3B82F6"
scoring:
enabled: true
points:
commit: 10
commit_with_tests: 15
lines_added: 0.1
lines_deleted: 0.05
pr_opened: 25
pr_merged: 50
pr_reviewed: 30
review_comment: 5
issue_opened: 15
issue_closed: 20
fast_review_1h: 50
fast_review_4h: 25
fast_review_24h: 10
output:
directory: "./dist"
format: ["html", "json"]
deploy:
gh_pages: true
artifact: true
cache:
enabled: true
directory: "./.cache"
ttl: "24h"
options:
concurrent_requests: 5
include_bots: false
bot_patterns:
- "*[bot]"
- "dependabot*"
- "renovate*"
use_local_git: true
clone_directory: "./.repos"
user_aliases:
- github_login: "username"
emails: ["work@example.com", "personal@example.com"]
names: ["Full Name", "nickname"]
```
### User Aliases
Map multiple git emails/names to a single GitHub login:
```yaml
options:
user_aliases:
- github_login: "johndoe"
emails:
- "john.doe@company.com"
- "johnd@personal.com"
names:
- "John Doe"
- "JD"
```
### Environment Variables
All configuration values support environment variable expansion:
```yaml
auth:
github_token: "${GITHUB_TOKEN}"
github_app:
private_key: "${GITHUB_APP_PRIVATE_KEY}"
```
## 📖 CLI Commands
### `analyze`
Analyze repositories and generate the dashboard.
```bash
git-velocity analyze [flags]
Flags:
-c, --config string Path to configuration file (default "config.yaml")
-o, --output string Output directory for generated site (default "./dist")
-v, --verbose Enable verbose output
```
### `serve`
Start a local preview server.
```bash
git-velocity serve [flags]
Flags:
-d, --directory string Directory to serve (default "./dist")
-p, --port string Port to listen on (default "8080")
```
### `version`
Print version information.
```bash
git-velocity version
```
## 🛠️ Development
```bash
# Clone repository
git clone https://github.com/lukaszraczylo/git-velocity.git
cd git-velocity
# Install dependencies
go mod download
cd web && npm install && cd ..
# Build
make build
# Run tests
make test
# Build SPA
make build-spa
```
## 📄 License
MIT License - see [LICENSE](LICENSE) for details.
## 🙏 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
---
<p align="center">
Made with ❤️ by <a href="https://github.com/lukaszraczylo">Lukasz Raczylo</a>
</p>
<p align="center">
<a href="https://github.com/lukaszraczylo/git-velocity">⭐ Star this repo</a> if you find it useful!
</p>
+467 -134
View File
@@ -6,8 +6,14 @@
<title>Git Velocity - Developer Metrics & Gamification Dashboard</title>
<meta
name="description"
content="Analyze Git repositories for developer velocity metrics with gamification. Generate beautiful dashboards with leaderboards, achievements, and team insights."
content="Turn your GitHub activity into a game. Track velocity metrics, earn achievements, and compete on leaderboards with beautiful dashboards."
/>
<meta name="keywords" content="git, github, velocity, metrics, developer, productivity, gamification, leaderboard, achievements, dashboard" />
<meta name="author" content="Lukasz Raczylo" />
<meta property="og:title" content="Git Velocity - Developer Metrics & Gamification" />
<meta property="og:description" content="Turn your GitHub activity into a game. Track velocity, earn achievements, win at development." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://lukaszraczylo.github.io/git-velocity/" />
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
@@ -38,8 +44,13 @@
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-10px); }
}
@keyframes pulse-glow {
0%, 100% { box-shadow: 0 0 20px rgba(244, 114, 182, 0.4); }
50% { box-shadow: 0 0 40px rgba(192, 132, 252, 0.6); }
}
.animate-fade-in-up { animation: fadeInUp 0.6s ease-out; }
.animate-float { animation: float 3s ease-in-out infinite; }
.animate-pulse-glow { animation: pulse-glow 2s ease-in-out infinite; }
.glass {
background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(10px);
@@ -62,9 +73,28 @@
-webkit-text-fill-color: transparent;
background-clip: text;
}
.gradient-border {
position: relative;
background: linear-gradient(135deg, #f472b6, #c084fc);
padding: 2px;
border-radius: 1rem;
}
.gradient-border > div {
background: white;
border-radius: calc(1rem - 2px);
}
.dark .gradient-border > div {
background: #1f2937;
}
.shadow-modern { box-shadow: 0 10px 40px -10px rgba(0, 0, 0, 0.1); }
.dark .shadow-modern { box-shadow: 0 10px 40px -10px rgba(0, 0, 0, 0.4); }
html { scroll-behavior: smooth; }
.achievement-card {
transition: all 0.3s ease;
}
.achievement-card:hover {
transform: translateY(-4px) scale(1.02);
}
</style>
<script>
if (localStorage.theme === "dark" || (!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches)) {
@@ -85,8 +115,9 @@
</a>
<div class="hidden md:flex space-x-6">
<a href="#features" class="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 font-medium">Features</a>
<a href="#achievements" class="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 font-medium">Achievements</a>
<a href="#installation" class="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 font-medium">Installation</a>
<a href="#usage" class="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 font-medium">Usage</a>
<a href="#github-action" class="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 font-medium">GitHub Action</a>
<a href="#configuration" class="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 font-medium">Configuration</a>
</div>
<div class="flex items-center space-x-4">
@@ -107,8 +138,9 @@
<div id="mobile-menu" class="hidden md:hidden border-t border-gray-200 dark:border-gray-700">
<div class="px-4 py-3 space-y-1 bg-white dark:bg-gray-800">
<a href="#features" class="block px-3 py-3 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 rounded font-medium">Features</a>
<a href="#achievements" class="block px-3 py-3 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 rounded font-medium">Achievements</a>
<a href="#installation" class="block px-3 py-3 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 rounded font-medium">Installation</a>
<a href="#usage" class="block px-3 py-3 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 rounded font-medium">Usage</a>
<a href="#github-action" class="block px-3 py-3 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 rounded font-medium">GitHub Action</a>
<a href="#configuration" class="block px-3 py-3 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 rounded font-medium">Configuration</a>
</div>
</div>
@@ -129,23 +161,23 @@
</div>
</div>
<h1 class="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold text-gray-900 dark:text-gray-100 mb-4 sm:mb-6 leading-tight animate-fade-in-up" style="animation-delay: 0.1s;">
Developer Velocity<br /><span class="gradient-text">Dashboard</span>
Turn Your GitHub Activity<br /><span class="gradient-text">Into a Game</span>
</h1>
<p class="text-base sm:text-lg md:text-xl text-gray-600 dark:text-gray-300 mb-8 sm:mb-10 max-w-2xl mx-auto leading-relaxed px-4 animate-fade-in-up" style="animation-delay: 0.2s;">
Analyze GitHub repositories for developer metrics with gamification. Generate beautiful dashboards with leaderboards, achievements, and team insights.
Track velocity metrics, earn achievements, compete on leaderboards. Generate beautiful dashboards that make your contributions shine.
</p>
<div class="flex flex-col sm:flex-row gap-3 sm:gap-4 justify-center mb-8 sm:mb-12 px-4 animate-fade-in-up" style="animation-delay: 0.3s;">
<a href="#installation" class="group relative bg-gradient-to-r from-pink-500 to-purple-600 hover:from-pink-600 hover:to-purple-700 text-white px-8 py-3 rounded-lg font-medium transition-all duration-300 min-h-[48px] flex items-center justify-center shadow-lg hover:shadow-xl hover:scale-105">
<span class="relative z-10">Get Started</span>
<span class="relative z-10"><i class="fas fa-download mr-2"></i>Get Started</span>
</a>
<a href="https://github.com/lukaszraczylo/git-velocity" class="group glass hover:shadow-lg text-gray-900 dark:text-gray-100 px-8 py-3 rounded-lg font-medium transition-all duration-300 min-h-[48px] flex items-center justify-center hover:scale-105">
<i class="fab fa-github mr-2"></i>View on GitHub
</a>
</div>
<div class="flex flex-wrap justify-center gap-2 sm:gap-4 text-sm px-4">
<img src="https://img.shields.io/github/v/release/lukaszraczylo/git-velocity" alt="Version" class="h-5" />
<img src="https://img.shields.io/github/license/lukaszraczylo/git-velocity" alt="License" class="h-5" />
<img src="https://goreportcard.com/badge/github.com/lukaszraczylo/git-velocity" alt="Go Report" class="h-5" />
<img src="https://img.shields.io/github/v/release/lukaszraczylo/git-velocity?style=flat-square&color=f472b6" alt="Version" class="h-5" />
<img src="https://img.shields.io/github/license/lukaszraczylo/git-velocity?style=flat-square&color=a855f7" alt="License" class="h-5" />
<img src="https://goreportcard.com/badge/github.com/lukaszraczylo/git-velocity?style=flat-square" alt="Go Report" class="h-5" />
</div>
<div class="mt-12 sm:mt-16 max-w-3xl mx-auto px-4 animate-fade-in-up" style="animation-delay: 0.4s;">
<div class="relative group">
@@ -157,9 +189,10 @@
<div class="w-3 h-3 rounded-full bg-green-500"></div>
<span class="ml-2 text-gray-400 text-sm">terminal</span>
</div>
<pre class="text-gray-100 text-sm sm:text-base overflow-x-auto"><code><span class="text-gray-400">$</span> git-velocity analyze --config config.yaml
<pre class="text-gray-100 text-sm sm:text-base overflow-x-auto"><code><span class="text-gray-400">$</span> git-velocity analyze --config .git-velocity.yaml
<span class="text-pink-400">Fetching data from GitHub...</span>
<span class="text-purple-400">Processing 3 repositories...</span>
<span class="text-yellow-400">Calculating scores and achievements...</span>
<span class="text-green-400">Generated dashboard at ./dist</span>
<span class="text-gray-400">$</span> git-velocity serve --port 8080
@@ -171,12 +204,36 @@
</div>
</section>
<!-- Stats Section -->
<section class="py-8 bg-white dark:bg-gray-900 border-y border-gray-200 dark:border-gray-800 theme-transition">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="grid grid-cols-2 md:grid-cols-4 gap-6 text-center">
<div>
<div class="text-3xl sm:text-4xl font-bold gradient-text">34</div>
<div class="text-sm text-gray-600 dark:text-gray-400">Achievements</div>
</div>
<div>
<div class="text-3xl sm:text-4xl font-bold gradient-text">15+</div>
<div class="text-sm text-gray-600 dark:text-gray-400">Metrics Tracked</div>
</div>
<div>
<div class="text-3xl sm:text-4xl font-bold gradient-text">10x</div>
<div class="text-sm text-gray-600 dark:text-gray-400">Faster with Local Git</div>
</div>
<div>
<div class="text-3xl sm:text-4xl font-bold gradient-text">100%</div>
<div class="text-sm text-gray-600 dark:text-gray-400">Open Source</div>
</div>
</div>
</div>
</section>
<!-- Features Section -->
<section id="features" class="py-12 sm:py-16 md:py-20 bg-white dark:bg-gray-900 theme-transition">
<section id="features" class="py-12 sm:py-16 md:py-20 bg-gray-50 dark:bg-gray-800 theme-transition">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="text-center mb-8 sm:mb-12">
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">Features</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Everything you need to track developer productivity</p>
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">Powerful Features</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Everything you need to track and gamify developer productivity</p>
</div>
<div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-4">
<div class="glass p-5 rounded-xl group hover:shadow-lg transition-all duration-300">
@@ -185,8 +242,8 @@
<i class="fas fa-chart-line text-white"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Velocity Metrics</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Track commits, PRs, reviews, and code changes over time</p>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Comprehensive Metrics</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Track commits, PRs, reviews, issues, lines of code, and more across all repositories</p>
</div>
</div>
</div>
@@ -196,8 +253,8 @@
<i class="fas fa-trophy text-white"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Gamification</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Score points, earn achievements, and compete on leaderboards</p>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Gamification Engine</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Earn points, unlock 34 achievements, climb leaderboards, progress through tiers</p>
</div>
</div>
</div>
@@ -207,8 +264,8 @@
<i class="fas fa-users text-white"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Team Insights</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Configure teams and see aggregated team metrics</p>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Team Analytics</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Configure teams, see aggregated metrics, team leaderboards, and member breakdowns</p>
</div>
</div>
</div>
@@ -219,18 +276,18 @@
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">GitHub Action</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Run analysis automatically in your CI/CD pipeline</p>
<p class="text-sm text-gray-600 dark:text-gray-400">Automate analysis in CI/CD, deploy to GitHub Pages, upload as artifacts</p>
</div>
</div>
</div>
<div class="glass p-5 rounded-xl group hover:shadow-lg transition-all duration-300">
<div class="flex items-start gap-4">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-green-500 to-green-600 flex items-center justify-center flex-shrink-0 group-hover:scale-110 transition-transform duration-300">
<i class="fas fa-file-code text-white"></i>
<i class="fas fa-palette text-white"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Static Site</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Generate a beautiful Vue.js SPA dashboard</p>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Beautiful Dashboard</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Modern Vue.js SPA with dark/light mode, responsive design, interactive charts</p>
</div>
</div>
</div>
@@ -240,8 +297,41 @@
<i class="fas fa-bolt text-white"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Fast & Cached</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">File-based caching and concurrent API requests</p>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Blazing Fast</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Local git analysis, smart caching, concurrent API requests for maximum speed</p>
</div>
</div>
</div>
<div class="glass p-5 rounded-xl group hover:shadow-lg transition-all duration-300">
<div class="flex items-start gap-4">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-red-500 to-red-600 flex items-center justify-center flex-shrink-0 group-hover:scale-110 transition-transform duration-300">
<i class="fas fa-robot text-white"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Bot Filtering</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Automatically excludes Dependabot, Renovate, and other bot contributions</p>
</div>
</div>
</div>
<div class="glass p-5 rounded-xl group hover:shadow-lg transition-all duration-300">
<div class="flex items-start gap-4">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-teal-500 to-teal-600 flex items-center justify-center flex-shrink-0 group-hover:scale-110 transition-transform duration-300">
<i class="fas fa-key text-white"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">Flexible Auth</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Personal Access Token or GitHub App authentication with env var support</p>
</div>
</div>
</div>
<div class="glass p-5 rounded-xl group hover:shadow-lg transition-all duration-300">
<div class="flex items-start gap-4">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-yellow-500 to-yellow-600 flex items-center justify-center flex-shrink-0 group-hover:scale-110 transition-transform duration-300">
<i class="fas fa-user-group text-white"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-1">User Aliases</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">Map multiple git emails and names to single GitHub accounts for accurate stats</p>
</div>
</div>
</div>
@@ -249,18 +339,192 @@
</div>
</section>
<!-- Metrics Section -->
<section class="py-12 sm:py-16 md:py-20 bg-white dark:bg-gray-900 theme-transition">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="text-center mb-8 sm:mb-12">
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">What Gets Tracked</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Comprehensive developer activity metrics in real-time</p>
</div>
<div class="max-w-4xl mx-auto">
<div class="grid sm:grid-cols-2 gap-4">
<div class="glass p-5 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-10 h-10 rounded-lg bg-pink-100 dark:bg-pink-900/30 flex items-center justify-center">
<i class="fas fa-code-commit text-pink-500"></i>
</div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">Commits</h3>
</div>
<ul class="text-sm text-gray-600 dark:text-gray-400 space-y-1">
<li><i class="fas fa-check text-green-500 mr-2"></i>Total commit count</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Lines added & deleted</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Files changed</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Commits with tests</li>
</ul>
</div>
<div class="glass p-5 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-10 h-10 rounded-lg bg-purple-100 dark:bg-purple-900/30 flex items-center justify-center">
<i class="fas fa-code-pull-request text-purple-500"></i>
</div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">Pull Requests</h3>
</div>
<ul class="text-sm text-gray-600 dark:text-gray-400 space-y-1">
<li><i class="fas fa-check text-green-500 mr-2"></i>PRs opened, merged, closed</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Average PR size</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Time to merge</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Perfect PRs (no changes requested)</li>
</ul>
</div>
<div class="glass p-5 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-10 h-10 rounded-lg bg-indigo-100 dark:bg-indigo-900/30 flex items-center justify-center">
<i class="fas fa-eye text-indigo-500"></i>
</div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">Code Reviews</h3>
</div>
<ul class="text-sm text-gray-600 dark:text-gray-400 space-y-1">
<li><i class="fas fa-check text-green-500 mr-2"></i>Reviews given</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Review comments</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Approvals & change requests</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Average response time</li>
</ul>
</div>
<div class="glass p-5 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-10 h-10 rounded-lg bg-green-100 dark:bg-green-900/30 flex items-center justify-center">
<i class="fas fa-calendar-alt text-green-500"></i>
</div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">Activity Patterns</h3>
</div>
<ul class="text-sm text-gray-600 dark:text-gray-400 space-y-1">
<li><i class="fas fa-check text-green-500 mr-2"></i>Active days & streaks</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Early bird / night owl commits</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Weekend activity</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Repositories contributed</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- Achievements Section -->
<section id="achievements" class="py-12 sm:py-16 md:py-20 bg-gray-50 dark:bg-gray-800 theme-transition">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="text-center mb-8 sm:mb-12">
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">Unlock Achievements</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">34 achievements to earn across multiple categories</p>
</div>
<div class="grid sm:grid-cols-2 lg:grid-cols-4 gap-4">
<!-- Commit Achievements -->
<div class="achievement-card glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-pink-400 to-pink-600 flex items-center justify-center">
<i class="fas fa-baby text-white text-lg"></i>
</div>
<div>
<h4 class="font-semibold text-gray-900 dark:text-gray-100">First Steps</h4>
<p class="text-xs text-gray-500 dark:text-gray-400">1 commit</p>
</div>
</div>
</div>
<div class="achievement-card glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-orange-400 to-orange-600 flex items-center justify-center">
<i class="fas fa-fire text-white text-lg"></i>
</div>
<div>
<h4 class="font-semibold text-gray-900 dark:text-gray-100">Committed</h4>
<p class="text-xs text-gray-500 dark:text-gray-400">100 commits</p>
</div>
</div>
</div>
<div class="achievement-card glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-yellow-400 to-yellow-600 flex items-center justify-center">
<i class="fas fa-crown text-white text-lg"></i>
</div>
<div>
<h4 class="font-semibold text-gray-900 dark:text-gray-100">Code Warrior</h4>
<p class="text-xs text-gray-500 dark:text-gray-400">1000 commits</p>
</div>
</div>
</div>
<div class="achievement-card glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-purple-400 to-purple-600 flex items-center justify-center">
<i class="fas fa-code-merge text-white text-lg"></i>
</div>
<div>
<h4 class="font-semibold text-gray-900 dark:text-gray-100">Merge Master</h4>
<p class="text-xs text-gray-500 dark:text-gray-400">50 PRs opened</p>
</div>
</div>
</div>
<div class="achievement-card glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-indigo-400 to-indigo-600 flex items-center justify-center">
<i class="fas fa-user-graduate text-white text-lg"></i>
</div>
<div>
<h4 class="font-semibold text-gray-900 dark:text-gray-100">Review Guru</h4>
<p class="text-xs text-gray-500 dark:text-gray-400">100 reviews</p>
</div>
</div>
</div>
<div class="achievement-card glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-blue-400 to-blue-600 flex items-center justify-center">
<i class="fas fa-bolt text-white text-lg"></i>
</div>
<div>
<h4 class="font-semibold text-gray-900 dark:text-gray-100">Speed Demon</h4>
<p class="text-xs text-gray-500 dark:text-gray-400">&lt;1h review time</p>
</div>
</div>
</div>
<div class="achievement-card glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-green-400 to-green-600 flex items-center justify-center">
<i class="fas fa-calendar-check text-white text-lg"></i>
</div>
<div>
<h4 class="font-semibold text-gray-900 dark:text-gray-100">Month Master</h4>
<p class="text-xs text-gray-500 dark:text-gray-400">30-day streak</p>
</div>
</div>
</div>
<div class="achievement-card glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-12 h-12 rounded-xl bg-gradient-to-br from-gray-600 to-gray-800 flex items-center justify-center">
<i class="fas fa-skull text-white text-lg"></i>
</div>
<div>
<h4 class="font-semibold text-gray-900 dark:text-gray-100">Nosferatu</h4>
<p class="text-xs text-gray-500 dark:text-gray-400">25 midnight commits</p>
</div>
</div>
</div>
</div>
<div class="text-center mt-8">
<p class="text-gray-600 dark:text-gray-400">...and 26 more achievements to unlock!</p>
</div>
</div>
</section>
<!-- Installation Section -->
<section id="installation" class="py-12 sm:py-16 md:py-20 bg-gray-50 dark:bg-gray-800 theme-transition">
<section id="installation" class="py-12 sm:py-16 md:py-20 bg-white dark:bg-gray-900 theme-transition">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="text-center mb-8 sm:mb-12">
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">Installation</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Get started in seconds</p>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Get started in under a minute</p>
</div>
<div class="max-w-3xl mx-auto space-y-6">
<div class="glass p-6 rounded-xl">
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-3 flex items-center">
<i class="fas fa-download mr-2 text-pink-500"></i>
Go Install
Go Install (Recommended)
</h3>
<pre class="bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto"><code>go install github.com/lukaszraczylo/git-velocity/cmd/git-velocity@latest</code></pre>
</div>
@@ -270,129 +534,79 @@
Download Binary
</h3>
<p class="text-gray-600 dark:text-gray-400 mb-3">Download from the <a href="https://github.com/lukaszraczylo/git-velocity/releases/latest" class="text-pink-600 dark:text-pink-400 hover:underline">releases page</a>.</p>
<p class="text-sm text-gray-500 dark:text-gray-400">Supported: macOS, Linux, Windows (amd64, arm64)</p>
</div>
<div class="glass p-6 rounded-xl">
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-3 flex items-center">
<i class="fab fa-github mr-2 text-indigo-500"></i>
GitHub Action
</h3>
<pre class="bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto text-sm"><code>- uses: lukaszraczylo/git-velocity/.github/actions/git-velocity@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
config_file: '.git-velocity.yaml'</code></pre>
<div class="flex flex-wrap gap-2">
<span class="px-3 py-1 bg-gray-100 dark:bg-gray-700 rounded-full text-sm">macOS (amd64, arm64)</span>
<span class="px-3 py-1 bg-gray-100 dark:bg-gray-700 rounded-full text-sm">Linux (amd64, arm64)</span>
<span class="px-3 py-1 bg-gray-100 dark:bg-gray-700 rounded-full text-sm">Windows (amd64)</span>
</div>
</div>
</div>
</div>
</section>
<!-- Usage Section -->
<section id="usage" class="py-12 sm:py-16 md:py-20 bg-white dark:bg-gray-900 theme-transition">
<!-- GitHub Action Section -->
<section id="github-action" class="py-12 sm:py-16 md:py-20 bg-gray-50 dark:bg-gray-800 theme-transition">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="text-center mb-8 sm:mb-12">
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">Usage</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Simple CLI commands</p>
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">GitHub Action</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Automate your velocity reports in CI/CD</p>
</div>
<div class="max-w-4xl mx-auto space-y-8">
<div class="glass p-6 rounded-xl">
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-4 flex items-center text-xl">
<i class="fas fa-terminal mr-2 text-pink-500"></i>
CLI Commands
</h3>
<pre class="bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto mb-4"><code><span class="text-gray-400"># Analyze repositories and generate dashboard</span>
git-velocity analyze --config config.yaml --output ./dist
<span class="text-gray-400"># Start local preview server</span>
git-velocity serve --directory ./dist --port 8080
<span class="text-gray-400"># Show version</span>
git-velocity version</code></pre>
<div class="grid sm:grid-cols-2 gap-4 text-sm">
<div>
<h4 class="font-medium text-gray-900 dark:text-gray-100 mb-2">Analyze Flags</h4>
<ul class="space-y-1 text-gray-600 dark:text-gray-400">
<li><code class="text-pink-600 dark:text-pink-400">-c, --config</code> Path to config file</li>
<li><code class="text-pink-600 dark:text-pink-400">-o, --output</code> Output directory</li>
<li><code class="text-pink-600 dark:text-pink-400">-v, --verbose</code> Verbose output</li>
</ul>
</div>
<div>
<h4 class="font-medium text-gray-900 dark:text-gray-100 mb-2">Serve Flags</h4>
<ul class="space-y-1 text-gray-600 dark:text-gray-400">
<li><code class="text-pink-600 dark:text-pink-400">-d, --directory</code> Directory to serve</li>
<li><code class="text-pink-600 dark:text-pink-400">-p, --port</code> Port to listen on</li>
</ul>
</div>
</div>
</div>
<div class="glass p-6 rounded-xl">
<div class="max-w-4xl mx-auto">
<div class="glass p-6 rounded-xl mb-6">
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-4 flex items-center text-xl">
<i class="fab fa-github mr-2 text-purple-500"></i>
GitHub Action Example
Workflow Example
</h3>
<pre class="bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto text-sm"><code>name: Git Velocity Analysis
<pre class="bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto text-sm"><code><span class="text-purple-400">name:</span> Git Velocity Report
on:
schedule:
- cron: '0 0 * * 1' # Weekly on Monday
workflow_dispatch:
<span class="text-purple-400">on:</span>
<span class="text-pink-400">schedule:</span>
- <span class="text-indigo-400">cron:</span> '0 0 * * 1' <span class="text-gray-500"># Weekly on Monday</span>
<span class="text-pink-400">workflow_dispatch:</span> <span class="text-gray-500"># Manual trigger</span>
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
<span class="text-purple-400">jobs:</span>
<span class="text-pink-400">analyze:</span>
<span class="text-indigo-400">runs-on:</span> ubuntu-latest
<span class="text-indigo-400">steps:</span>
- <span class="text-blue-400">uses:</span> actions/checkout@v4
- name: Run Git Velocity Analysis
uses: lukaszraczylo/git-velocity/.github/actions/git-velocity@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
config_file: '.git-velocity.yaml'
output_dir: './dist'
deploy_gh_pages: 'true'
upload_artifact: 'true'</code></pre>
- <span class="text-blue-400">name:</span> Run Git Velocity Analysis
<span class="text-blue-400">uses:</span> lukaszraczylo/git-velocity/.github/actions/git-velocity@main
<span class="text-blue-400">with:</span>
<span class="text-green-400">github_token:</span> ${{ secrets.GITHUB_TOKEN }}
<span class="text-green-400">config_file:</span> '.git-velocity.yaml'
<span class="text-green-400">output_dir:</span> './velocity-report'
<span class="text-green-400">deploy_gh_pages:</span> 'true'
<span class="text-green-400">upload_artifact:</span> 'true'</code></pre>
</div>
</div>
</div>
</section>
<!-- Metrics Section -->
<section class="py-12 sm:py-16 md:py-20 bg-gray-50 dark:bg-gray-800 theme-transition">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="text-center mb-8 sm:mb-12">
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">What Gets Tracked</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Comprehensive developer activity metrics</p>
</div>
<div class="max-w-3xl mx-auto">
<div class="grid sm:grid-cols-2 gap-4">
<div class="glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-2">
<i class="fas fa-code-commit text-pink-500"></i>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">Commits</h3>
</div>
<p class="text-sm text-gray-600 dark:text-gray-400">Total commits, lines added/deleted, files changed</p>
<h4 class="font-semibold text-gray-900 dark:text-gray-100 mb-3 flex items-center">
<i class="fas fa-arrow-right-to-bracket mr-2 text-pink-500"></i>Inputs
</h4>
<ul class="text-sm text-gray-600 dark:text-gray-400 space-y-2">
<li><code class="text-pink-600 dark:text-pink-400">github_token</code> - API access (required)</li>
<li><code class="text-pink-600 dark:text-pink-400">config_file</code> - Config path</li>
<li><code class="text-pink-600 dark:text-pink-400">output_dir</code> - Output directory</li>
<li><code class="text-pink-600 dark:text-pink-400">deploy_gh_pages</code> - Auto-deploy</li>
<li><code class="text-pink-600 dark:text-pink-400">upload_artifact</code> - Save artifact</li>
</ul>
</div>
<div class="glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-2">
<i class="fas fa-code-pull-request text-purple-500"></i>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">Pull Requests</h3>
<h4 class="font-semibold text-gray-900 dark:text-gray-100 mb-3 flex items-center">
<i class="fas fa-arrow-right-from-bracket mr-2 text-purple-500"></i>Outputs
</h4>
<ul class="text-sm text-gray-600 dark:text-gray-400 space-y-2">
<li><code class="text-purple-600 dark:text-purple-400">output_dir</code> - Generated dashboard path</li>
</ul>
<div class="mt-4 pt-4 border-t border-gray-200 dark:border-gray-600">
<h5 class="font-medium text-gray-900 dark:text-gray-100 mb-2">Features</h5>
<ul class="text-sm text-gray-600 dark:text-gray-400 space-y-1">
<li><i class="fas fa-check text-green-500 mr-2"></i>Auto GitHub Pages deploy</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Artifact retention (30 days)</li>
<li><i class="fas fa-check text-green-500 mr-2"></i>Go 1.23 + Node 20</li>
</ul>
</div>
<p class="text-sm text-gray-600 dark:text-gray-400">PRs opened, merged, closed, average size</p>
</div>
<div class="glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-2">
<i class="fas fa-eye text-indigo-500"></i>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">Code Reviews</h3>
</div>
<p class="text-sm text-gray-600 dark:text-gray-400">Reviews given, comments, approvals, response time</p>
</div>
<div class="glass p-4 rounded-xl">
<div class="flex items-center gap-3 mb-2">
<i class="fas fa-exclamation-circle text-green-500"></i>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">Issues</h3>
</div>
<p class="text-sm text-gray-600 dark:text-gray-400">Issues opened, closed, comments</p>
</div>
</div>
</div>
@@ -406,40 +620,137 @@ jobs:
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">Configuration</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Customize everything via YAML</p>
</div>
<div class="max-w-3xl mx-auto">
<div class="max-w-4xl mx-auto">
<div class="glass p-6 rounded-xl">
<h3 class="font-semibold text-gray-900 dark:text-gray-100 mb-4">.git-velocity.yaml</h3>
<pre class="bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto text-sm"><code><span class="text-pink-400">version:</span> "1.0"
<span class="text-pink-400">auth:</span>
<span class="text-purple-400">github_token:</span> "${GITHUB_TOKEN}"
<span class="text-gray-500"># Or use GitHub App authentication:</span>
<span class="text-gray-500"># github_app:</span>
<span class="text-gray-500"># app_id: 123456</span>
<span class="text-gray-500"># installation_id: 789012</span>
<span class="text-gray-500"># private_key_path: "./private-key.pem"</span>
<span class="text-pink-400">repositories:</span>
- <span class="text-purple-400">owner:</span> "your-org"
<span class="text-purple-400">name:</span> "your-repo"
- <span class="text-purple-400">owner:</span> "your-org"
<span class="text-purple-400">pattern:</span> "*" <span class="text-gray-500"># All repos in org</span>
<span class="text-pink-400">date_range:</span>
<span class="text-purple-400">start:</span> "2024-01-01"
<span class="text-purple-400">end:</span> "2024-12-31"
<span class="text-pink-400">teams:</span>
- <span class="text-purple-400">name:</span> "Backend Team"
<span class="text-purple-400">members:</span> ["dev1", "dev2"]
<span class="text-purple-400">members:</span> ["dev1", "dev2", "dev3"]
<span class="text-purple-400">color:</span> "#3B82F6"
- <span class="text-purple-400">name:</span> "Frontend Team"
<span class="text-purple-400">members:</span> ["dev4", "dev5"]
<span class="text-purple-400">color:</span> "#10B981"
<span class="text-pink-400">scoring:</span>
<span class="text-purple-400">enabled:</span> true
<span class="text-purple-400">points:</span>
<span class="text-indigo-400">commit:</span> 10
<span class="text-indigo-400">commit_with_tests:</span> 15
<span class="text-indigo-400">pr_opened:</span> 25
<span class="text-indigo-400">pr_merged:</span> 50
<span class="text-indigo-400">pr_reviewed:</span> 30
<span class="text-indigo-400">review_comment:</span> 5
<span class="text-indigo-400">fast_review_1h:</span> 50
<span class="text-indigo-400">fast_review_4h:</span> 25
<span class="text-pink-400">output:</span>
<span class="text-purple-400">directory:</span> "./dist"
<span class="text-purple-400">format:</span> ["html", "json"]
<span class="text-purple-400">deploy:</span>
<span class="text-indigo-400">gh_pages:</span> true</code></pre>
<span class="text-indigo-400">gh_pages:</span> true
<span class="text-indigo-400">artifact:</span> true
<span class="text-pink-400">cache:</span>
<span class="text-purple-400">enabled:</span> true
<span class="text-purple-400">directory:</span> "./.cache"
<span class="text-purple-400">ttl:</span> "24h"
<span class="text-pink-400">options:</span>
<span class="text-purple-400">concurrent_requests:</span> 5
<span class="text-purple-400">include_bots:</span> false
<span class="text-purple-400">use_local_git:</span> true
<span class="text-purple-400">user_aliases:</span>
- <span class="text-indigo-400">github_login:</span> "johndoe"
<span class="text-indigo-400">emails:</span> ["john@work.com", "john@personal.com"]</code></pre>
</div>
</div>
</div>
</section>
<!-- CLI Section -->
<section class="py-12 sm:py-16 md:py-20 bg-gray-50 dark:bg-gray-800 theme-transition">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="text-center mb-8 sm:mb-12">
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold text-gray-900 dark:text-gray-100 mb-3 sm:mb-4">CLI Commands</h2>
<p class="text-base sm:text-lg text-gray-600 dark:text-gray-300 px-4">Simple and powerful command-line interface</p>
</div>
<div class="max-w-3xl mx-auto space-y-4">
<div class="glass p-5 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-10 h-10 rounded-lg bg-pink-100 dark:bg-pink-900/30 flex items-center justify-center">
<i class="fas fa-chart-bar text-pink-500"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">analyze</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">Analyze repositories and generate dashboard</p>
</div>
</div>
<pre class="bg-gray-900 text-gray-100 p-3 rounded-lg text-sm overflow-x-auto"><code>git-velocity analyze --config .git-velocity.yaml --output ./dist --verbose</code></pre>
</div>
<div class="glass p-5 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-10 h-10 rounded-lg bg-purple-100 dark:bg-purple-900/30 flex items-center justify-center">
<i class="fas fa-server text-purple-500"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">serve</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">Start local preview server</p>
</div>
</div>
<pre class="bg-gray-900 text-gray-100 p-3 rounded-lg text-sm overflow-x-auto"><code>git-velocity serve --directory ./dist --port 8080</code></pre>
</div>
<div class="glass p-5 rounded-xl">
<div class="flex items-center gap-3 mb-3">
<div class="w-10 h-10 rounded-lg bg-indigo-100 dark:bg-indigo-900/30 flex items-center justify-center">
<i class="fas fa-info-circle text-indigo-500"></i>
</div>
<div>
<h3 class="font-semibold text-gray-900 dark:text-gray-100">version</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">Print version information</p>
</div>
</div>
<pre class="bg-gray-900 text-gray-100 p-3 rounded-lg text-sm overflow-x-auto"><code>git-velocity version</code></pre>
</div>
</div>
</div>
</section>
<!-- CTA Section -->
<section class="py-16 sm:py-20 bg-gradient-to-br from-pink-500 via-purple-500 to-indigo-500 text-white">
<div class="max-w-4xl mx-auto px-4 sm:px-6 text-center">
<h2 class="text-2xl sm:text-3xl md:text-4xl font-bold mb-4">Ready to Gamify Your Git?</h2>
<p class="text-lg sm:text-xl opacity-90 mb-8 max-w-2xl mx-auto">Start tracking your velocity, earn achievements, and make development more engaging today.</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a href="#installation" class="bg-white text-purple-600 px-8 py-3 rounded-lg font-semibold hover:bg-gray-100 transition-all duration-300 shadow-lg hover:shadow-xl hover:scale-105">
<i class="fas fa-download mr-2"></i>Get Started
</a>
<a href="https://github.com/lukaszraczylo/git-velocity" class="bg-transparent border-2 border-white text-white px-8 py-3 rounded-lg font-semibold hover:bg-white/10 transition-all duration-300">
<i class="fab fa-github mr-2"></i>Star on GitHub
</a>
</div>
</div>
</section>
<!-- Footer -->
<footer class="py-8 bg-gray-100 dark:bg-gray-800 theme-transition">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
@@ -458,6 +769,9 @@ jobs:
<a href="https://github.com/lukaszraczylo/git-velocity/releases" class="text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 text-sm">
Releases
</a>
<a href="https://github.com/lukaszraczylo" class="text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 text-sm">
Author
</a>
</div>
<p class="text-gray-500 dark:text-gray-400 text-sm">MIT License</p>
</div>
@@ -495,6 +809,25 @@ jobs:
document.getElementById('menu-close-icon').classList.add('hidden');
});
});
// Intersection Observer for scroll animations
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('animate-fade-in-up');
observer.unobserve(entry.target);
}
});
}, observerOptions);
document.querySelectorAll('section > div').forEach(el => {
observer.observe(el);
});
</script>
</body>
</html>