Files
gallery-organizer-web/specs/001-archive-curator/research.md
Danilo Reyes 070a3633d8 init
2026-02-07 06:01:29 -06:00

1.7 KiB

Phase 0 Research: Archive Curator

Decision: Backend Web API Framework

  • Decision: Axum
  • Rationale: Rust-native, async-first, strong ecosystem support, and clean layering between validation and business logic.
  • Alternatives considered: Actix Web (fast, but heavier abstraction), Warp (composable but less active).

Decision: Frontend UI Framework

  • Decision: SvelteKit
  • Rationale: Small bundle size, fast UI updates, and well-suited for touch-first, swipe-capable interfaces.
  • Alternatives considered: React (larger bundle, more boilerplate), Vue (good fit but less direct for swipe-first interactions without extra libraries).

Decision: State Storage

  • Decision: SQLite for directory state + append-only audit log file
  • Rationale: Durable local storage with simple deployment, supports atomic updates and queryable state history; audit log remains append-only and retained indefinitely.
  • Alternatives considered: Flat JSON state (simpler but weaker concurrency and integrity guarantees), embedded key-value store (less standard tooling).

Decision: API Contract Style

  • Decision: REST with explicit preview/confirm endpoints
  • Rationale: Clear separation between preview and confirmation phases enforces safety requirements; easy to document and test.
  • Alternatives considered: GraphQL (flexible but less explicit for multi-step destructive actions).

Decision: Testing Strategy

  • Decision: Rust unit/integration tests + HTTP API tests + NixOS VM tests
  • Rationale: Aligns with binding testing plan and ensures safety rules are enforced at multiple layers, including system service behavior.
  • Alternatives considered: Unit tests only (insufficient for safety guarantees).