Architecture Decision Records
This directory contains all Architecture Decision Records (ADRs) for the personal-stack project.
Infrastructure & Security
ADR
Title
Status
ADR-001
Infrastructure Platform — Contabo, Docker Swarm, Ubuntu 24.04
Accepted
ADR-002
Network Security — UFW, SSH hardening, Fail2ban, rate limiting
Accepted
ADR-003
TLS & DNS — Traefik ACME, Cloudflare DNS-01, wildcard cert
Accepted
ADR-004
Secrets Management — HashiCorp Vault, Raft, workload identity
Accepted
Authentication & Architecture
ADR
Title
Status
ADR-005
Authentication & Authorization — Spring Auth Server, OAuth2/OIDC, TOTP, RBAC
Accepted
ADR-006
Backend Architecture — Hexagonal, command pattern, domain ownership
Accepted
ADR-007
Frontend Architecture — Feature-based, domain boundaries, composition API
Accepted
ADR
Title
Status
ADR-008
Database Strategy — PostgreSQL 17, jOOQ, Flyway, Valkey
Accepted
ADR-009
Inter-Service Communication — REST + RabbitMQ + Spring Modulith events
Accepted
ADR-010
Backend Technology Stack — Kotlin 2.1, Spring Boot 4.0, Java 21
Accepted
ADR-011
Frontend Technology Stack — Vue 3, Pinia, PrimeVue, Tailwind, Vite
Accepted
ADR
Title
Status
ADR-012
Code Quality & Linting — detekt, ktlint, ESLint, Prettier, thresholds
Accepted
ADR-013
Architecture Testing — ArchUnit, dependency-cruiser, Spring Modulith
Accepted
ADR-014
Testing Strategy — full pyramid, system tests, CI pipelines
Accepted
ADR-015
Validation Strategy — four-layer backend, three-stage frontend
Accepted
ADR-016
API Contract Management — OpenAPI, generated clients, domain adapters
Accepted
ADR
Title
Status
ADR-017
CI/CD Pipeline — GitHub Actions, ghcr.io, Nomad deploys
Accepted
ADR-018
Monitoring & Observability — Grafana stack, Uptime Kuma
Accepted
ADR-019
n8n Workflow Automation
Accepted
ADR-020
Repository Structure — Monorepo, naming conventions
Accepted
Create a new file: ADR-{NNN}-{short-title}.md
Use the standard MADR format (Status, Date, Context, Decision, Consequences)
Add an entry to this index
Set status to Proposed until reviewed, then Accepted
To supersede an ADR, set the old one to Superseded by ADR-{NNN} and create the new one