Metadata-Version: 2.3
Name: whos-been
Version: 1.0.4
Summary: Track who has been on the daily standup
Requires-Dist: fastapi>=0.115
Requires-Dist: uvicorn[standard]>=0.32
Requires-Dist: jinja2>=3.1
Requires-Dist: python-multipart>=0.0.12
Requires-Python: >=3.14
Description-Content-Type: text/markdown

> [!NOTE]
> This project was created using [Claude](https://claude.ai) (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

```sh
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`.

```yaml
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:

```sh
podman build -f Containerfile -t whos-been .
```
