{"id":50517444,"url":"https://github.com/kostiantyn-matsebora/deployment-dashboard","last_synced_at":"2026-06-03T01:01:13.766Z","repository":{"id":361943320,"uuid":"1240068001","full_name":"kostiantyn-matsebora/deployment-dashboard","owner":"kostiantyn-matsebora","description":"Real-time services × environments deployment matrix, sourced from CI/CD pipeline events. .NET 10 + Angular 20, live via SSE.","archived":false,"fork":false,"pushed_at":"2026-06-02T00:07:11.000Z","size":7377,"stargazers_count":0,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T00:17:09.184Z","etag":null,"topics":["angular","ci-cd","deployment-dashboard","deployment-tracking","devops","docker","dotnet","postgresql","self-hosted","server-sent-events"],"latest_commit_sha":null,"homepage":"https://kostiantyn-matsebora.github.io/deployment-dashboard/","language":"C#","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/kostiantyn-matsebora.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2026-05-15T18:26:36.000Z","updated_at":"2026-06-02T00:07:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kostiantyn-matsebora/deployment-dashboard","commit_stats":null,"previous_names":["kostiantyn-matsebora/deployment-dashboard"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/kostiantyn-matsebora/deployment-dashboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kostiantyn-matsebora%2Fdeployment-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kostiantyn-matsebora%2Fdeployment-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kostiantyn-matsebora%2Fdeployment-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kostiantyn-matsebora%2Fdeployment-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kostiantyn-matsebora","download_url":"https://codeload.github.com/kostiantyn-matsebora/deployment-dashboard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kostiantyn-matsebora%2Fdeployment-dashboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33843611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["angular","ci-cd","deployment-dashboard","deployment-tracking","devops","docker","dotnet","postgresql","self-hosted","server-sent-events"],"created_at":"2026-06-03T01:01:02.703Z","updated_at":"2026-06-03T01:01:13.749Z","avatar_url":"https://github.com/kostiantyn-matsebora.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/design/logo/logo-512.png\" alt=\"Deployment Dashboard\" width=\"120\" height=\"120\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eDeployment Dashboard\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  A real-time \u003cstrong\u003eservices × environments\u003c/strong\u003e deployment matrix, sourced straight from your CI/CD pipeline events.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/kostiantyn-matsebora/deployment-dashboard/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/kostiantyn-matsebora/deployment-dashboard/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/kostiantyn-matsebora/deployment-dashboard?display_name=tag\u0026sort=semver\" alt=\"Latest release\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://kostiantyn-matsebora.github.io/deployment-dashboard/\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs-online-blue\" alt=\"Docs\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://claude.com/claude-code\"\u003e\u003cimg src=\"https://img.shields.io/badge/built%20with-Claude%20Code-D97757?logo=claude\u0026logoColor=white\" alt=\"Built with Claude Code\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"docs/guide/quickstart.md\"\u003e\u003cstrong\u003eQuickstart\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"docs/guide/send-events.md\"\u003e\u003cstrong\u003eIntegrate your CI/CD\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"https://kostiantyn-matsebora.github.io/deployment-dashboard/\"\u003e\u003cstrong\u003eDocs\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs/_assets/screenshots/matrix-dark.png\"\u003e\n  \u003cimg src=\"docs/_assets/screenshots/matrix-light.png\" alt=\"Deployment matrix — services × environments\"\u003e\n\u003c/picture\u003e\n\n\u003e **The question it answers:** *What version of service X is running in environment Y right now — and did the last deployment succeed?*\n\n## Why Deployment Dashboard?\n\n- **Single-step integration.** One `POST /api/deployments` call — no plugins, no agent, no pipeline rewrite.\n- **Tool-agnostic.** GitHub Actions, Azure DevOps, GitLab CI, Jenkins, shell scripts — anything that can call a URL.\n- **One screen, instant answer.** Every service across every environment; no clicking through pipelines and logs.\n- **Live via SSE.** State changes push to every open browser within seconds — no refresh, no stale tab.\n- **Full append-only history.** Every deployment kept per slot (≥ 90 days, configurable); nothing overwritten.\n- **Auto-discovers topology.** Services and environments are derived from events you send — no registration, no config file.\n- **Secure by design.** Writes are API-key gated; reads are internal-only; the SPA holds no secrets.\n- **Pull mode when you can't push.** The optional Fetcher polls your CI/CD API and posts through the same contract.\n\n## Try it in 2 minutes\n\nZero config — no API keys, no database setup, no clone required.\n\n```bash\ndocker compose --project-directory . -f oci://ghcr.io/kostiantyn-matsebora/deployment-dashboard-compose-demo:latest --profile demo up\n```\n\nThen open:\n\n| URL | What you get |\n|---|---|\n| \u003chttp://localhost:8080\u003e | Live deployment matrix |\n| \u003chttp://localhost:8080/demo/\u003e | Demo Driver control panel |\n\nPrefer explicit local files? See the [Quickstart](docs/guide/quickstart.md) for the `curl` alternative.\n\n## Send your first deployment\n\nOne HTTP call from your pipeline — that's the whole integration:\n\n```bash\ncurl -X POST \"$DASHBOARD_URL/api/deployments\" \\\n  -H \"X-Api-Key: $DASHBOARD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"deployment_id\": \"build-42\",\n    \"service\":       \"checkout\",\n    \"environment\":   \"prod\",\n    \"version\":       \"1.4.2\",\n    \"status\":        \"success\",\n    \"happened_at\":   \"2026-06-01T10:00:00Z\"\n  }'\n```\n\n[GitHub Actions, Azure DevOps, GitLab \u0026 Jenkins examples →](docs/guide/send-events.md)\n\n## Two views\n\n- **Matrix** — one row per service, one column per environment; each tile shows version, status, actor, elapsed time, and a CI/CD run link.\n- **Swimlanes** — per-service deployment graphs showing how a version flows from `dev` through to `prod`, with branching topology and status-colored edges.\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs/_assets/screenshots/swimlanes-dark.png\"\u003e\n  \u003cimg src=\"docs/_assets/screenshots/swimlanes-light.png\" alt=\"Swimlanes view\"\u003e\n\u003c/picture\u003e\n\n## Deploy for your team\n\nFetch the compose file and env template, fill in your secrets, then start — no clone required:\n\n```bash\ncurl -fsSLO https://raw.githubusercontent.com/kostiantyn-matsebora/deployment-dashboard/main/compose/docker-compose.yaml\ncurl -fsSLO https://raw.githubusercontent.com/kostiantyn-matsebora/deployment-dashboard/main/compose/.env.example\ncp .env.example .env\n# edit .env — set API_KEY, POSTGRES_USER, POSTGRES_PASSWORD (+ POSTGRES_HOST for standalone)\n\ndocker compose --profile full up -d\n```\n\n**Shapes:** `standalone` (external PostgreSQL) or `full` (bundled PostgreSQL); add `-pull` to either for the optional Fetcher. `demo` is for evaluation only. The gateway (`:8080`) is the only published port. Pin a version via `DASHBOARD_VERSION=0.2.1` in `.env` (no leading `v`).\n\n[Install \u0026 deploy →](docs/guide/install.md)\n\n## How it works\n\n```mermaid\nflowchart LR\n    CI[CI/CD tool] --\u003e|POST /api/deployments| GW[\"Gateway\u003cbr/\u003enginx :8080\"]\n    GW --\u003e FE[\"Frontend\u003cbr/\u003eAngular + nginx\"]\n    GW --\u003e API[\"API\u003cbr/\u003e.NET 10\"]\n    GW -.-\u003e|optional| F[\"Fetcher*\"]\n    API \u003c--\u003e|LISTEN/NOTIFY| DB[(\"PostgreSQL\")]\n    F --\u003e|POST /api/deployments| API\n```\n\n`*` Dashboard.Fetcher is the optional pull-mode adapter — polls a CI/CD API and posts events through the same push endpoint.\n\n[Architecture overview →](docs/guide/architecture-overview.md)\n\n## Documentation\n\n**Site:** \u003chttps://kostiantyn-matsebora.github.io/deployment-dashboard/\u003e\n\n- [Quickstart](docs/guide/quickstart.md) — run the demo locally in 2 minutes.\n- [Install \u0026 deploy](docs/guide/install.md) — Compose profiles, production checklist.\n- [Configuration](docs/guide/configuration.md) — every environment variable.\n- [Integrate your CI/CD](docs/guide/send-events.md) — pipeline examples.\n- [Architecture overview](docs/guide/architecture-overview.md) — how the pieces fit.\n- [FAQ \u0026 troubleshooting](docs/guide/faq.md)\n\n## Contributing · License · Security\n\n- **Contributing:** local setup, branch → PR workflow, and project layout are in [CONTRIBUTING.md](CONTRIBUTING.md).\n- **License:** MIT — see [LICENSE](LICENSE).\n- **Security:** follow the [Security policy](SECURITY.md) for vulnerability reports.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkostiantyn-matsebora%2Fdeployment-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkostiantyn-matsebora%2Fdeployment-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkostiantyn-matsebora%2Fdeployment-dashboard/lists"}