
# What's new panel

A sparkle icon in the dashboard header, next to the notifications bell, opens a short list of recent releases: version, date, and the bullet points from that release.

## Where the content comes from

There is exactly one source of truth: the repository's root `CHANGELOG.md`, maintained automatically by release-please on every release. The control plane parses it once at startup (`internal/changelog`) and serves the most recent entries from `GET /api/v1/changelog`. Nothing is hand-curated a second time for this panel.

A control plane running from the official Docker image always has this file available. A bare binary install that hasn't shipped `CHANGELOG.md` next to the binary yet (see `internal/changelog.ReadFile`'s default, `./CHANGELOG.md`, overridable with `APP_CHANGELOG_FILE`) just shows an empty panel rather than failing.

## Unread indicator

The badge counts how many releases are newer than the last one you opened the panel at. That "last seen version" is stored only in your browser (`localStorage`); opening the panel marks everything as read. It is a per-browser convenience, not account state, so a different browser or a cleared storage shows every entry as unread again.

## CLI

`levelrail-cli changelog [--limit N]` prints the same entries from the terminal, as JSON with `--json` or human-readable otherwise.
