Architectural Decision Records
The architectural decision records for the Owlat project, each capturing the context, the decision, and the trade-offs involved.
This directory captures significant architectural decisions made in the Owlat project. Each record explains the context, the decision, and the trade-offs involved.
Format
We use a lightweight ADR format. The title lives in YAML frontmatter (the docs site renders it as the page heading), followed by bold status/date fields and three ## sections:
---
title: "ADR-NNN: Title"
description: "One-sentence summary of what was decided and why."
---
- **Status:** Accepted | Superseded | Deprecated
- **Date:** YYYY-MM-DD
## Context
What prompted this decision.
## Decision
What was decided.
## Consequences
Trade-offs, and what this enables or prevents.
Decisions
| ADR | Title | Status |
|---|---|---|
| 001 | Custom email renderer over MJML | Accepted |
| 002 | Convex as backend | Accepted |
| 003 | Notion-like email builder | Accepted |
| 004 | Monorepo with Bun workspaces | Accepted |
| 005 | Custom MTA | Accepted |
| 006 | Self-hosted Convex | Accepted |
| 007 | Pluggable LLM provider | Accepted |
| 008 | Agent process architecture | Accepted |
| 009 | Task-based model routing | Accepted |
| 010 | Listing engine | Accepted |
Adding a New ADR
- Create a new file named
<order>.NNN-short-title.md, where<order>is the Nuxt Content ordering prefix that controls sidebar position andNNNis the next available ADR number. The latest file is11.010-listing-engine.md, so the next one would be12.011-short-title.md. - Start the file with YAML frontmatter containing
title(e.g."ADR-011: ...") anddescription, then follow the format above. - Add a row to the table in this index.
- Submit with your PR.