Hermes Wiki
LocalzDocs/Non-functional-Requirements

Non-functional Requirements

Living doc — measurable targets where a target is knowable yet, honest "not yet proven" flags where it isn't. Ties into Stack-Finalization-Draft.md (phases, RTO, data durability) and Localz-Strategy-and-Architecture-Note.md (the trust-engine/scheduler correctness requirements). Revisit whenever a Phase transition happens or real traffic data exists to replace a guess with a number.

Availability & reliability

Phase Uptime posture RTO (full VPS loss) RPO (data loss window)
Phase 1 (10s–100s users) Best-effort — no formal SLA, solo-run, single VPS ~4 hours, manual (see Stack-Finalization-Draft §Phase definitions) Up to last successful backup — documented accepted risk, not zero
Phase 2 (1,000s–10,000s users) Target 99.5% ~15 minutes, semi-automatic Zero for committed DB writes and in-flight processing — see "Data durability guarantee" in Stack-Finalization-Draft.md, this is a hard requirement not a target
Phase 3 (scaled) Target 99.9% Seconds–low minutes, automatic Zero, carried forward

Performance (targets to instrument, not committed SLAs until real traffic validates them)

  • Search results (DB full-text + geo, per Strategy Note §5's "start simple" build order): p95 under 500ms.
  • Booking action (create/confirm/cancel), including payment-intent creation: p95 under 1s end-to-end.
  • Chat/messaging delivery: under 2s.
  • All three instrumented via the already-decided Grafana/Prometheus/OTel stack — a target with no dashboard behind it isn't a real NFR, it's a guess.

Scalability

  • Scoped to the Phase definitions table in Stack-Finalization-Draft.md (10s–100s → 1,000s–10,000s → beyond) — scalability work is triggered by hitting a range, not a calendar date.
  • Horizontal scalability lives at the stateless app tier only (FastAPI/Next.js), per the architecture already decided — state stays off-box (Postgres/S3) so scaling the app tier doesn't risk data.
  • Scheduler/booking correctness (below) must hold at any concurrency level, from the first booking — this is not a scale-driven requirement, it's a correctness one.

Data integrity & durability

  • From Phase 2 onward: zero data loss, both data at rest (DB) and data in flight (mid-processing at the moment of a crash) — full mechanism in Stack-Finalization-Draft.md's "Data durability guarantee" section (transactional outbox, idempotent Celery tasks, persisted webhooks, atomic upload commits).
  • Phase 1: documented accepted risk — one manual backup + one test restore required before the first outside user (Pre-launch checklist), but no continuous-durability guarantee yet.

Correctness (marketplace-specific — these hold from MVP, they are not scale-gated)

  • No double-booking. A slot reservation must be atomic — held briefly (a short-lived hold), then committed or released, never "check then write." See Localz-Strategy-and-Architecture-Note.md §6 and its implementation note for the concrete mechanism. Required from the first booking, not deferred to Phase 2.
  • Review trust tiers are derived, never declared. Store the underlying facts (where discovery happened, whether payment was verified, whether completion was confirmed) and compute the tier — never store "verified" as an editable label (Strategy Note §3). This is a correctness/anti-fraud requirement, not a feature nice-to-have.
  • Proof of payment can only originate from the Stripe integration — never inferred from an OTP handshake or a user/provider claim (Strategy Note §4). Conflating the two silently breaks the trust model that differentiates Localz from an unverified Facebook review.

Security

  • Payments: Stripe Elements/Checkout only — Localz never touches raw card data, minimizing PCI scope to SAQ-A.
  • Secure document storage (KYC docs, rental/service agreements): encrypted at rest (S3/R2 default encryption), access scoped per document, not bucket-wide.
  • Admin MFA, secrets rotation, and admin-action audit logging are required by the Phase 1 launch gate, not deferred to Phase 2 — cheap to set up, catastrophic if skipped for a solo founder whose own dashboard logins are the company. See Stack-Finalization-Draft.md's "Access, secrets & audit" section.

Privacy & compliance

  • Anonymized/proxied communication already designed (Secure-Communication-Design.md).
  • ToS, privacy policy, data retention/deletion policy, and marketplace tax handling (1099-K/T4A-style provider reporting) are an open gap — required before the first real (non-founder) user touches production, not a Phase 2 item. Tracked in Stack-Finalization-Draft.md's "Legal & compliance" section.

Observability

  • Every core-loop action (search, booking, payment, review) must be traceable end-to-end through the already-decided Grafana/Prometheus/Loki/Sentry/OTel stack — infra-level uptime dashboards alone don't satisfy this; a failed booking must be diagnosable from a trace, not just inferred from an error count.

Usability

  • No hard numbers yet — qualitative until real user testing exists:
    • A provider should be able to list a first offering without needing support/documentation.
    • A consumer's search-to-booking path should be the shortest of any local-services flow they've used (the explicit product bet per the Strategy Note — availability-aware, trust-ranked search is the wedge).
  • Revisit with real usability-testing numbers once there's a first cohort of real users.

Maintainability & operability (the solo-founder constraint, made explicit)

  • Every infra decision must remain operable by one person through Phase 2 — this is why low-ops is priority #4 in Stack-Finalization-Draft.md rather than dropped entirely; HA/security/OSS priorities never get to assume a team that doesn't exist yet.
  • Reproducibility: the running infrastructure must be rebuildable from documentation, not from what's in the founder's head. See "Infra-as-code / reproducibility" in Stack-Finalization-Draft.md.
Hermes Wiki