Dashboard
The view the app opens onto: a read-only overview of every registered workspace, and an honest reading of what shipped today. Everything on it is measured — mined from git and an activity log — and none of it can be edited from here.
Today’s progress
A header opens the view: an identicon derived from your resolved git identity, the date, and — on the right — your streak, the number of consecutive days with at least one recorded achievement. The flame lights only once the streak is running.
Below that, four counts aggregated across every workspace: changes shipped today, changes in flight right now, commits landed today, and tasks completed today. The three today counts each carry a comparison against your recent daily average, so the numbers answer “is today a good day?” without you having to remember what a normal one looks like.
Then a contribution heatmap over recent weeks, with today’s cell marked. The cells are not just a picture: click one to read that day back — what shipped, what landed, what was completed — or Nothing logged for a quiet day.
Today’s ships
Every change archived today, across every workspace, newest first — with a relative archive time when git can recover it. Clicking a ship opens the change in the archive browser, so “what was that one?” is one click, not a directory listing.
While the Dashboard is open, shipping a change plays a brief celebration and completing a task a quieter one. Both respect your reduced-motion preference, and neither blocks anything.
The commit garden
At the bottom, each repository that has commits today draws a faithful git graph of today’s commits — real lanes, merges and refs, not a sparkline. Each commit is coloured by its author: you in the accent colour, everyone else — teammates, agents committing under their own identity — in a stable hue of their own. It fills in live as commits land, and at local midnight it starts again.
A repository with nothing on today’s date is left out rather than shown empty, and on a day when nothing has landed anywhere the whole section is absent — so the garden is only ever a picture of work that happened, never a row of blank plots.
Your own commits draw in the accent colour — but only for the emails you have added as aliases. An address you commit under but have not claimed is treated as someone else’s, and is left out of your streak and heatmap too, so it is worth adding them all. Everyone else is coloured by the git author recorded on the commit, with no naming step — so a teammate who commits under two identities gets two colours.
The cross-workspace overview
The rest of the Dashboard aggregates state across every registered workspace: a closing line of active and archived totals, and today’s ships — the changes you archived today, each dated from the commit that archived it.
Per-repository detail lives in the commit garden rather than in a separate breakdown. Each plot’s caption names the repository and summarises its day: how many commits landed, how many authors were involved, and how many changes that repository has in flight. Plots lead with the repository that moved most today.
Where the numbers come from
An append-only activity log records achievements — a task ticked, an artifact added, a change created or archived — as the watcher observes them, and is backfilled from git history, so the Dashboard is not empty on first run. The log lives in SpecForge’s own application data, never inside a workspace.
There are no points, badges, or levels. The Dashboard measures what already happened and invents nothing — which is also why there is no setting to turn it off: it is a reading, not a game.