Continued from the Wall of Proof handoff (pasted at session start). Sondra's locked Shapo-parity order had (3) Widgets next; she said "build" three times and items 3, 4, and 5 all shipped this session, each verified end-to-end with throwaway premium users that were deleted after. Session began with /prime (all daily syncs SKIP, compile already ran today โ nothing brain-related this session).
All commits in c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\app\ (master, clean tree, 3 commits โ identify by message):
public\embed.js loader (paste-once script โ auto-sizing iframe per data-tv-widget div; postMessage height with origin+source checks; double-paste safe; broken slug collapses to 0px). New /embed/:slug route (src\pages\WidgetEmbed.jsx) renders inside the iframe: transparent body, grid or scroll-snap carousel with arrows, Powered-by footer; ProofCard + THEMES extracted as exports from src\components\WallOfProof.jsx and reused. New widgets_enabled column gates it (migration 20260704_widgets.sql); gallery edge fn takes widget:true. Embed panel lives INSIDE GalleryModal ("Put it on your website": toggle + grid/carousel snippets + previews). Embeds and wall publish independently. NOTE: copied embed codes bake window.location.origin โ localhost until deployed./stars/:slug (src\pages\GetMoreStars.jsx): branded link-in-bio hub of review destinations + opt-in Share Your Win button (/win/<api_token>). Migration 20260704_get_more_stars.sql: booster_enabled/booster_headline/booster_links jsonb/booster_include_form. Gallery fn booster:true mode sanitizes links server-side (https only, cap 12, strings capped) โ a planted javascript: link and an http:// link were both stripped in tests. New src\components\StarsModal.jsx ("Get More Stars" button in Vault header): links editor, headline, include-form toggle, copy page link, and the Google JSON-LD review-schema generator (business name + type dropdown, default ProfessionalService) built client-side from share-permitted rated testimonials โ names permission-formatted via displayName ("R. R." verified for initials-only), aggregate rating computed live (verified "4.5 โ
average ยท 2 testimonials"). Shares the wall's slug + design.submit-win fn gains a brand:true read branch placed BEFORE the rate limiter (page loads never eat the 5/hr submission quota): token โ logo/brand_color/theme/font, premium-gated (free โ default look). src\pages\WinForm.jsx restyled: navy header + logo, dark/light themed fields (incl. native date picker via colorScheme), brand-color accents, themed thank-you screen, and bad tokens now show a proper "form isn't available" page. UI submission verified landing in form_submissions from the real browser.app\supabase\migrations\. Edge fns deployed: gallery (twice), submit-win (once) via npx supabase functions deploy <fn> --project-ref goplyqtirphckfvsydzb with SUPABASE_ACCESS_TOKEN from master .env.api.supabase.com needs a real User-Agent; python-urllib default is Cloudflare-blocked) โ seed โ curl checks โ browser drive โ delete + verify 0 remaining. Three throwaway users created and fully cleaned (verified 0 testimonials / 0 profiles / 0 form_submissions each time). Sondra's real account (slug srverva) untouched โ her widgets/booster toggles are OFF until she enables them.c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\design-verify\ (widget-embed-test, widget-carousel-view, stars-page-full, stars-modal-view, form-dark-branded, form-done-dark).c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\PRD-testimonial-vault-v1.md โ ยง4.5 + teardown steal list; Campaigns spec source (Shapo: CSV upload โ merge-field email wizard โ stats; marked High effort/v2 there, but it's next in her locked order).c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\shapo-teardown-2026-07-03.md โ Campaigns detail (500/mo, dedup stats, sender fields, test send, can't-stop-once-launched, unsubscribe, per-recipient log).c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\app\supabase\functions\gallery\index.ts โ now serves wall + widget + booster modes; the pattern for any new public surface.c:\Users\srver\AIOS-Workspace\aios-starter-kit\PROJECTS\Testimonial Vault\app\supabase\functions\submit-win\index.ts โ brand branch + rate-limit ordering; request-testimonial fn also exists (AI invite writer, no sending).npm run dev in the app folder). A SECOND Vite instance answers on port 4903 (also from an old session) โ it shadowed a test http.server this session; don't assume 4903 is free.wmic process where "commandline like '%mcp-chrome%'" get processid โ taskkill /PID <pid> /F (the .ps1 route failed with exit 255 this session; the python route "fails" with exit 1 but actually kills). Working drive pattern: one navigate + ONE big async browser_evaluate. Browser localStorage session was CLEARED at cleanup this time โ no stale test user left.goplyqtirphckfvsydzb: ACTIVE_HEALTHY, cleaned.curl -s -o /dev/null -w "%{http_code}" http://localhost:4902/ โ 200.{"slug":"srverva"} to https://goplyqtirphckfvsydzb.supabase.co/functions/v1/gallery (anon key as Bearer+apikey) โ 200 with 1 item; {"slug":"srverva","widget":true} and {"slug":"srverva","booster":true} โ both 404 (her toggles off); that's correct.{"token":"00000000-0000-0000-0000-000000000000","brand":true} to .../functions/v1/submit-win โ 404.npx vite build in the app folder โ builds clean.request-testimonial fn already writes the invite copy.Sondra says "build" (or similar) โ scope + build Campaigns: contact list upload, personalized request emails via Resend using the existing request-testimonial copy engine, per-recipient status, unsubscribe compliance; premium-gated; verified end-to-end like this session.
Generated for the CEO Dashboard · source: PROJECTS/Testimonial Vault/handoffs/testimonial-vault-widgets-stars-form-2026-07-04.md ๐ค