Completed ✅ — built the full money stack
Stripe handles payments with two products set up — monthly retainer ($500 recurring) and setup fee ($1,500 one-time). Both checkout flows tested with the test cards, success and decline paths.
n8n webhook pipeline listens to three Stripe events: checkout.session.completed, invoice.paid, and customer.subscription.deleted. Each one routes to its own branch — new client gets inserted into Supabase, recurring payment gets logged, cancellation updates the client status automatically. Also wired a Tally form webhook so inbound leads land in a leads table the moment someone submits.
Supabase holds four tables: payments, clients, leads, and agent_sessions.
React dashboard (Vite + Supabase JS) pulls everything together — total revenue, active clients, lead funnel by status, recent payments window, and a data sources health check so you can see at a glance if any table has stopped receiving data. You can update lead and client statuses directly from the UI with a confirm modal before anything gets saved in supabase. Also.. Git — everything committed and pushed. Quick note on the emails — in the test I'm playing both the client and the seller so both alerts land in my inbox. In real life those go to two different people, the automation is working correctly.
Test worked end to end: Post → checkout link → 4242 4242 4242 4242 → webhook fired → n8n processed → Supabase stored → email alert sent → dashboard updated.
Where this could scale: The schema already has agent_sessions for when AI runs start getting logged. The Tally → n8n → leads flow can extend into a full nurture sequence (email drip, Calendly booking, auto proposal) without touching the dashboard code.
Is it perfect? Definitely not. There are rough edges and things I'd clean up. But the point was to build something scalable and learn the stack — and that part worked.
Good challenge.