🏢 Business Information
📋 Business Details
📍 Service Area & Travel
💳 Payment Settings
🎨 Performers / Contractors
💰 Service Pricing
🎨 Individual Services
Click any price to edit. Changes auto-save. Durations 1-4hr shown on website; 5-8hr for AI/admin only.
⭐ Value Packages
📅 Scheduling Settings
⏰ Booking Rules
🗺️ Service Regions
💬 SMS / Message Templates
Customize the automated messages sent to customers. Use {{variableName}} for dynamic content.
🔗 Integrations
📱 Vonage (Phone & SMS)
💳 Stripe (Payments)
🔗 N8N Webhooks
👤 Admin Users
Authorized Users
🚗 Artist Dispatch & Scoring
Configure how artists are scored and assigned to bookings. Weights must total 100%.
⚖️ Scoring Weights
Adjust how each factor influences artist selection. Total: 100%
📍 Distance & Travel
🎈 Event Type Multipliers
Adjust priority for different event types. 1.0 = normal priority.
🔔 Regional Notification Routing
Route form submissions, AI call transcripts, booking confirmations, and cancellations to regional sales managers. All Cities recipients get notified for every region. Regional recipients only get their metro area.
📚 Poppin' Parties TX — System Docs
v1.0.0About This System
The Poppin' Parties TX automation platform handles booking inquiries, automated quoting, Stripe payment link generation, SMS notifications, Google Calendar scheduling, and AI-powered phone support across DFW, Houston, and Austin metro areas.
- Website: poppinpartiestx.com — 280+ SEO landing pages + 6 service pages
- Contact Form: Webhook → N8N → Gmail notification + customer confirmation
- Payment: Stripe Payment Links sent via Vonage SMS
- Scheduling: Google Calendar per performer
- Phone: Vonage + Cartesia AI voice agent for inbound/outbound
- Admin: This portal (admin.poppinpartiestx.com)
🏗️ System Architecture
Data Flow
Customer Journey:
Website Form → N8N Webhook (popn-contact)
OR
Phone Call → Vonage → AI Voice Agent (Cartesia)
↓
┌─────────────────────────────────────┐
│ N8N Workflow Engine │
├─────────────────────────────────────┤
│ POPN-webform (contact form) │
│ POPN-create-booking │
│ POPN-get-slots │
│ POPN-cancel-booking │
│ POPN-payment-link (Stripe) │
│ POPN-stripe-event (payment conf.) │
│ POPN-voice-events │
│ POPN-config (config server) │
└─────────────────────────────────────┘
↓ ↓
Google Calendar Config Server
(per performer) (.POPN-variables.json)
↓
Admin Portal (this app)
- Pricing management
- Performer management
- SMS templates
- Integration config
Tech Stack
| Website | Static HTML/CSS/JS, 280 SEO pages |
| Admin Portal | Vanilla HTML/CSS/JS SPA |
| Config Server | Express.js on port 3002 |
| Workflows | N8N (self-hosted at n8n.optimus.systems) |
| Payments | Stripe Payment Links API |
| SMS | Vonage Messages API |
| Voice AI | Cartesia Line Agent + GROQ LLM |
| Calendar | Google Calendar API (OAuth2) |
💰 Individual Service Pricing
Face Painting OR Balloon Twisting
1 artist provides the service. Same pricing for either service.
Bubble Party
Includes bubble machines, wands & pools. Outdoor recommended.
Caricatures OR Glitter Tattoos
1 artist. ⚠️ Caricatures NOT available in Houston region.
Live Glitter Fashion Drawing
1 artist. Premium service — no 1.5hr or 2.5hr options.
⭐ Value Package Pricing
🚗 Travel & Fee Structure
Travel Fee
- Flat $25 within 80-mile radius
- Radius measured from HQ (14201 Coyote Trail, Haslet TX) or assigned contractor's base location
- Beyond radius: contact for custom quote
Payment Structure
- Deposit: 30% non-refundable (unless Poppin' cancels → full refund)
- Final Balance: Remaining 70% collected 3 days before event
- Method: Stripe Payment Links sent via SMS
🎨 All Services
🗺️ Service Regions
📋 Booking Flow
End-to-End Booking Process
| # | Step | Trigger | Action |
|---|---|---|---|
| 1 | Inquiry | Website form or phone call | N8N receives submission, emails owner + confirms customer |
| 2 | Quote | KateLyn reviews | Send SMS with price breakdown (base + travel) + service menus |
| 3 | Accept | Customer says yes | Send 30% deposit Stripe link via SMS |
| 4 | Booked | Stripe webhook: deposit paid | Confirm booking, create calendar event, assign performer |
| 5 | Reminder | 3 days before event | Send final balance Stripe link + artist info via SMS |
| 6 | Event Day | Final payment confirmed | Send event confirmation + artist contact |
| 7 | Follow-up | 1 day after event | Send Google review request via SMS |
💳 Payment Flow
Two-Stage Stripe Payment Links
Stage 1: Deposit Customer confirms → N8N creates Stripe Payment Link (30%) → Vonage sends SMS with link → Customer pays → Stripe webhook fires checkout.session.completed → N8N triggers "Booked" confirmation + calendar event Stage 2: Final Balance (3 days before event) Scheduled N8N trigger → Creates Stripe link for remaining 70% → Vonage sends SMS with link + artist info → Customer pays → Stripe webhook confirms → event fully paid
💬 SMS Communication Workflows
🔗 N8N Webhooks
💳 Stripe Integration
Setup
- Create Stripe account for Poppin' Parties TX
- Add publishable key + secret key in Integrations tab
- Set up webhook endpoint:
https://n8n.optimus.systems/webhook/popn-stripe-event - Subscribe to event:
checkout.session.completed
Payment Link API
N8N workflow creates payment links dynamically via POST /v1/payment_links with amount, description, and metadata (booking ID, customer name).
📱 Vonage Integration
Phone Number
Vonage number: +1 (972) 777-6725
Capabilities
- SMS: Send/receive text messages (payment links, confirmations, reviews)
- Voice: Inbound call routing to AI agent, outbound lead follow-up
🤖 AI Phone Agent
Overview
Cartesia Line AI agent handles inbound and outbound calls with a fun, party-themed personality matching the Poppin' Parties brand.
Capabilities
- Inbound: Answer availability questions, quote prices, take booking details, check calendar
- Outbound: Follow up on website form submissions that haven't converted
- Pricing: Query config server for real-time quotes (up to 8hr events)
- Handoff: Transfer to KateLyn for complex requests
🌐 Landing Pages
Overview
280 auto-generated city+service SEO landing pages across 3 regions. Generated by node generate-seo-pages.js. Do not hand-edit — they are overwritten by the generator.
Core Service Pages
| Page | URL |
|---|---|
| 🏠 Homepage | poppinpartiestx.com |
| 🎨 Face Painting | /face-painting |
| 🎈 Balloon Twisting | /balloon-twisting |
| ✏️ Caricatures | /caricatures |
| ✨ Glitter Tattoos | /glitter-tattoos |
| 🫧 Bubble Party | /bubble-party |
| 📜 Privacy Policy | /privacy-policy |
| 📜 Terms & Conditions | /terms-and-conditions |
📅 Calendar Color Legend
Payment Status Colors
Calendar events automatically change color as payments are received:
| Color | Status | Meaning |
|---|---|---|
| 🟠 Tangerine | Unpaid | New booking — no payment received yet |
| 🟡 Banana | Deposit Paid | 30% deposit received, balance still pending |
| 🟢 Sage | Fully Paid | All payments received (deposit + balance, or full upfront) |
How It Works
- New bookings are created with tangerine (unpaid)
- When Stripe fires
checkout.session.completed, the POPN - Payment Received N8N workflow updates the event color and description - Payment status is only visible to owners in the calendar description (artists see event details only)
- You can also manually record a payment via the webhook (see BOOKING-AUTOMATION-SYSTEM.md)
🔗 External Services & Dashboards
Core Integrations
| Service | Purpose | Dashboard / Docs |
|---|---|---|
| 📱 Vonage | SMS messaging + Voice (phone number: +1 972-777-6725) | dashboard.nexmo.com · Docs |
| 🗣️ Cartesia | AI Voice Agent — STT (Ink) + TTS (Sonic 3) | play.cartesia.ai · Docs |
| ⚡ Groq | LLM inference — fast (gpt-oss-20b) + smart (gpt-oss-120b) | console.groq.com · Docs |
| 💳 Stripe | Payment Links API — deposit + final balance | dashboard.stripe.com · API Docs |
| 🔄 N8N | Workflow automation (self-hosted) | n8n.optimus.systems · Docs |
| 📅 Google Calendar | Per-performer scheduling & availability | calendar.google.com · API Docs |
| 🔐 Google OAuth | Admin portal authentication | GCP Console · Docs |
Infrastructure
| Service | Purpose | URL / Notes |
|---|---|---|
| 🌐 Website | Public-facing site | poppinpartiestx.com |
| 🛡️ Admin Portal | This portal | admin.poppinpartiestx.com |
| ⚙️ Config Server | Express.js API (port 3002) | api.poppinpartiestx.com |
| 🐳 VPS / Docker | Nginx + Traefik hosting | 212.38.95.250 · Docker containers |
| 📊 Google Search Console | SEO monitoring & indexing | search.google.com/search-console |
| 📈 Google Analytics | Website traffic analytics | analytics.google.com |
| 📢 Google Ads | Paid advertising campaigns | ads.google.com |
📱 Admin Portal Guide
Getting Started
- Sign in with an authorized Google account (set in Admin Users tab)
- All changes auto-save after a 1.5s delay or when clicking Save
- The ⚡ indicator shows unsaved changes
Tabs Reference
| 🏢 Business | Company info, address, travel fee, deposit %, payment timing |
| 🎨 Performers | Add/edit performers — name, skills, calendar, working hours, base location |
| 💰 Pricing | Edit all service prices (1-8hr) for individual & packages |
| 📅 Scheduling | Booking rules (advance time, max duration, slot intervals) + regions |
| 💬 SMS Templates | Customize automated messages — use {{variables}} for dynamic content |
| 🔗 Integrations | Vonage, Stripe, N8N webhook URLs |
| 👤 Admin Users | Manage authorized Google accounts + Google OAuth client ID |
| 📚 Docs | This documentation section |
⚙️ Config Reference
Config Server API
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/health | GET | None | Health check |
/config | GET | Optional | Full config (secrets masked without API key) |
/config | POST | X-API-KEY | Update config sections |
/pricing/quote | GET | None | Calculate price quote |
Quote API Example
GET /pricing/quote?services=face-painting,balloon-twisting&duration=2&city=Dallas
Response:
{
"services": "Face Painting + Balloon Twisting",
"duration": 2, "basePrice": 350,
"travelFee": 25, "totalPrice": 375,
"depositPercent": 30, "depositAmount": 113,
"balanceAmount": 262, "artistsRequired": 2
}