Topic: adr template notion

ADR Template for Notion

Indie teams already live in Notion. Here's a Notion database schema for architecture decision records — properties, a page-level template, and the supersedes-from/to relation that makes "what replaced this?" a one-click query.

TL;DR

Create a database called Decisions. Use the property list below (8 properties, one of them a self-relation). Set the database template to the page body shown further down. Filter the default view by Status = Accepted and group by Stack. That's it — you have a working ADR workspace.

The database schema

Eight properties. Order matters here for the table view; the leftmost three are what people scan.

PropertyTypeNotes
TitleTitleThe name of the decision. Format: NNNN — short description, e.g. 0001 — Use Postgres over MongoDB. The number is part of the title so it sorts naturally.
StatusSelectOptions: Proposed, Accepted, Deprecated, Superseded. Lock to these four — free-text status makes the database unsearchable inside a quarter.
DateDateThe decision date, not the page-creation date. Backfill from chat logs or PR merge dates if you're importing.
StackMulti-selectTags like backend, data, frontend, infra, auth. Used for grouping in views; a single ADR can sit under multiple tags.
DecidersPeopleNotion's built-in person property. Assigning makes the decision visible on each person's profile.
SupersedesRelation → DecisionsSelf-relation. Link from the new ADR to the one(s) it replaces. Notion auto-creates the inverse "Superseded by" property when you turn on two-way sync.
Linked PRURLThe implementing PR. One field, one click to find the code that this decision became.
Original chatURLOptional. The ChatGPT / Claude / Slack thread the decision came out of. This is the property most teams skip and most regret skipping six months in.

The page template

In Notion, open the database, click the dropdown next to New, choose + New template, and paste the structure below into the page body. Every new entry in the database starts with this layout pre-filled.

## Context

What forces are at play? What problem are we solving?
2-4 sentences. Include team size, scale assumptions, deadlines —
anything a future reader needs to understand why this mattered now.

## Decision

The choice, in one sentence: "We will use X."

A short paragraph on how we'll use it.

## Alternatives considered

- **Option B** — rejected because <one-line reason>
- **Option C** — rejected because <one-line reason>

## Consequences

### Positive
- What this unlocks.

### Negative
- What we're giving up.

### Neutral
- What this doesn't change.

## Links

- Linked PR: (use the property above)
- Original chat: (use the property above)
- Related ADRs: @-mention them inline

Keep the page body short. The first time someone writes a 2,000-word "context" section, the format is dead — nobody reads them, nobody adds new ones. The 250-word cap from the Markdown ADR convention applies just as hard in Notion.

The views you'll actually use

  1. Active — table view, filtered to Status = Accepted, sorted by Date descending. Default landing view.
  2. By stack — board view, grouped by the Stack multi-select. Useful when onboarding ("show me everything we decided about auth").
  3. Pending — table view, Status = Proposed. Reviewer queue. Empty most of the time; that's a feature.
  4. History — calendar view on the Date property. Quarterly review at-a-glance.

Skip the temptation to build twelve views. Four is enough; more becomes a maintenance burden and signals to the team that the database is precious. Precious databases die.

The supersedes relation

This is the property most teams under-use. When you replace a decision, don't delete the old ADR — change its Status to Superseded and link the new ADR via the Supersedes property. Notion's two-way sync auto-fills "Superseded by" on the old record. Now the old ADR's page shows you the new one inline; the new ADR's page shows you what it replaced. That trail is what makes the database a real audit log instead of a folder of half-current documents.

The pattern is identical to the Markdown ADR convention's Supersedes: / Superseded by: headers — Notion just does the cross-linking for you.

How WhyChose helps

WhyChose's Pro tier exports decisions extracted from your AI chats directly into a Notion database with this schema. You connect the database via the Notion API, point WhyChose at your ChatGPT/Claude exports, and structured rows land in the database with the page body pre-filled — Status set to Proposed, Linked PR blank for you to add, Original chat URL populated automatically. You promote the row to Accepted when the decision is real. The extractor is open-source if you want to roll your own Notion sync.

Get early access

Related questions

Should ADRs live in Notion or in the repo?

Repo, ideally. Notion's strength — searchable database, multi-property views — also makes it tempting to drift away from the code. If your team's center of gravity is engineering, use the Markdown template in the repo. If it's product/ops/cross-functional, Notion is fine and the format here keeps the structure intact.

Can I import existing Markdown ADRs into this database?

Yes. Notion's Markdown import is reasonable for the body but loses property metadata. Easier path: write a 30-line script that reads your doc/decisions/*.md files, parses the YAML frontmatter or top-of-file fields, and posts to POST /v1/pages via the Notion API with the property mapping done explicitly.

What about syncing both ways?

Don't. Pick one source of truth. Two-way sync between Markdown files and Notion sounds elegant and is a maintenance nightmare; you end up resolving conflicts by hand for the rest of the project's life. One-way (repo → Notion mirror, or Notion → repo export) is fine; bidirectional is not worth it.

Further reading