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

ADRTitleStatus
001Custom email renderer over MJMLAccepted
002Convex as backendAccepted
003Notion-like email builderAccepted
004Monorepo with Bun workspacesAccepted
005Custom MTAAccepted
006Self-hosted ConvexAccepted
007Pluggable LLM providerAccepted
008Agent process architectureAccepted
009Task-based model routingAccepted
010Listing engineAccepted

Adding a New ADR

  1. Create a new file named <order>.NNN-short-title.md, where <order> is the Nuxt Content ordering prefix that controls sidebar position and NNN is the next available ADR number. The latest file is 11.010-listing-engine.md, so the next one would be 12.011-short-title.md.
  2. Start the file with YAML frontmatter containing title (e.g. "ADR-011: ...") and description, then follow the format above.
  3. Add a row to the table in this index.
  4. Submit with your PR.