Continued from the Phase 1 handoff: finished the interrupted Phase 1 verify, then Sondra approved a batch in one directive: fix auth email for strangers, run /app-safety-check, add privacy + cookies, use her inbox logo (Amplif-AI pink/white) for favicon, switch to Sonnet 5 (cheaper), and build Phase 3. All done, verified, committed.
f37afec.testimonial vault + tv free/tv premium), webhook sig-reject/replay-dedupe proven. Commit df7cbd0.analyze, post-ready, request-testimonial) with thinking: {type: 'disabled'} β Sonnet 5 defaults adaptive thinking ON when omitted (measured 33-36s); disabled β median 15.7s (11.8-18.9s), quality held. Hero copy stays "in seconds" (15.7 median isn't honestly "under 15").vault@sondraverva.com, verified domain sondraverva.com), 30 emails/hr, and BOTH templates (magic link + signup confirmation) now show the 6-digit {{ .Token }} code. Verified: OTP send appears in Resend's log._INBOX-DROP-FILES-HERE/Amplif-AI LOGO Sq.png β app/public/favicon.png, apple-touch-icon.png, transparent logo-mark.png in all navs./privacy page (real data practices) + cookie banner (her Digital Home pattern) + footer link. Commit 7e96354./win/:token form (submit-win edge fn resolves tokenβuser server-side), Vault submissions inbox β Process with AI β Results β save marks submission processed, Request-a-Testimonial (premium, 3 asks w/ form link), CSV export (free β data-rights choice per PRD Β§7.7C, deviates from Β§6 premium list). Full browser E2E: anonymous submit β inbox β 19s analysis (name carried) β captions β saved. Commit 29f311b./app-safety-check ran (app-reviewer verdict: FIX FIRST) β all findings fixed + verified live, commit 1373556: per-IP/user rate limits on analyze (8/hr anon, 60/hr user), post-ready (3/hr anon demo), submit-win (5/hr) via hit_rate_limit() SQL fn (service-role only, fail-open) β verified 429s at exact cutoffs; archiveβrestore free-cap hole closed with BEFORE UPDATE trigger β verified FREE_CAP_REACHED on restore #16; top-level ErrorBoundary; real "Delete forever" on archived rows (matches privacy policy); /design route dev-only; CORS origins now read from ALLOWED_ORIGINS secret (launch = config change).rate_limits table emptied, scratchpad keys removed.c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\PRD-testimonial-vault-v1.md β build spec; Β§14 phases (next: Phase 4 Proof Gallery), Β§13 locked decisions.c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\app\ β app repo, master, 6 commits, clean tree.c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\app\supabase\functions\ β all 9 edge functions (analyze, post-ready, create-checkout, stripe-webhook, customer-portal, ghl-tag, submit-win, request-testimonial + _shared helpers incl. ratelimit.ts).c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\app\supabase\migrations\ β 4 migrations, all applied to project goplyqtirphckfvsydzb.beussyqbp; likely not killable via TaskStop from a fresh session β kill the node process if needed; restart: npm run dev in the app folder).goplyqtirphckfvsydzb: ACTIVE_HEALTHY, $10/mo. Function secrets set: ANTHROPIC_API_KEY, STRIPE_SECRET_KEY (test), STRIPE_WEBHOOK_SECRET, GHL_API_KEY, GHL_LOCATION_ID, SITE_URL=http://localhost:4902.we_1TpNP4RvzUwDwHkjY3TUanOO β the stripe-webhook function.curl -s -o /dev/null -w "%{http_code}" http://localhost:4902/ β expect 200.https://goplyqtirphckfvsydzb.supabase.co/functions/v1/analyze with anon key (from app\.env.local), body {"text":"...","source":"Email","who_from":"Client"} β expect {analysis:{...}} in ~12-19s.delete from public.rate_limits; (supabase MCP execute_sql).cd app && SUPABASE_ACCESS_TOKEN=$(python ../../../scripts/get_env.py SUPABASE_ACCESS_TOKEN) /c/Users/srver/AppData/Local/Programs/cli-bin/supabase.exe functions deploy <name> --project-ref goplyqtirphckfvsydzb --use-api (stripe-webhook needs --no-verify-jwt).ALLOWED_ORIGINS + update SITE_URL function secrets, switch Stripe to live keys + re-register live webhook, real domain + name decision.Either Sondra's hands-on test of localhost:4902 (feedback pass), or start Phase 4 (public Proof Gallery at /proof/[slug], featured testimonials, brand color, CTA) per PRD Β§14 β on her go.
Generated for the CEO Dashboard · source: PROJECTS/Testimonial Vault/handoffs/testimonial-vault-phase2-3-safety-2026-07-04.md π€