Starmap is an open-source web application that makes engineering team competencies visible and manageable. It turns invisible, distributed knowledge into a living map of technical capabilities — so teams can proactively identify risks, plan development, and reduce bus factor.
It is not a control system. Its goal is to help every team member see their progress, understand team priorities, and consciously plan their growth.
git clone https://github.com/bibendi/starmap.git
cd starmap
bundle install
npm install
docker compose up -d # PostgreSQL and Keycloak (optional)
bin/rails db:setup # creates DB, runs migrations, loads seed data
bin/dev # starts Puma + Vite dev server
The app runs at http://localhost:3000.
Starmap supports two authentication methods:
Email and password — enabled by default, no configuration needed.
OpenID Connect (OIDC) — if your organization uses a Single Sign-On provider (Keycloak, Google Workspace, Okta, Auth0, and others), you can enable OIDC login. Set the following environment variables:
| Variable | Required | Description |
|---|---|---|
OIDC_CLIENT_ID | No | Client ID from your SSO provider. When set, enables OIDC login |
OIDC_CLIENT_SECRET | If OIDC enabled | Client secret from your SSO provider |
OIDC_ISSUER | If OIDC enabled | URL of your SSO realm (e.g. https://auth.example.com/realms/my-org) |
REGISTRATION_ENABLED | No | Show a "Sign up" link on the login page (true/false, default: false) |
For local development, a pre-configured Keycloak instance is included in docker-compose.yml:
docker compose up -d keycloak # starts at http://localhost:5101
Every rating answers the question: "What can I practically do with this technology right now?"
| Level | Meaning |
|---|---|
| 0 | No prior experience. Needs an introduction from scratch |
| 1 | Can work on simple tasks under guidance or pairing with a senior |
| 2 | Can independently pick up a mid-complexity task and ship it to production |
| 3 | Can explain architectural decisions, do code review, and mentor others |
Starmap evaluates competencies retrospectively — after a quarter ends, not while it's in progress. The process repeats every quarter:
Quarter lifecycle: draft → active → closed → archived
| Role | Scope |
|---|---|
| Engineer | Self-assessment, personal dashboard, action plans |
| Team Lead | Team competency matrix, approve ratings, team planning |
| Unit Lead | Unit-level metrics, risk reports, strategic development |
| Admin | User/technology management, quarter lifecycle, system settings |
Metrics are like a car dashboard — they don't judge the driver, they help navigate. Their purpose is to highlight areas for discussion, not to deliver verdicts.
Four summary metrics give a quick overview:
A visual grid of technologies vs. team members with:
Docker images are published to GitHub Container Registry on every release tag:
docker pull ghcr.io/bibendi/starmap:latest
Images are tagged with semver versions (1.0.0) and short SHAs.
Required environment variables when running the container:
docker run -d \
-p 3000:3000 \
-e SECRET_KEY_BASE=your-secret \
-e DATABASE_URL=postgres://user:pass@host:5432/starmap_production \
ghcr.io/bibendi/starmap:latest
After deploying for the first time, create the admin user:
docker exec -it <container> rails 'admin:create["[email protected]"]'
This generates a random password and prints it to stdout. The task only works when no users exist in the database yet.
Starmap exposes infrastructure metrics in Prometheus format via Yabeda. Metrics are available on a separate port to avoid exposing them publicly.
| Endpoint | Default | Description |
|---|---|---|
| Prometheus metrics | http://0.0.0.0:9394/metrics | All application and server metrics |
Port and path are configurable via environment variables: PROMETHEUS_EXPORTER_PORT, PROMETHEUS_EXPORTER_PATH, or PROMETHEUS_EXPORTER_URL.
| Plugin | Description |
|---|---|
| yabeda-rails | Request counts, duration, view and DB runtime |
| yabeda-activerecord | SQL query performance, connection pool stats |
| yabeda-puma-plugin | Puma workers, threads, backlog, pool capacity |
Define custom metrics in config/initializers/yabeda.rb:
Yabeda.configure do
group :starmap do
counter :quarter_activations_total,
comment: "Total number of quarter activations",
tags: [:unit_id]
gauge :skill_ratings_pending,
comment: "Number of ratings awaiting approval",
tags: [:team_id]
end
end
bundle exec rspec # all tests
bundle exec rspec --tag n_plus_one # N+1 query tests only
LOG=all bundle exec rspec spec/path:42 # with SQL logging
npm test # all tests
npm run test:watch # watch mode
npm run test:coverage # with coverage
git checkout -b feature/my-feature)bundle exec rspec and npm testbundle exec rubocop and npm run check:jsMIT — see LICENSE for details.
Content type
Image
Digest
sha256:66c04b360…
Size
344.9 MB
Last updated
29 days ago
docker pull bibendi/starmap