A blameless postmortem editor for incident narrative, evidence, causal factors, actions, and review.
- Editable Narrative: Maintains executive summary, customer impact, and detection gap in a focused document surface.
- Evidence Timeline: Adds and removes timestamped signals, decisions, actions, and recovery events with source context.
- Causal Analysis: Groups technology, process, and people factors and marks explicit root factors.
- Action Register: Requires owner, due date, priority, status, and measurable success criteria.
- Review Workflow: Captures reviewer approval and calculates document publication readiness.
- Publish Gate: Prevents publication until narrative, recovery, root factor, action quality, and approvals are complete.
public/
|-- favicon.svg
`-- sample-postmortem.json
src/
|-- app.tsx
|-- main.tsx
|-- index.css
|-- components/
| |-- action-register.tsx
| |-- factor-board.tsx
| |-- incident-narrative.tsx
| |-- review-panel.tsx
| `-- timeline-editor.tsx
|-- domain/
| `-- postmortem.ts
`-- services/
`-- workspace-store.ts
- Preact 10 with Vite 8
- TypeScript 6
- Tailwind CSS 4
date-fns@preact/signalsidb-keyvalzodnanoidlucide-preact
public/sample-postmortem.json contains a complete SEV-1 review with impact narrative, sourced timeline, contributing factors, corrective actions, and assigned reviewers.
npm install
npm run devOpen http://localhost:5173.
- Publication readiness is a transparent domain function, not a decorative progress score.
- Reviewer buttons simulate approval locally; identity and authorization must be server-controlled in production.
- New factors require supporting evidence, while new actions require an owner, due date, priority, and measurable outcome.
- Editing a published document automatically returns it to review so stale approvals cannot silently remain valid.
- Draft state is stored in IndexedDB and can be reset to the full sample at any time.
npm run format:check
npm run build
npm run previewThe repository includes a Vite-ready vercel.json with SPA rewrites.
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"framework": "vite",
"buildCommand": "npm run build",
"outputDirectory": "dist",
"rewrites": [
{
"source": "/(.*)",
"destination": "/index.html"
}
]
}MIT License. See LICENSE.