{"id":40281405,"url":"https://github.com/pacphi/ampel","last_synced_at":"2026-02-14T17:13:38.840Z","repository":{"id":327356896,"uuid":"1108936541","full_name":"pacphi/ampel","owner":"pacphi","description":"PR management dashboard and MCP server with support for Github, Gitlab, and Bitbucket","archived":false,"fork":false,"pushed_at":"2026-01-17T16:04:11.000Z","size":3397,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-17T17:24:06.346Z","etag":null,"topics":["git","multi-repo"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pacphi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-03T05:45:38.000Z","updated_at":"2026-01-15T20:51:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pacphi/ampel","commit_stats":null,"previous_names":["pacphi/ampel"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pacphi/ampel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacphi%2Fampel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacphi%2Fampel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacphi%2Fampel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacphi%2Fampel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pacphi","download_url":"https://codeload.github.com/pacphi/ampel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pacphi%2Fampel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28595333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T02:08:49.799Z","status":"ssl_error","status_checked_at":"2026-01-20T02:08:44.148Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","multi-repo"],"created_at":"2026-01-20T04:03:29.715Z","updated_at":"2026-01-20T04:03:29.987Z","avatar_url":"https://github.com/pacphi.png","language":"Rust","readme":"# Ampel 🚦\n\n[![CI](https://github.com/pacphi/ampel/actions/workflows/ci.yml/badge.svg)](https://github.com/pacphi/ampel/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/pacphi/ampel/branch/main/graph/badge.svg)](https://codecov.io/gh/pacphi/ampel)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n\u003e **See your PRs at a glance.** Ampel brings traffic light simplicity to PR management across GitHub, GitLab, and Bitbucket.\n\nAmpel (German for \"traffic light\") is a unified PR dashboard that consolidates pull requests from multiple Git providers into a single interface, using an intuitive traffic light system to show what's ready to merge, what's in progress, and what's blocked.\n\n## Why Ampel?\n\n- 🎯 **Stop Context-Switching** - No more jumping between GitHub, GitLab, and Bitbucket. Everything in one dashboard.\n- ⚡ **Instant Visibility** - Traffic light status (🟢 Green = ready, 🟡 Yellow = in progress, 🔴 Red = blocked) cuts through the noise.\n- 🚀 **Production-Ready** - Battle-tested observability stack with Prometheus metrics, Grafana dashboards, and comprehensive monitoring.\n- 🔒 **Self-Hosted \u0026 Secure** - Deploy on your infrastructure with AES-256-GCM encrypted PAT storage. No data leaves your control.\n- 🤝 **Team-First Design** - Organizations, teams, bulk merge operations, and health scores for managing repos at scale.\n\n## Quick Start\n\n**With Docker (fastest path to value):**\n\n```bash\ngit clone https://github.com/pacphi/ampel.git\ncd ampel \u0026\u0026 cp .env.example .env\ncd docker \u0026\u0026 docker compose up -d\n```\n\nOpen [http://localhost:3000](http://localhost:3000) and connect your first repository.\n\n**That's it.** You'll have a fully functional PR dashboard with monitoring stack in under 5 minutes.\n\n## ✨ Features\n\n### Core Capabilities\n\n- **Unified Dashboard** - GitHub, GitLab, and Bitbucket PRs in one view\n- **Traffic Light Status** - Visual health indicators with CI integration\n- **Smart Filtering** - Filter by provider, status, author, reviewer, labels, age\n- **Repository Health Scores** - Track team velocity and identify bottlenecks\n- **Multitenancy** - Organizations and teams with role-based access control\n- **Multi-Language Support** - 27 languages with RTL support (Arabic, Hebrew) and automatic detection\n\n### Advanced Features\n\n- **Bulk Merge Operations** - Merge multiple approved PRs with progress tracking\n- **Team Organization** - Group repos by team, customize dashboards\n- **Bot PR Rules** - Separate Dependabot/Renovate PRs with auto-merge support\n- **Analytics \u0026 Reporting** - PR cycle time, review turnaround, team velocity trends\n- **Production Monitoring** - Prometheus metrics, Grafana dashboards, distributed tracing\n- **Language Persistence** - User language preference saved to account and synced across devices\n\n[View complete feature matrix →](docs/planning/PRODUCT_SPEC.md)\n\n## 📚 Documentation\n\n### 🚀 Getting Started\n\n**First-time setup and quick wins:**\n\n- [Getting Started Guide](docs/GETTING_STARTED.md) - Installation, configuration, first repository\n- [PAT Setup Guide](docs/PAT_SETUP.md) - Configure GitHub, GitLab, Bitbucket Personal Access Tokens\n- [Docker Quick Start](docs/RUN.md) - Run Ampel with Docker in 3 commands\n- [Makefile Guide](docs/MAKEFILE_GUIDE.md) - Complete reference of all available commands\n\n### ✨ Features \u0026 Capabilities\n\n**Deep-dive into what Ampel can do:**\n\n- [Product Specification](docs/planning/PRODUCT_SPEC.md) - Complete feature matrix with implementation status\n- [Multitenancy](docs/features/MULTITENANCY.md) - Organizations, teams, and access control\n- [Bulk Merge Operations](docs/features/BULK_MERGE.md) - Merge multiple PRs with progress tracking\n- [Health Scores](docs/features/HEALTH_SCORES.md) - Repository health scoring and trend analysis\n\n### 🌍 Internationalization (i18n)\n\n**Multi-language support (27 languages with RTL support):**\n\n- Multi-language UI with 27 supported languages\n- RTL (right-to-left) support for Arabic, Hebrew, Persian, and Urdu\n- Automatic locale detection from browser settings\n- Language switcher in user settings\n\n**Developer Tools:**\n\n- **[ampel-i18n-builder](crates/ampel-i18n-builder/)** - Translation management CLI\n  - Extract translatable strings from TypeScript/React and Rust code\n  - **Refactor code** to automatically replace hardcoded strings with i18n calls\n  - Translate with 4-tier provider architecture (Systran → DeepL → Google → OpenAI)\n  - Generate TypeScript/Rust type definitions from translations\n  - Validate translation coverage and consistency\n\n\u003c!-- Documentation links - Coming soon:\n- User Guide - Change language, supported languages, RTL support, troubleshooting\n- Developer Guide - Add translatable strings, use i18n hooks/macros, test translations\n--\u003e\n\n### 🏗️ Architecture \u0026 Development\n\n**System design and contributing:**\n\n- [Architecture Overview](docs/ARCHITECTURE.md) - System design, crate structure, database models\n- [Development Guide](docs/DEVELOPMENT.md) - Local development setup and workflow\n- [Contributing Guide](docs/CONTRIBUTING.md) - How to contribute to Ampel\n\n### 🧪 Testing\n\n**Comprehensive testing documentation:**\n\n- [Testing Overview](docs/TESTING.md) - Testing strategy and quick reference\n- [Backend Testing](docs/testing/BACKEND.md) - Rust unit and integration tests (PostgreSQL/SQLite)\n- [Frontend Testing](docs/testing/FRONTEND.md) - React component testing with Vitest\n- [CI Workflows](docs/testing/CI.md) - GitHub Actions CI pipeline guide\n- [Coverage Tracking](docs/testing/COVERAGE.md) - Code coverage goals and reporting\n- [Worker Testing](docs/testing/WORKER-TEST-PATTERNS.md) - Background job test patterns\n\n### 📊 Observability\n\n**Production monitoring and troubleshooting:**\n\n- [Observability Overview](docs/observability/README.md) - **Start here** - Complete observability guide\n- [Quick Start (5 min)](docs/observability/QUICKSTART.md) - Get monitoring running locally\n- [Monitoring Guide](docs/observability/MONITORING.md) - Prometheus, Grafana, alerting setup\n- [Metrics Catalog](docs/observability/METRICS.md) - All available metrics with usage examples\n- [Prometheus Guide](docs/observability/PROMETHEUS.md) - Prometheus configuration and PromQL queries\n- [Grafana Dashboards](docs/observability/GRAFANA.md) - Dashboard creation and visualization\n- [API Endpoints](docs/observability/API-ENDPOINTS.md) - Health checks and metrics endpoints\n- [Troubleshooting](docs/observability/TROUBLESHOOTING.md) - Common issues and solutions\n\n### 🚀 Deployment\n\n**Production deployment guides:**\n\n- [Fly.io Deployment](docs/DEPLOY.md) - Deploy to Fly.io with native monitoring\n- [Docker Deployment](docs/RUN.md) - Self-hosted Docker setup\n- [Operations Runbook](docs/deployment/RUNBOOK.md) - Production operations guide\n- [Secrets Management](docs/deployment/SECRETS_TEMPLATE.md) - Environment variables and secrets\n- [Release Process](docs/RELEASE.md) - How to cut a release\n\n## 🛠️ Tech Stack\n\nBuilt with a modern, performant stack designed for production workloads:\n\n- **Backend**: Rust 1.92+ with Axum (REST API), SeaORM (database), Apalis (background jobs)\n- **Frontend**: React 19 + TypeScript, Vite, TanStack Query, shadcn/ui, Tailwind CSS\n- **Database**: PostgreSQL 16 for data, Redis 7 for caching\n- **Observability**: Prometheus metrics, Grafana dashboards, OpenTelemetry tracing\n- **Deployment**: Docker, Fly.io, self-hosted options\n\n[See complete architecture →](docs/ARCHITECTURE.md)\n\n## 📈 Project Status\n\n**Current Release**: MVP Complete (87% of planned features)\n\n**What's Working Today**:\n\n- ✅ Multi-provider PR aggregation (GitHub, GitLab, Bitbucket)\n- ✅ Traffic light status with CI integration\n- ✅ Team management and collaboration\n- ✅ Bulk merge operations with progress tracking\n- ✅ Health scoring and analytics\n- ✅ Production-ready observability stack\n\n**In Progress**:\n\n- 🚧 Notification workers (Slack, email)\n- 🚧 Bot filtering frontend UI\n- 🚧 Export functionality (CSV/PDF)\n\n[View detailed implementation status →](docs/planning/PRODUCT_SPEC.md)\n\n## Contributing\n\nWe welcome contributions! Whether you're fixing a bug, adding a feature, or improving documentation, your help makes Ampel better.\n\n**Get Started**:\n\n1. Read the [Contributing Guide](docs/CONTRIBUTING.md)\n2. Check the [Development Guide](docs/DEVELOPMENT.md) for setup\n3. Browse open issues or propose a new feature\n4. Submit a pull request\n\n## License\n\nMIT License — see [LICENSE](LICENSE) for details.\n\n---\n\n_Built with 🚦 by the Ampel team_\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpacphi%2Fampel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpacphi%2Fampel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpacphi%2Fampel/lists"}