Thanks for your interest in contributing. This document covers how to set up the project locally, what kinds of contributions are welcome, and how to submit them.
- Node.js 22+
- A Supabase project (free tier works)
- Git
git clone https://github.com/AgentPostmortem/agent-postmortem
cd agent-postmortem
npm installCopy the environment template and fill in your own values:
cp .env.example .env.localRun the database migration in your Supabase project (paste into the SQL editor or use the CLI):
# Via Supabase CLI
npx supabase link --project-ref <your-ref>
npx supabase db pushStart the dev server:
npm run devBefore pushing, run:
npm run lint # ESLint
npm run format # Prettier
npx tsc --noEmit # TypeScriptCI runs all three on every PR — failing any of them will block merge.
Agents live in two places:
lib/constants/agents.ts— add the agent metadata (slug, name, company, description)- Database — the submit form fetches agents dynamically from the DB, so the agent also needs to be seeded
For local testing, insert it directly:
npm run db "INSERT INTO agents (slug, name, company, description) VALUES ('my-agent', 'My Agent', 'Company', 'Description.');"For production, include the INSERT in your PR description and a maintainer will run it.
Tags follow the same pattern — add to lib/constants/tags.ts and include the DB insert in your PR.
- Keep changes focused — one fix or feature per PR
- Match the existing design tokens (
bg-canvas,accent-red,accent-red-muted,text-tertiary, etc.) defined intailwind.config.ts. Usetext-accent-red-muted(nottext-accent-red) when placing red text onbg-accent-red-softbackgrounds to pass WCAG AA contrast. - Test on both mobile and desktop before submitting
Open an issue first to discuss before building. Large PRs without prior discussion may not be merged.
-
npm run lintpasses -
npx tsc --noEmitpasses -
npm run formatapplied - Tested locally on dev server
- PR description explains what changed and why
See the README for a full breakdown of the directory structure.
- TypeScript strict mode — no
any, no type assertions unless unavoidable - No comments explaining what code does — only add a comment when the why is non-obvious
- No unused code — don't leave dead imports or variables
- Tailwind only — no inline styles, no CSS modules
- Server components by default — only add
"use client"when interactivity is required
Open a GitHub issue with:
- What you expected to happen
- What actually happened
- Steps to reproduce
- Browser / OS if it's a UI bug