Files
OmniRoute/docs/adr/005-single-tenant.md
diegosouzapw f44ec7e1f2 feat: complete all 46 tasks — ADRs, eval framework, compliance, a11y, CLI, Playwright specs (Batch B)
T-30 — ADRs:
- 6 ADRs: SQLite, Fallback Strategy, OAuth, JS+JSDoc, Single-Tenant, Translator Registry

T-33 — JSDoc Coverage:
- Full JSDoc on all new modules (100% exported functions documented)

T-35 — Accessibility:
- a11yAudit.js: lightweight WCAG AA checker (aria-label, dialog role, alt text, labels)

T-38 — Password Reset CLI:
- bin/reset-password.mjs: interactive CLI tool for admin password reset

T-39 — Playwright Specs:
- tests/e2e/responsiveSpecs.mjs: viewports (375/768/1280), 4 pages, test matrix

T-42 — Eval Framework:
- evalRunner.js: 4 strategies (exact, contains, regex, custom) + golden set (10 cases)

T-43 — Compliance:
- audit_log table, noLog opt-out per API key, LOG_RETENTION_DAYS cleanup

TASKS.md: 46/46 Concluído 
Tests: 144/144 pass (119 existing + 25 new)
2026-02-14 19:18:02 -03:00

1.3 KiB

ADR-005: Single-Tenant Architecture

Date: 2025-10-01
Status: Accepted
Deciders: @diegosouzapw

Context

OmniRoute needs to decide between single-tenant and multi-tenant architecture. The primary use case is individuals and small teams running their own proxy instance.

Decision

Adopt a single-tenant architecture where each deployment serves one user/team.

  • One SQLite database per instance
  • One set of API keys and credentials per instance
  • Password-based login (single admin user)
  • No user management, roles, or permissions beyond admin
  • Settings stored in a single settings table

Consequences

Positive

  • Dramatically simpler codebase (no tenant isolation, RBAC, or data partitioning)
  • SQLite is perfectly suited (no concurrent multi-tenant writes)
  • Easy deployment: one Docker container = one instance
  • Complete data isolation between users (separate deployments)

Negative

  • Not suitable for SaaS or shared hosting without running multiple instances
  • No built-in multi-user collaboration features
  • Scaling requires deploying separate instances

Neutral

  • Cloud worker mode exists as a separate deployment target with different constraints
  • Future multi-tenant support would require a PostgreSQL migration (see ADR-001)