A walk-through of the core flows: from a WhatsApp-era weekly plan, to one master log, to walker payouts and client invoices — all from a single source of truth.
Four primary entities and one event — the Walk — wire everything together.
Walks are the atomic billing unit. The engine groups completed walks by party and period, then computes totals with simple, transparent rules.
for each completed walk:
if invoice exists (party + period): skip
else group by client/walker → create invoice draft
client subtotal = Σ rate_per_walk × duration_multiplier(walk)
where multiplier = 1.2 if duration ≥ 45m else 1.0
walker subtotal = walks.count × walker.pay_per_walk
statuses: draft → sent → paid (idempotent transitions)| Capability | Client | Walker | Admin |
|---|---|---|---|
| View own walks | ✓ | ✓ | ✓ |
| View own invoices | ✓ | — | — |
| Mark walks complete | — | ✓ | ✓ |
| Manage clients / walkers | — | — | ✓ |
| Generate invoices & payouts | — | — | ✓ |
| Export logs | — | Self | All |