Skip to main content

Architecture Decisions

DecisionStatus
ADR-0001: Chose HTMX + Templ over React SPA for Server-Driven UIaccepted
ADR-0002: Chose Chi Router for Composable Middleware over Gin or Echoaccepted
ADR-0003: Chose SQLite as Embedded Database over PostgreSQLsuperseded
ADR-0004: Chose Ent ORM for Type-Safe Schema-Driven Data Access over GORM or sqlcaccepted
ADR-0005: Delegate Primary Authentication to Navidrome Instead of Native User Accountsaccepted
ADR-0006: Application-Layer AES-256-GCM Encryption for OAuth Credentials at Restaccepted
ADR-0007: In-Memory Event Bus over Persistent Message Queue Accepting Single-Instance Constraintaccepted
ADR-0008: OpenAI Chat Completions API with Configurable Base URL over Provider-Specific SDKs for LLM Backendaccepted
ADR-0009: Viper with SPOTTER_* Environment Variables over Raw os.Getenv for Configuration Managementaccepted
ADR-0010: Go stdlib log/slog over Third-Party Structured Loggers for Application Loggingaccepted
ADR-0011: Tailwind CSS with DaisyUI over Traditional CSS Frameworks for Server-Rendered UI Stylingaccepted
ADR-0012: Multi-Stage Docker Build with Golang and Node.js Builder over Single-Stage or External CI Pipelinesaccepted
ADR-0013: Native Goroutines with time.Ticker over External Job Schedulers for Background Task Executionaccepted
ADR-0014: Three-Tier ISRC/Exact/Fuzzy Track Matching over Single-Strategy Alternativesaccepted
ADR-0015: Type-Keyed Enricher Registry with Factory Pattern over Hardcoded Enrichment Chainaccepted
ADR-0016: Factory-Slice Provider Pattern with Per-User Instantiation over Hardcoded Provider Listaccepted
ADR-0017: Generator Interface Abstraction over Direct Concrete Type Dependencies for AI Mixtape Engineaccepted
ADR-0018: signal.NotifyContext + sync.WaitGroup for Graceful Shutdown over Raw Signal Channels or Lifecycle Managersaccepted
ADR-0019: slog-Based Structured Event Logging as Lightweight Metrics over Dedicated Metrics Infrastructureaccepted
ADR-0020: Exponential Backoff and Circuit Breaker for External Service Errorsaccepted
ADR-0021: Encryption Key Rotation via Admin Subcommandaccepted
ADR-0022: Threat Model and Security Assumptionsaccepted
ADR-0023: Add PostgreSQL and MariaDB Support Alongside SQLiteaccepted
ADR-0024: Tag Browsing Library Page with Dual Entity View and Stat HUDaccepted
ADR-0025: Unified Tag Taxonomy with Typed Tags and Denormalized Query Tableaccepted
ADR-0026: Sync Failure Email Notifications with 7-Day Cooldownaccepted
ADR-0027: Image Storage: Local Filesystemaccepted
ADR-0028: CSRF Protection Strategy — SameSite=Lax Cookie Attributeaccepted
ADR-0029: Rate-Limited Lidarr Submission Queue with Backpressure and Pending State Trackingaccepted