Inkan
↑↓ move↵ open
GitHub

Site · ADR

0003: Timeline and backlog

Date

Context#

Two questions come up constantly and the filterable index answers neither well: “what happened when” and “what is still waiting for a decision”. The first wants records in date order with the quiet years compressed. The second wants only the open proposals, sorted by their review deadline, with overdue ones impossible to miss. Both views must come from the front matter that is already there.

Decision#

Inkan builds two pages from the records’ date, status and reviewBy fields:

  • /timeline/: every dated record, newest first, grouped by year and month.
  • /backlog/: every record whose status is open, ordered by reviewBy, with D-day tags computed in the browser so a static page never shows yesterday’s countdown.

Which statuses count as open is part of the status configuration, not of these pages.

How to use it#

Timeline#

Nothing to configure. A record appears on the timeline when it has a date in its front matter; records without a date are left out. Records are grouped by the month of that date, newest month first, with a year heading whenever the year changes and a record count per month.

---
title: Define SLOs per user journey
status: accepted
date: 2026-03-14
---

Each month shows its records as photocards. Past 150 dated records, years older than the two most recent collapse to compact rows (status sticker, team, number and title) so the page stays light while the recent history keeps its cards.

Backlog#

A record is on the backlog when its status has open: true. With the default statuses that is draft, proposed and in-review. Records with a reviewBy date come first, soonest deadline first; the rest are listed under “No deadline”.

---
title: Error budgets for the checkout flow
status: in-review
date: 2026-10-01
reviewBy: 2026-11-15
---

Each row shows the day and month of the deadline, the sticker and status label, the team and number, the title, the description and the authors. In the browser the row gets a tag and a sentence from the reader’s current date:

Days until reviewByTagTextRow state
more than 7D-12in 12 daysnormal
1 to 7D-3in 3 daysis-soon
0D-DAYtodayis-soon
negativeD+44 days lateis-overdue

The eyebrow of the page gains “today is 16 Oct 2026” and the lede says how many rows are past due, or “Nothing is overdue.” The same D-n chip appears next to “Review by” on the record’s own page, with the text (“4 days late”) for screen readers and the word “overdue” on a late chip, so lateness is not shown by colour alone.

Choosing your own open statuses#

The backlog follows the open flag of each status, so a custom lifecycle changes it without further configuration:

inkan.config.ts
export default defineConfig({
statuses: {
idea: { label: 'Idea', open: true, sticker: 'draft' },
proposed: { label: 'Proposed', open: true },
accepted: { label: 'Accepted', current: true },
retired: { label: 'Retired', sticker: 'deprecated' },
},
});

With this config the backlog lists idea and proposed records. The “Open decisions” link in the sidebar carries the number of open records, and the landing page counts overdue review dates among them.

Note

The backlog only reads reviewBy on open records. On a decided record the same field is the date of its next periodic review, listed on /reviews/ instead; see Review decisions on a schedule. How the backlog, /reviews/ and /rfc-reviews/ differ is in Open decisions, periodic reviews and RFC reviews.

Where the pages are linked#

Both pages are in the header (Records, Timeline, Open decisions), in the sidebar hub (with the open count next to Open decisions) and among the default landing actions. All three places take the base path into account when the site is served from a sub-path.

Consequences#

  • Both views need no maintenance: dates and statuses in the front matter are the only input.
  • Undated records are invisible on the timeline. Add a date to every record you want in the history.
  • Countdowns are computed in the reader’s time zone from calendar days, as inkan check computes them on its machine, so a deadline flips to overdue at the reader’s midnight. Without JavaScript the ISO date is shown and no row is marked overdue.
  • The timeline compacts old years only beyond 150 records; below that, every month shows full cards.
  • The backlog has no per-team view. Use the index with ?status=proposed&project=sre for that.

History 1

  1. ImplementedInkan maintainers9e5e535 commit diff