A small web app for tracking who has spoken in the daily standup.
- HTML 53.8%
- Python 42.4%
- Dockerfile 3.8%
| .forgejo/workflows | ||
| whos_been | ||
| .gitignore | ||
| .python-version | ||
| Containerfile | ||
| pyproject.toml | ||
| README.md | ||
| renovate.json | ||
| uv.lock | ||
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 .