A small web app for tracking who has spoken in the daily standup.
  • HTML 53.8%
  • Python 42.4%
  • Dockerfile 3.8%
Find a file
2026-06-10 18:50:32 +00:00
.forgejo/workflows chore: initial commit 2026-05-07 11:44:56 +01:00
whos_been chore: initial commit 2026-05-07 11:44:56 +01:00
.gitignore chore: initial commit 2026-05-07 11:44:56 +01:00
.python-version chore: initial commit 2026-05-07 11:44:56 +01:00
Containerfile Update ghcr.io/astral-sh/uv Docker tag to v0.11.20 2026-06-10 18:50:32 +00:00
pyproject.toml chore: initial commit 2026-05-07 11:44:56 +01:00
README.md chore: initial commit 2026-05-07 11:44:56 +01:00
renovate.json fix: prevent renovate from trying to update to debian tag unless its a major release 2026-05-12 09:52:13 +01:00
uv.lock chore: initial commit 2026-05-07 11:44:56 +01:00

Note

This project was created using Claude (Anthropic's AI assistant).

Who's Been

A small web app for tracking who has spoken in the daily standup. The queue is ordered by last attendance so the person who went longest ago is always at the top, creating a natural fair rotation.

Features

  • Today view — mark team members as done; the queue updates automatically every 10 seconds
  • History — last 30 standups with a per-day attendee list
  • Members — add, activate, and deactivate team members; optionally password-protected

Running locally

uv sync
uv run whos-been

The app listens on http://0.0.0.0:8000 by default.

Configuration

All configuration is via environment variables.

Variable Default Description
DB_PATH data/standup.db Path to the SQLite database file
HOST 0.0.0.0 Bind address
PORT 8000 Bind port
MEMBERS_PASSWORD (unset) Password for the members page; if unset the page is open

Kubernetes deployment

The app is stateful via a single SQLite file. Run it as a single replica (replicas: 1) and mount a PersistentVolumeClaim at the path pointed to by DB_PATH.

env:
  - name: DB_PATH
    value: /data/standup.db
  - name: MEMBERS_PASSWORD
    valueFrom:
      secretKeyRef:
        name: whos-been
        key: members-password
volumeMounts:
  - name: data
    mountPath: /data
volumes:
  - name: data
    persistentVolumeClaim:
      claimName: whos-been-data

The container image is built with the Containerfile using a distroless runtime image:

podman build -f Containerfile -t whos-been .