Decision index
Architecture decision records live in the repo they affect, as
docs/decisions/NNNN-kebab-slug.md. This page is only an index. It exists so you can
answer “what have we decided” without already knowing which repo to look in.
It deliberately does not restate any decision. Follow the link — the ADR is the record, and a summary here would be a second copy to keep in sync. Status shows the canonical token only; where an ADR adds a sentence of rationale to its status line, read it there.
docs.ajomark.dev
Section titled “docs.ajomark.dev”This site. All records
| ADR | Title | Date | Status |
|---|---|---|---|
| 0001 | Rebuild docs.ajomark.dev as a Starlight site on Cloudflare Pages | 2026-09-01 | Accepted |
| 0002 | Keep the site code minimal, and move it to pnpm | 2026-09-09 | Accepted |
m1-web
Section titled “m1-web”The Mobility One web application and its monorepo. All records
| ADR | Title | Date | Status |
|---|---|---|---|
| 0001 | ECS Fargate over SST/OpenNext (Lambda) | 2026-02-20 | Accepted |
| 0002 | Turborepo monorepo | 2026-02-20 | Accepted |
| 0003 | context-mode integration | 2026-03-16 | Accepted |
| 0004 | Superpowers + SDD merged workflow | 2026-03-16 | Superseded by ADR-0014 |
| 0005 | Multi-Tenant Shared Apps for Posting and Search | 2026-03-17 | Accepted |
| 0006 | Internal Admin Dashboard — Stack and Architecture | 2026-05-12 | Accepted |
| 0007 | Admin compute — Cloudflare Containers vs. ECS Fargate | 2026-05-15 | Rejected |
| 0008 | shadcn/ui + Tailwind CSS over MUI for the UI primitive layer | 2026-05-15 | Superseded by ADR-0009 |
| 0009 | Adopt MUI as the enterprise UI component library (reverses ADR-0008) | 2026-06-29 | Superseded by ADR-0015 |
| 0010 | Migrate the monorepo from npm to pnpm (supply-chain hardening) | 2026-06-30 | Accepted |
| 0011 | GitHub OIDC three-role CI/CD for AWS | 2026-07-13 | Accepted |
| 0012 | Adopt the shared Ajomark Header package for vertical headers | 2026-07-16 | Accepted |
| 0013 | next-intl for consumer-app localization | 2026-07-29 | Accepted |
| 0014 | Spec-driven development and skill distribution | 2026-08-23 | Accepted |
| 0015 | shadcn/ui on Base UI as the UI primitive layer (reverses ADR-0009) | 2026-08-24 | Accepted |
| 0016 | Extract api-server into the m1-api repository |
2026-09-11 | Accepted |
m1-api
Section titled “m1-api”The Mobility One REST API, extracted from the m1-web monorepo. All records
| ADR | Title | Date | Status |
|---|---|---|---|
| 0001 | develop as the default branch, with staging and main reserved |
2026-09-14 | Accepted |
m1-atlas
Section titled “m1-atlas”Database schema and the data model behind Mobility One. All records
| ADR | Title | Date | Status |
|---|---|---|---|
| 0001 | PostgreSQL over the legacy MySQL | 2026-07-02 | Accepted |
| 0002 | Database-as-code with Atlas | 2026-07-02 | Accepted |
| 0003 | UUID primary keys, not auto-increment | 2026-07-02 | Accepted |
| 0004 | numeric for money |
2026-07-02 | Accepted |
| 0005 | Location embedded on listings, not normalised |
2026-07-02 | Accepted |
| 0006 | Exactly one seller via a CHECK |
2026-07-02 | Accepted |
| 0007 | varchar + CHECK for enumerations, not Postgres enum |
2026-07-02 | Accepted |
| 0008 | updated_at maintained by the application, no trigger |
2026-07-02 | Accepted |
| 0009 | Introduce vehicles / organizations / users + foreign keys | 2026-07-02 | Accepted |
| 0010 | Vertical-agnostic vehicle — typed core + JSONB attributes |
2026-07-02 | Accepted |
| 0011 | Vertical on the listing; cross-listing = one vehicle → many listings | 2026-07-02 | Accepted |
| 0012 | Canonical UPPERCASE category codes, shared with the reference dataset | 2026-07-02 | Accepted |
| 0013 | OpenSearch as the read side; Postgres as the system of record | 2026-07-02 | Accepted |
| 0014 | Foreign-key delete semantics — CASCADE sellers, RESTRICT vehicle | 2026-07-02 | Accepted |
| 0015 | Official Atlas edition; lint via a free login | 2026-07-02 | Accepted |
| 0016 | OpenSearch sync mechanism | 2026-07-02 | Proposed |
| 0017 | CI migration linting via Squawk (Atlas lint is Pro-only) | 2026-07-02 | Accepted |
| 0018 | Co-locate the dev-database Terraform in m1-atlas (not the infra repo) | 2026-07-06 | Accepted |
| 0019 | Trunk-based branching; environments via gated promotion, not branches | 2026-07-07 | Accepted |
| 0020 | Vehicle reference taxonomy (mirror of ajo-reference-data-maintenance) | 2026-08-13 | Accepted |
| 0021 | Declarative apply for local iteration; versioned migrations stay the deploy artifact | 2026-08-19 | Proposed |
| 0022 | Multilingual content support | 2026-07-09 | Proposed |
| 0023 | Multilingual content storage mechanism | 2026-07-09 | Proposed |
| 0024 | Media storage and source provenance for ingested dealer listings | 2026-07-10 | Proposed |
| 0025 | Commercial listing fields — financing, delivery, campaign, VAT deductibility | 2026-07-10 | Proposed |
alma-mobility-image-service
Section titled “alma-mobility-image-service”The multi-tenant image service. All records
| ADR | Title | Date | Status |
|---|---|---|---|
| 0001 | Unified multi-tenant image Lambda | 2026-07-03 | Accepted |
| 0002 | Custom origin header vertical routing | 2026-07-03 | Accepted |
| 0003 | URL path scheme — prefix over suffix | 2026-07-03 | Accepted |
| 0004 | Zip Lambda + sharp runtime | 2026-07-03 | Accepted |
| 0005 | Caching, abuse-prevention, IAM & response delivery | 2026-07-03 | Accepted |
| 0006 | Infrastructure defined in the infra repo | 2026-07-03 | Accepted |
| 0007 | Function URL origin authentication | 2026-07-08 | Accepted |
| 0008 | Size policy — open cap vs. per-vertical whitelist | 2026-07-03 | Accepted |
| 0009 | Encoding parity | 2026-07-10 | Superseded by ADR-0016 |
| 0010 | EXIF orientation vs. explicit rotation | 2026-07-03 | Proposed |
| 0011 | Source-bucket ownership model | 2026-07-07 | Accepted |
| 0012 | Watermarking model | 2026-07-03 | Accepted |
| 0013 | Dimension reporting & observability | 2026-07-03 | Proposed |
| 0014 | AVIF output & format negotiation | 2026-07-03 | Proposed |
| 0015 | Explicit rotation direction — clockwise | 2026-07-09 | Accepted |
| 0016 | Encoding matches nettix exactly (q88, 4:4:4) | 2026-07-23 | Accepted |
| 0017 | Source-image size guard | 2026-07-27 | Accepted |
| 0018 | Vertical routing header is named x-vertical-id |
2026-08-17 | Accepted |
| 0019 | Cache invalidation by tag | 2026-08-24 | Proposed |
| 0020 | enlarge token — opt-in upscaling |
2026-09-07 | Accepted |
| 0021 | 30-day TTL with wildcard invalidation for takedowns | 2026-09-04 | Accepted |
| 0022 | Listing-level (ad) cache tags for folder-wide takedowns | 2026-09-07 | Proposed |
security-dashboard
Section titled “security-dashboard”The supply-chain security dashboard behind scorecard.ajomark.dev. All records
| ADR | Title | Date | Status |
|---|---|---|---|
| 0001 | GitHub App for cross-repo artifact access | 2026-07-03 | Accepted |
| 0002 | AWS authentication via OIDC | 2026-07-03 | Accepted |
| 0003 | Static single-file HTML output (no SPA framework) | 2026-07-03 | Accepted |
| 0004 | Scorecard data format is JSON, not SARIF | 2026-07-03 | Accepted |
| 0005 | Thin-caller workflows over a reusable workflow, rolled out by script | 2026-07-03 | Accepted |
| 0006 | S3 history snapshots on every run | 2026-07-03 | Accepted |
| 0007 | No PR gating on Scorecard regressions — informational only | 2026-07-03 | Accepted |
| 0008 | CodeQL tracked separately — SARIF diffed into its own namespace | 2026-07-03 | Accepted |
| 0009 | Additional SARIF scanners — Semgrep CE and Trivy alongside CodeQL | 2026-07-03 | Proposed |
.github
Section titled “.github”The organisation’s special repository — the reusable workflows every other repo calls. All records
| ADR | Title | Date | Status |
|---|---|---|---|
| 0001 | Caller rules for internal reusable workflows | 2026-09-10 | Accepted |
github-iac
Section titled “github-iac”Terraform-managed GitHub organisation configuration. All records
| ADR | Title | Date | Status |
|---|---|---|---|
| 0001 | Manage m1-web branch protection with imported rulesets | 2026-08-23 | Superseded by ADR-0003 |
| 0002 | Enable a merge queue on m1-web’s default branch | 2026-08-31 | Accepted |
| 0003 | Limit repository management to the org’s management repos | 2026-09-10 | Accepted |
| 0004 | Add m1-infra to the managed list, protection-only | 2026-09-14 | Accepted |