Developer guide¶
For anyone changing the code, people and coding agents alike. The operator guide covers running a server and the user guide covers the screens; this section covers how the code is put together and how to work on it without breaking what is there.
AGENTS.md in
the repository root is the short version: commands, conventions and where
things live, written for a coding agent. The pages here are the long
version.
Start here¶
- Set up a development environment: install, run the server and the worker, run the tests, lint.
- Architecture: the apps and how they relate, the Practice shell and the matter workspace, how an HTMX page is composed, where state lives, where background work runs.
Conventions¶
How things are done in this codebase, with the reasons.
- HTMX, Alpine and idiomorph: partial swaps, triggers, modals, confirmations, toasts, and the CSS rules.
- Session state: filters, selections, pagination and sort keys held in the session, and how a bad value is kept from crashing a list.
- Testing: the test database, fixtures, parallel runs, faking external services, and what to run when.
- Branches and releases: topical
branches, pull requests into
dev, migrations, what a deploy does. - CSS theming: the seven themes, tokens versus scoped rules, and where dark-mode structure lives.
- Writing documentation: how this site is organised and the house rules for adding to it.
- Squashing migrations: the steps after a squash.
Subsystems¶
One page per part of the system, each with the same shape: where the code is, the data model, how the main flows work, background work, access, and the things that bite.
| Page | Covers |
|---|---|
| Platform and config | Settings and environment, middleware, storage, email, logging, health, the utils/ guards |
| Identity and access | Users, sign-in codes, permission flags, matter membership, API tokens |
| Matters and contacts | Matters and their lifecycle, proceedings, parties, contacts and folders, practice areas |
| Tasks and calendar | Tasks, checklists, events, Google Calendar sync, the digest, the Dash |
| Time and billing | Time, expenses and flat fees, invoices, credits, applications, reports |
| Trust and payments | The trust ledger, payments and their trust withdrawals, online payments, payment requests |
| Case building | Documents, OCR, the Drive mirror, highlights, facts, witnesses, labels, search |
| The AI context system | Conversations, context builders, the selector, status, fenced writes |
| Agentic chat | The tool-loop chat mode |
| Notes and drafts | The notes editor and folders, drafts and the LibreOffice companion |
| Email and intakes | Gmail sync, inbound email, intakes, client forms |
| MCP server and JSON APIs | What Claude Desktop talks to |
| Operations | The task queue and schedules, storage, recovery commands, publishing the docs |
Decisions¶
Design choices that would otherwise have to be rediscovered are recorded under Decisions. Read the record before rebuilding something that was retired on purpose.