Redbeanco Detailing

Project Status Dashboard

Roadmap & Gantt

Created: 2026-07-14 Basis: docs/STATUS-2026-07-13.md (35 commits, branch review-backend-foundation) Horizon: W1 (week of Mon 2026-07-14) → W12 (week of Mon 2026-09-29) Assumptions: solo developer, ~5 productive days/week; estimates are deliberately buffered (friction, debugging, verification, external back-and-forth already baked in — generous, per request). External waits are filled with parallel workstreams. Calendar: W1 Jul 14 · W2 Jul 21 · W3 Jul 28 · W4 Aug 4 · W5 Aug 11 · W6 Aug 18 · W7 Aug 25 · W8 Sep 1 · W9 Sep 8 · W10 Sep 15 · W11 Sep 22 · W12 Sep 29

Tier-2 (Rust/Garage) is off the launch critical path (degrades gracefully) but on the monitoring-readiness path.

Legend (text Gantt): ██ active work · ▒▒ external wait · ·· idle · milestone


1. Estimates by workstream (large task → subtasks → buffered days)

WS1 — Forgejo remote + CI activation · ~8 days · unblocks everything

  • Create Forgejo repo + push review-backend-foundation — 1d
  • Make ci.yaml green (build + cargo test + nix build .#zola-site) — 3d
  • Add cargo clippy -D warnings + cargo audit + gitleaks — 2d
  • First green CI run + fix flakes — 2d

WS2 — Phase 1 security hardening · ~17 days

  • Obtain CF Access team domain + audience (external wait) — 2–5d
  • RS256 JWT verify on /api/staff/* — 4d
  • Rate limiting /api/booking + /api/photos/presign — 2d
  • Tighten CSP off 'unsafe-inline' — 4d
  • Constant-time sig compare + require webhook_secret in prod — 1d
  • R2 bucket policy + presign-expiry audit — 2d
  • Security review pass — 2d

WS3 — Infra + first deploy · ~14 days

  • Public R2 bucket + PHOTOS_PUBLIC_BASE + BOOKING_DOMAIN — 2d
  • deploy-secrets to prod (needs real keys ready) — 1d
  • wrangler deploy 4 workers (first-deploy friction) — 3d
  • CF Pages publish (zola-site) — 1d
  • Stripe webhook endpoint registration + test event — 2d
  • DNS forbrisbane.org + DKIM/SPF (Resend) — 3d
  • Prod end-to-end test booking (test pay + refund) — 2d

WS4 — Testing & QA · ~22 days

  • Playwright scaffold + booking E2E (en) — 4d
  • zh + zh-Hant E2E — 2d
  • Staff workflow E2E (dashboard/surcharge/cancel/photos/complete) — 4d
  • Integration suite (Stripe test-mode webhook) — 3d
  • k6 load run + tune to p95 < 500ms — 3d
  • OWASP ZAP scan + remediate findings — 4d
  • Fixtures + CI integration — 2d

WS5 — Monitoring & alerts · ~10 days

  • Alert rules (RefundCronFailure, MirrorLagHigh, DetailingServiceDown, SyncErrors, SurchargeStuck, HighMemory) — 3d
  • ntfy routing + cron refund-failure alert (workers/cron/src/lib.rs:105) — 2d
  • CF Dashboard alerts (Worker errors, D1 latency, Queue depth, Cron) — 2d
  • UptimeRobot — 1d
  • Alert-fire verification (stop-services test) — 2d

WS6 — Notifications polish · ~15 days (partly deferrable)

  • Delivery-status tracking (ClickSend/Resend webhooks → audit) — 4d
  • Cross-provider fallback (ClickSend↔Resend) — 3d
  • Staff ntfy push for new bookings (from worker) — 2d
  • ACMA Sender ID registration verification (external) — up to 2wk wait
  • Inbound SMS (customer replies) — 4d (can move post-launch)

WS7 — Tier-2 Rust service + Garage · ~20 days

  • Finish cf_metrics (CF Analytics API call, rust-service/src/cf_metrics.rs:95) — 3d
  • build-image.yaml (container build/push to Forgejo registry) — 3d
  • Garage deploy in nixos-redbeanco (cross-repo) — 4d
  • detailing-service.nix k3s module + ExternalSecret/OpenBao — 4d
  • ArgoCD deploy + /metrics scrape verify — 2d
  • Daily 8am ntfy business summary — 2d
  • D1/R2 mirror verification (data in Garage) — 2d

WS8 — Feature gaps + cleanup · ~9 days

  • Customer status-tracking /track?id= page — 3d
  • Services/pricing explainer page — 2d
  • Form persistence (sessionStorage) — 1d
  • Background Sync real-device verification — 2d
  • Stale TODO cleanup + Lighthouse verify — 1d

WS9 — Launch prep · ~11 days + print lead time

  • QR code design + order print (weatherproof) — 2d + 5–10d lead (order early)
  • Staff training (PWA walkthrough) — 2d
  • Runbook finalize — 2d
  • Rollback drill — 2d
  • Legal: Privacy/ToS published EN+ZH verified — 1d
  • Prod e2e test booking (real payment + photos + MMS + refund) — 2d

WS10 — Post-launch · ongoing (not on finite Gantt)


2. Text Gantt (workstream-level, W1–W12)

Workstream             W1  W2  W3  W4  W5  W6  W7  W8  W9  W10 W11 W12
                       Jul14 Jul21 Jul28 Aug4 Aug11 Aug18 Aug25 Sep1 Sep8 Sep15 Sep22 Sep29
WS1 Forgejo+CI         ██  ██  ··  ··  ··  ··  ··  ··  ··  ··  ··  ··
WS2 Security           ██  ██  ██  ██  ··  ··  ··  ··  ··  ··  ··  ··
WS3 Infra + deploy     ··  ██  ██  ██  ··  ··  ··  ··  ··  ··  ··  ··
WS4 Testing & QA       ··  ··  ██  ██  ██  ██  ██  ··  ··  ··  ··  ··
WS5 Monitoring         ··  ··  ··  ··  ██  ██  ██  ··  ··  ··  ··  ··
WS6 Notifications      ··  ··  ··  ··  ██  ██  ██  ██  ··  ··  ··  ··
WS7 Tier-2 + Garage    ··  ··  ··  ██  ██  ██  ██  ██  ··  ··  ··  ··
WS8 Feature gaps       ··  ··  ██  ██  ██  ··  ··  ··  ··  ··  ··  ··
WS9 Launch prep        ··  ··  ··  ··  ▒▒  ··  ··  ██  ██  ██  ██  ··
Post-launch (ongoing)  ··  ··  ··  ··  ··  ··  ··  ··  ··  ··  ··  ██→
Milestones             ··  ··  ··  ◆A  ··  ··  ··  ··  ··  ◆B  ··  ◆C

Milestones

  • ◆A W4 (Aug 4–10) — first production deploy (workers + Pages + Stripe webhook + test booking).
  • ◆B W10 (Sep 15–21) — soft launch (internal / test customers; monitoring active).
  • ◆C W12 (Sep 29–Oct 5) — public launch (QR placed at airport, full e2e verified).

3. Timeline (Gantt)

Pure-CSS timeline (no JS, renders in every browser). Red bars and red ◆ markers are the critical path; gold ◆ are non-critical milestones.

Workstream / task
W1Jul 14
W2Jul 21
W3Jul 28
W4Aug 4
W5Aug 11
W6Aug 18
W7Aug 25
W8Sep 1
W9Sep 8
W10Sep 15
W11Sep 22
W12Sep 29
CI / Remote
Forgejo repo + push branch
Make ci.yaml green
clippy -D + cargo audit + gitleaks
First green CI + fix flakes
Security
CF Access team domain + audience (ext)
RS256 JWT verify /api/staff/*
Rate limit booking + presign
Tighten CSP off unsafe-inline
Constant-time sig + require secret
R2 policy + presign expiry audit
Security review pass
Infra + Deploy
Public R2 bucket + PHOTOS_PUBLIC_BASE
deploy-secrets to prod
wrangler deploy 4 workers
CF Pages publish (zola-site)
Stripe webhook registration + test
DNS forbrisbane.org + DKIM/SPF
Prod test booking (pay + refund)
Milestone A — first prod deploy
Testing & QA
Playwright scaffold + booking EN e2e
zh + zh-Hant e2e
Staff workflow e2e
Integration suite (Stripe test mode)
k6 load run + tune p95
OWASP ZAP scan + remediate
Fixtures + CI integration
Monitoring
Alert rules (6 rules)
ntfy routing + cron refund alert
CF Dashboard alerts
UptimeRobot
Alert-fire verification
Notifications
Delivery-status tracking
Cross-provider fallback
Staff ntfy push (new bookings)
ACMA Sender ID verification (ext)
Inbound SMS (post-launch deferrable)
Tier-2 (Rust + Garage)
Finish cf_metrics API call
build-image.yaml + registry push
Garage deploy (nixos-redbeanco)
detailing-service.nix + ExternalSecret
ArgoCD deploy + metrics scrape verify
Daily 8am ntfy business summary
D1/R2 mirror verification
Feature gaps
Customer /track?id= status page
Services/pricing explainer page
Form persistence (sessionStorage)
Background Sync device verification
Stale TODO cleanup + Lighthouse
Launch prep
QR code design + order print (ext)
Staff training (PWA walkthrough)
Runbook finalize
Rollback drill
Legal Privacy/ToS EN+ZH verified
Prod e2e test booking (full)
Milestone B — soft launch
Milestone C — public launch

4. Critical path

WS1 (W1) → WS3 (W2–W4, ◆A) → WS4 (W3–W7) → WS9 (W8–W11) → ◆C (W12)

WS2 (security) runs parallel but must complete before ◆C; if the CF Access team-domain/audience info is delayed, WS2's JWT task becomes critical — chase it in W1.


5. Long poles / risks (the things that slip)

  1. CF Access team domain + audience (external) — can stall staff JWT. Submit request W1.
  2. ACMA Sender ID registration (external) — 1–2 wk; needed before real SMS. Submit W1.
  3. QR code print (external) — 1–2 wk lead. Order by W5 so it's ready for W10.
  4. Account verification (Stripe ABN, Resend domain) — external; gates WS3. Confirm W1.
  5. Garage / k3s (cross-repo nixos-redbeanco) — coordination; can slip Tier-2 (not on launch path, but on monitoring-readiness).
  6. First-deploy friction (Workers/Pages/Queues/Cron) — buffered in WS3.

6. Buffer / reality check

  • Solo + external delays hitting: add +2–3 weeks → public launch could slip to mid–late October.
  • Tier-2 (WS7) can be deferred past launch without blocking customers (it's async mirror/monitoring); prioritize launch-critical path first.