A self-hosted command center for developer activity and first-party web analytics.
Bring GitHub, GitLab, X, Reddit, and your own websites into one private dashboard. Run it with PostgreSQL on infrastructure you control.
Follow updates from connected developer and social accounts alongside traffic from websites you operate. The overview brings activity, data freshness, and the busiest content into one place; each platform and site keeps its own detail page for deeper analysis.
First-party Web Analytics reports page views, visits, acquisition sources, and site-level dimensions from your own dashboard installation. It is designed for your own properties, rather than as a third-party advertising or audience-tracking service.
- Register a site in the Analytics page.
- Add its tracker snippet to pages on that site.
- Review portfolio traffic in Overview and open Analytics for site-level detail.
- One overview for activity across developer platforms
- First-party web analytics for sites you own
- App Store Connect team connections, app discovery and app selection
- 7, 30, and 90-day trends and acquisition summaries
- Fetch health with run history, stale-data, and failure visibility
- Multi-user access with owner-scoped data
- Self-hosted deployment backed by PostgreSQL
Open Connections (/accounts), choose App Store Connect, and add a Team API Key using its .p8 private key, Key ID and Issuer ID. Dashboard validates access and discovers apps before saving the connection. Enable the apps you want to sync; new apps start disabled. Vendor Number is optional and can be added later.
Connections support manual app metadata refresh and credential management. Set up Analytics separately reads and adopts existing report requests for enabled apps, then creates missing one-time snapshot and active ongoing requests. Enabling an app alone does not create Apple requests. The /app-store page includes Overview, Acquisition and Campaigns with app, territory and 7/30/90-day filters.
Sync Analytics imports Standard Discovery and Downloads for enabled apps into PostgreSQL; /app-store reads those facts. Standard reports do not contain Campaign data, and unavailable metrics remain —. Sync Revenue independently imports Purchases and Subscription State/Event, daily Sales Summary, and consolidated Financial reports (region ZZ). Add Vendor Number through Edit Connection for Sales and Finance, and explicitly select the Apple fiscal month. /revenue provides Overview, Sales, Subscriptions and Settlements, with separate original currencies and estimated versus final earnings.
Analytics selects exact Standard report names. Empty catalogs and absent target families display Waiting for Apple report data, with the request, report or segment stage preserved in the sync history. A matching family with only Detailed or an unknown variant reports unexpected_report_variant. Sales requests explicitly use API version 1_0; Sales and Finance failures retain HTTP status, Apple code, parameter name and a safe message, with filter values and credentials redacted.
ASC sync is manual only. Typed mappings follow Apple Analytics Reports, Sales Summary, and Financial fields. Development/tests use synthetic reports; actual credentials, signed URLs and reports stay in the deployed application. Deployment verification is performed by the operator using the normal sync buttons. ASC is independent of social accounts, repositories and Web Analytics sites, with no Product or universal Revenue provider model.
The dashboard runs as a Node.js application with its own PostgreSQL database. Account credentials are encrypted before storage, and multi-user access scopes dashboard data to its owner. You choose where it runs and who can sign in.
It is intended for personal use, households, and small trusted teams. The web app, scheduler, and platform fetchers run together in one application process; PostgreSQL stores account and analytics data.
cp .env.example .env
# Set a unique DASHBOARD_SECRET in .env
docker compose up -dOpen http://localhost:3000. The first startup creates the initial administrator; set its password in Settings.
See Configuration for environment settings and Deployment for production setup.
pnpm install --frozen-lockfile
pnpm run mockMock mode serves fixture data and does not require PostgreSQL. See Testing for development and verification commands.
Start with the Documentation Index.
| Topic | Guide |
|---|---|
| Architecture and data flow | Architecture |
| Configuration and deployment | Configuration · Deployment |
| API and analytics queries | API · GraphQL |
| Development and operations | Frontend · Database · Fetchers |
| Testing and scripts | Testing · Scripts |
| Dependency licenses | Dependencies |
The docs index is the entry point for maintained setup, architecture, and operations guidance. It is kept short here so the detailed references have one canonical home.
Human-facing documentation lives in docs/. Agent plans, specs, research, and archives live in .agents/.
Dashboard is derived from an MIT-licensed project by xiaoxiunique.
Current project modifications are distributed under Apache-2.0. See LICENSE and THIRD_PARTY_NOTICES.md for original and third-party terms.