Annotations and commits
What happened on a day, next to what the numbers did. Notes are typed on the dashboard; commits arrive from a GitHub repo you connect. Both draw the same small mark on the chart's date axis.
Notes
An owner adds a note from the dashboard: a UTC day and up to 200 characters of text, whitespace collapsed. Each note carries its author. You can delete your own notes; an owner cannot remove a teammate's, and commits are never deleted by hand. Notes ship inside the dashboard's window payload, so opening a day never fetches.
Commits from GitHub
Settings → the GitHub card. Paste the repository as owner/name (a full GitHub URL is trimmed to that) and a personal access token. Use a fine-grained token with read access to Contents on that one repository and nothing else: the sync only ever lists commits, and a check against the repository runs once before anything is stored, so a typo is caught on the spot. The token is sealed at rest and never shown or logged again. No GitHub App, no OAuth, no webhook.
The first sync reads the trailing 90 days of commits and runs the moment you connect, and again when you change the repository or the filter; the Sync now button runs one on demand. After that every six-hour pass re-reads from two days before the last sync, so a commit pushed late still lands, and the commit sha keeps a re-read from ever duplicating a mark. A pass reads at most 500 commits and says so when it hit that cap rather than pretending it read everything.
Each commit becomes a mark on its author date with the first line of the message (up to 200 characters), the author's name, and a link to the commit on GitHub. Disconnecting forgets the token and removes the commit marks.
Keeping only some commits
The optional prefix filter is a comma-separated list, matched against the first line of the message, case-insensitive. A prefix matches literally, or as a conventional-commit type: feat: keeps "feat: pricing page", "feat(api): rate limit" and "feat!: new checkout". Empty keeps every commit. Changing the repository or the filter clears the existing commit marks and re-syncs.
feat:, fix:, releaseHow marks draw
Every day that has at least one note or commit draws one mark on the chart. Hovering shows up to four lines per day, "Commit: message (author)" or "note (author)", then "+N more" rather than dropping the rest silently; a weekly bucket stacks its days. The rule per grain (see periods and charts):
- Daily: a bucket carries its own day's mark.
- Weekly: every day the bucket spans folds into it. Counts add and the summaries stack.
- Hourly: every hour of a day shows that day's summary on hover, but only the first hour of the day draws the mark, so one note is one mark rather than twenty-four.
In the API and elsewhere
The window endpoint returns the same rows as annotations, each with id, date, kind (note or commit), text, author and url, oldest day first. The public dashboard never carries them.
Questions? Email us at hello@datastated.com.