🏢 Business Information
📋 Business Details
📍 Service Area & Travel
💳 Payment Settings
🎨 Performers / Contractors
💰 Service Pricing
🎨 Average Guests Per Artist Hour
These rates drive Bella's capacity guidance and the capacity/hour labels in the AI/Admin capacity pricing chart below.
🎨 Individual Services
Click any price to edit. Changes auto-save. Durations 1-4hr shown on website; 5-8hr for AI/admin only.
⭐ Value Packages
Used for condensed timelines when guest count requires 2-4 artists. Travel is added per artist by the quote engine.
📅 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)
💳 Payment Accounts — define every Square account this business can issue payment links from. Each region (in Notifications) picks one of these by name. Square handles all payment collection (incl. tipping) on its hosted page so you stay out of card data.
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.
📞 Phone Routing
Control how inbound calls are handled — AI agent behavior, who gets called on transfer, and debug options.
🔀 Routing Mode
⭐ On Call
On Call performers ring before regional priorities. Bypass AI and Debug mode use this list directly because Bella does not collect a city or region first.
⚙️ Transfer Settings
🎨 AI Regional Routing Priorities
Set per-region priority for each artist. Lower number = rings first. Leave blank to exclude from that region. Phone numbers come from the Performers tab (read-only here).
☎ Place Call
💬 Messages
📝 Form Submissions
All website contact-form submissions. N8N persists each submission here before sending notification emails, so submissions survive any email delivery failure.
📞 Call Transcripts
🧰 Manual Actions
Hermes — AI Platform Manager
Hermes is the AI platform manager for Optimus Systems. From here Hermes will plan, moderate, and orchestrate work across every tenant and integration — booking ops, dispatch, marketing, voice agents, and reporting.
📥 Greenlight Gate Inbox
Specialist replies queued for human review before they ship (Legal by default; any per-call override).
Coming soon
- Cross-tenant moderation & routing
- Plan / draft / execute against platform integrations
- Conversational admin operations (no more clicking through tabs)
- Audit trail of every Hermes action per tenant
🎙️ Voice Agent — Stack & Flow
Configure which speech-to-speech stack runs the Bella inbound phone agent. Vonage / OpenAI GPT Realtime is the active stack today (single integrated speech-to-speech model in the FastAPI bridge). Vonage / xAI Grok Realtime remains available as an alternate realtime bridge. Vonage / Cartesia / Groq and Vonage / ElevenLabs / Groq are legacy reference options only and are not deployed. Telephony stays on Vonage in every stack — only the realtime brain swaps.
🔀 Active Stack
🔁 Audio Pipeline (per call)
🧭 Conversation Flow — adapts to active stack & enabled capabilities
Bella's runtime conversation graph. Branches, loops, parallel tool fans, and side-effect paths are drawn from the currently selected stack plus the enabled tools and toggles below. Disable a tool or change the stack to see the graph re-route in real time.
🔊 ElevenLabs Configuration
✨ OpenAI GPT Realtime Configuration
wss://api.openai.com/v1/realtime?model=gpt-realtimeBridge:
/api/popn/voice/gpt-bridge/{slug}. Uses the same Bella tools, transcript persistence,
live transfer repair, and Vonage PCM relay/resampling as the existing realtime bridge.
🚀 Realtime advanced
⚡ xAI Grok Realtime Configuration
wss://api.x.ai/v1/realtime?model=grok-voice-think-fast-1.0Protocol: OpenAI Realtime API-compatible. Custom function tools, parallel tool calls, native G.711 μ-law support, server VAD with barge-in. Connection cap: 25 minutes (auto-reconnect handled by bridge).
🚀 Realtime advanced & best practices
- Send
session.updateimmediately after WS open withinstructions,tools,turn_detection, and audio formats — never wait for first audio. - Pre-warm with a silent
response.createif greeting feels delayed. - Use
input_audio_transcriptionwithwhisper-1if you need a textual transcript (model still produces audio natively). - Cap
max_response_output_tokensat 600 for phone — keeps Bella under 50 words/turn. - Keep
temperatureat 0.6–0.8 for booking flows; lower means more deterministic price reads. - Re-open the WebSocket at ≤24 min and replay the last user turn for seamless continuity past the 25-min cap.
- Prefer Remote MCP for tools when you have stable webhook URLs — eliminates client-side loopback latency.
🎙️ Customer Test Voice
Used only by Voice Ops synthetic customer calls. Changes are DB-backed and take effect on the next test call; Bella's production voice stack is configured separately above.
🎚️ Legacy Cartesia audit fields
🧠 Customer Test Brain
Used by Voice Ops for dynamic John Wayne test-customer responses. This is always active for AI-driven test calls and does not control Bella's production realtime stack.
📝 Customer System Prompt
Provider/model-specific prompt for Voice Ops synthetic customers. Changing the realtime provider/model or split Brain provider/model loads that combination's saved prompt.
🧪 Customer Test Scenarios
DB-backed scenario facts for Voice Ops runs. These values are merged into the built-in catalog at test time, so edits take effect without rebuilding containers.
Model-only runs are still written to the Calls tab and labeled separately from live phone calls.
🎚️ API Toggles
🗣️ Pronunciation Library — injected into OpenAI/Grok realtime instructions
Override how Bella pronounces specific terms — performer nicknames, neighborhood names, services, brand names. Enabled hints are appended to Bella's session instructions when the realtime call starts. The term stays as the canonical spelling for tool matching; only the pronunciation value changes how Bella says it.
📚 Knowledge Base — context snippets injected into Bella's system prompt
Add brand-specific facts, FAQs, policies, neighborhood notes, or seasonal info. Each
enabled entry is concatenated into the agent's instructions at session
start. Tag entries to scope them (e.g. pricing, cancellation,
seasonal) and keep the total library concise; long entries are trimmed before
they are sent to the realtime model.
🛠️ Tool Registry
Custom function tools registered with the active stack. All tools post to N8N webhooks
with the X-Internal-Key header. Disable a tool to remove it from Bella's
session.update on the next call.
| Enabled | Tool name | N8N webhook | Description |
|---|---|---|---|
check_service_area |
/webhook/popn-dispatch (coverage-only) |
Verify city is in service area + return region slug | |
get_pricing_quote |
/api/popn/pricing/quote/ (DB) |
Compute service + travel + add-ons (DB-driven) | |
get_available_slots |
/webhook/popn-dispatch |
Score artists for a specific date/time/city | |
check_artist_availability |
/api/popn/availability/ (DB, real-time) |
Pre-transfer: is anyone free RIGHT NOW? Returns reason code | |
create_booking |
/webhook/popn-create-booking |
Persist booking + dispatch Square payment link via SMS | |
cancel_booking |
/webhook/popn-cancel-booking |
Mark booking cancelled, notify performer + customer | |
notify_region_owner |
/webhook/popn-owner-notifications |
Escalate rush/complaint/custom request to regional manager (SMS+email) | |
forward_message |
/webhook/popn-internal-notifications |
Take a message for a specific staff member when transfer isn't possible | |
initiate_transfer |
(NCCO connect → sequential ring) | Live transfer to artist via Vonage. Requires check_artist_availability first |
|
| always | end_call |
(bridge-internal hangup) | Required at end of every non-transferred call. Bella must emit alongside her farewell |
📚 Poppin' Partiez — System Docs
v1.0.0About This System
The Poppin' Partiez automation platform handles booking inquiries, automated quoting, Square hosted payment link generation, SMS notifications, Google Calendar scheduling, and AI-powered phone support across DFW, Houston, Austin, San Antonio, Waco/Temple, and Stephenville/De Leon metro areas.
- Website: PoppinPartiez.com — 775 SEO pages (642 city+service + 127 city hubs + 6 regional hubs)
- Contact Form: Webhook → N8N → Gmail notification + customer confirmation
- Payment: Square hosted payment links sent via Vonage SMS
- Scheduling: Google Calendar per performer
- Phone: Vonage + OpenAI GPT Realtime AI voice agent for inbound/outbound
- Admin: This portal (admin.poppinpartiez.com)
💵 Systems Expenses Breakdown
Monthly cost estimate for the underlying infrastructure and third-party services that power the booking automation, AI phone agent, SMS, calendar, and website. System costs are everything you wouldn't pay for if you ran the business manually. Payment processing fees are listed separately below — those are a cost of doing business and would apply with or without this platform (any time you accept a card). Usage-based services are estimated at low / typical / high volume tiers (30 / 100 / 250 bookings per month). Vendor list prices as of May 2026.
Fixed Monthly Costs
| Service | What it does | Plan | Cost / mo |
|---|---|---|---|
| VPS Hosting (212.38.95.250) | Single Linux server running nginx, N8N, PostgreSQL, FastAPI backend, Traefik (SSL), and the Optimus Ops platform — all in Docker | Hetzner-class CX22 / CPX21 (4 vCPU, 8 GB RAM, 80 GB SSD) | ~$8 – $15 |
| Domain Names | poppinpartiez.com + legacy poppinpartiestx.com / poppinpartieztx.com compatibility domains |
Registrar (annual ÷ 12) | ~$2 – $4 |
| Vonage Phone Number | Toll-free presence: +1 (972) 777-6725 for SMS + voice | 1 long-code US number | ~$1.00 |
| Vonage 10DLC Registration | US carrier-required registration for business SMS (one brand + one campaign) | Brand $4 + Standard campaign $10/mo | ~$10 – $15 |
| Google (free Gmail) | Free Gmail account (poppinpartiesinqury@gmail.com) — Gmail OAuth for N8N + shared Google Calendar per performer | Free tier | $0 |
| OpenAI GPT Realtime (voice agent) | Hosts "Bella" — single integrated speech-to-speech model (gpt-realtime) through the FastAPI bridge. Replaces the legacy Cartesia STT + Sonic TTS + Groq LLM stack. |
Pay-as-you-go — usage billed below | $0 base |
| Cartesia / Groq (legacy) | Off. Cartesia agent archived; Groq LLM no longer in the call path. Kept for historical reference. | — | $0 |
| GitHub | Source repos for website, backend, voice bridge, N8N workflows | Free tier (private repos) | $0 |
| Fixed monthly subtotal | ~$21 – $35 / mo | ||
Usage-Based Costs (per booking funnel)
| Service | Unit price | Per booking | 30 / 100 / 250 bookings |
|---|---|---|---|
| Vonage SMS (outbound) | ~$0.0083 / segment + ~$0.005 carrier fee = ~$0.013 / msg | ~6–8 messages (quote, deposit link, reminders, balance link, artist intro, review request) ≈ $0.10 | $3 / $10 / $25 |
| Vonage SMS (inbound) | ~$0.0075 / msg | ~3–5 customer replies ≈ $0.04 | $1 / $4 / $10 |
| Vonage Voice (inbound to AI) | ~$0.0085 / min inbound | ~3–5 min avg call ≈ $0.04 | $1 / $4 / $11 |
| OpenAI GPT Realtime Voice | Direct OpenAI token billing: gpt-realtime audio in $32/M tokens, audio out $64/M tokens. Planning estimate: ~$0.06 / min combined audio; gpt-realtime-mini plans closer to ~$0.02 / min. |
Avg phone demand: 1 five-minute AI call / 3 bookings ≈ $0.10 | $3 / $10 / $25 |
| Usage subtotal (30 / 100 / 250 bookings) | ~$8 / $28 / $71 | ||
Direct OpenAI GPT Realtime Rate Card
These are direct OpenAI API prices for the active voice stack. The per-minute estimate above depends on talk/listen ratio, silence, cached context, and tool-call text volume, so reconcile it against the OpenAI usage dashboard after the first billing cycle.
| Model | Audio input | Cached audio input | Audio output | Text input | Text output |
|---|---|---|---|---|---|
| gpt-realtime (gpt-realtime-1.5 pricing) | $32.00 / 1M tokens | $0.40 / 1M tokens | $64.00 / 1M tokens | $4.00 / 1M tokens | $16.00 / 1M tokens |
| gpt-realtime-mini | $10.00 / 1M tokens | $0.30 / 1M tokens | $20.00 / 1M tokens | $0.60 / 1M tokens | $2.40 / 1M tokens |
OpenAI Transcription Add-On
| Model | Use | Direct OpenAI price | Planning note |
|---|---|---|---|
| gpt-4o-mini-transcribe | Recommended call audit transcript | $0.003 / minute | ~$0.50 / mo at 100 bookings if 1 five-minute AI call per 3 bookings |
| gpt-4o-transcribe | Higher-accuracy transcript fallback | $0.006 / minute | About 2x the mini transcript cost |
| whisper-1 | Legacy/common baseline | $0.006 / minute | Useful for comparison, not the preferred admin default |
All-In System Cost (estimate)
This is what running the automation platform itself costs each month — independent of revenue or payment processing.
| Volume | Bookings / mo | Fixed | Usage | System total |
|---|---|---|---|---|
| Low | 30 | ~$28 | ~$8 | ~$36 / mo |
| Typical | 100 | ~$28 | ~$28 | ~$56 / mo |
| High | 250 | ~$28 | ~$71 | ~$99 / mo |
💳 Payment Processing Fees (separate — cost of doing business)
These fees apply any time a customer pays by card, whether the booking came through this automation, a manual phone quote, or a paper invoice. They are not a cost of the system itself — list them separately when comparing automation vs manual operations.
| Processor | Channel | Rate | Per $300 booking | 30 / 100 / 250 bookings |
|---|---|---|---|---|
| Square | Online (Checkout Links) | 2.9% + $0.30 | ~$9.00 | $270 / $900 / $2,250 |
| Square | In-person (Tap-to-Pay on phone) | 2.6% + $0.10 | ~$7.90 | $237 / $790 / $1,975 |
| Square | Manually keyed | 3.5% + $0.15 | ~$10.65 | $320 / $1,065 / $2,663 |
| Typical scenario: 100% Square online checkout links | $270 / $900 / $2,250 | |||
| Hybrid scenario: 50% Square online + 50% Tap-to-Pay | $254 / $845 / $2,113 | |||
Combined: System + Processing
| Volume | Bookings / mo | System | Processing (Square online) | Combined |
|---|---|---|---|---|
| Low | 30 | ~$36 | ~$270 | ~$306 / mo |
| Typical | 100 | ~$56 | ~$900 | ~$956 / mo |
| High | 250 | ~$99 | ~$2,250 | ~$2,349 / mo |
Revenue vs Cost (offset analysis)
Assumes $300 average booking value. Net revenue = gross revenue − combined system & processing cost. Margins reflect operating costs only — performer pay, marketing, and overhead are separate.
| Volume | Bookings / mo | Gross revenue | System cost | Processing | Net after costs | Cost as % of revenue |
|---|---|---|---|---|---|---|
| Low | 30 | $9,000 | ~$36 | ~$270 | ~$8,694 | 3.4% |
| Typical | 100 | $30,000 | ~$56 | ~$900 | ~$29,044 | 3.2% |
| High | 250 | $75,000 | ~$99 | ~$2,250 | ~$72,651 | 3.1% |
| Annualized at typical (100/mo) | $360,000 | ~$672 | ~$10,800 | ~$348,528 | 3.2% | |
| Annualized at high (250/mo) | $900,000 | ~$1,188 | ~$27,000 | ~$871,812 | 3.1% | |
Bottom line: combined operating costs hold at roughly 3.1–3.4% of gross revenue across all volumes. Processing fees scale linearly with revenue (built into pricing), while system costs grow slowly — so margins improve as volume grows. The system pays for itself after a single $300 booking each month.
Notes & assumptions:
- The system itself is cheap — under $100/mo even at 250 bookings. The big number is processing fees, which you'd pay regardless of how the booking was taken.
- Square online checkout links: current default at 2.9% + $0.30. Square Tap-to-Pay is 2.6% + $0.10, about ~14% cheaper per transaction for in-person collections.
- Hybrid recommendation: Square online checkout links for deposits and scheduled balances; Square Tap-to-Pay on a phone for day-of balances if the artist takes payment in person.
- Average booking value assumed at $300. Higher-AOV bookings (packages, multi-artist events) increase absolute fees but the percentage stays flat.
- SMS volume assumes the full automation flow: inquiry confirmation, quote, deposit link, deposit-paid receipt, T-3 balance reminder, balance-paid receipt, artist intro, day-after review request.
- AI phone calls assume an avg of 1 inbound call per ~3 bookings (most bookings come via the website form, not phone).
- Voice cost is now OpenAI GPT Realtime (single integrated speech-to-speech) instead of the old Cartesia STT + Sonic TTS + Groq LLM split. Single realtime API call, one OpenAI bill, and deterministic backend tools for pricing, availability, booking, transfer, and owner notifications.
- Not included: Google Ads / Meta Ads spend (separate marketing budget), domain renewal spikes, OpenAI overage if call volume surges, transactional refunds, optional Square hardware (Reader $0 with software, Terminal ~$299 one-time).
- To make this exact: after the next billing cycle, replace the unit-price estimates above with figures pulled from each provider's invoice (Vonage dashboard → Billing, Square → Reports → Fees, OpenAI usage dashboard → Realtime + transcription, Hetzner / DigitalOcean → Invoices).
🏗️ System Architecture
Data Flow
Customer Journey:
Website Form → N8N Webhook (popn-contact)
OR
Phone Call → Vonage → AI Voice Agent (OpenAI GPT Realtime)
↓
┌─────────────────────────────────────┐
│ N8N Workflow Engine │
├─────────────────────────────────────┤
│ POPN-webform (contact form) │
│ POPN-create-booking │
│ POPN-get-slots │
│ POPN-cancel-booking │
│ POPN-payment-link (Square) │
│ POPN-payment-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, 775 SEO pages (642 city+service + 127 city hubs + 6 regional hubs) |
| Admin Portal | Vanilla HTML/CSS/JS SPA |
| Config Server | Express.js on port 3002 |
| Workflows | N8N (self-hosted at n8n.optimus.systems) |
| Payments | Square hosted checkout links + Tap-to-Pay |
| SMS | Vonage Messages API |
| Voice AI | OpenAI GPT Realtime (gpt-realtime) — single speech-to-speech model in FastAPI WS bridge |
| Calendar | Google Calendar API (OAuth2) |
📈 Scalability Plan
Executive Summary
Poppin' Partiez is a vertically-integrated, automation-first kids' entertainment platform currently operating across 6 Texas metros (127 cities, 642 SEO landing pages). The thesis: a tiny operating-cost footprint (~$56/mo at typical volume) combined with high-leverage automation (booking, payments, AI phone, dispatch) creates an asymmetric scaling opportunity. Each new geographic territory or vertical adds revenue at ~3% marginal cost overhead, with the rest going to performer payout, marketing, and contribution margin. This plan outlines a 5-phase scaling roadmap from local Texas operator → multi-state platform → licensed network.
Strategic Framework — Ansoff Growth Matrix
The Ansoff Matrix is a classic 2×2 strategy tool that maps four ways a business can grow: sell more of what you have to existing customers, sell new things to existing customers, take what you have to new markets, or do something completely new. We tackle them in order of risk.
Four orthogonal growth vectors. Phases 1–5 sequence them by capital intensity and operational risk.
| Existing Services | New Services / Verticals | |
|---|---|---|
| Existing Markets (6 TX metros) |
Market Penetration Phase 1 — Saturate 127 TX cities. Bid harder on long-tail SEO + targeted Google Ads. Add hosted artist roster per region. Capture share from local solo artists. |
Product Development Phase 2 — Add Corporate Events, School Districts, Festivals, Country Clubs verticals. Higher AOV ($800–$2,500) and recurring contracts. Same crew, new packaging. |
| New Markets (adjacent states / national) |
Market Development Phase 3 — Replicate the TX template into OK, LA, AR, NM, then top 50 US metros. Each new region = clone the SEO factory + recruit 8–12 contractors. |
Diversification Phase 4–5 — License the platform to other entertainment operators (white-label SaaS). Royalty + per-booking fee. Asset-light, software-margin business inside the entertainment shell. |
5-Phase Scaling Roadmap
Op Margin (operating margin) = the % of revenue left after running the business but before taxes & interest. ROAS = return on ad spend (revenue per $1 of ads). AOV = average order value per booking.
| Phase | Timeline | Focus | Bookings / mo | Avg AOV | Annual Revenue | Op Margin* |
|---|---|---|---|---|---|---|
| Phase 1 Optimize |
Months 0–6 | Saturate existing 6 TX metros; tighten ads ROAS to 5:1; grow performer roster to 25 | 100 → 150 | $300 | $540K | ~28% |
| Phase 2 Verticalize |
Months 6–18 | Launch Corporate, Schools, Festivals lines; AOV lifts via packages | 250 + 20 corp | $420 blended | $1.36M | ~32% |
| Phase 3 Regionalize |
Year 2–3 | Expand to OK, LA, AR, NM (12 new metros). Clone SEO factory per state. | 600 + 60 corp | $420 blended | $3.32M | ~34% |
| Phase 4 Nationalize |
Year 3–5 | Owned-and-operated in top 25 US metros; centralized dispatch + AI phone | 1,800 + 200 corp | $450 blended | $10.8M | ~36% |
| Phase 5 Platform |
Year 5+ | License white-label platform to 50+ independent entertainment cos. Revenue = SaaS fee + booking %. | 4,000 + 50 licensees | $450 blended | $26M+ | ~42% |
*Operating margin after performer payout (~50% of revenue), processing fees (3%), system cost (~0.3%), and marketing spend (CAC scales from ~12% Phase 1 → ~7% Phase 4 due to brand + SEO compound effect).
Revenue Trajectory
Annual revenue progression across phases (log-friendly visual; bar widths proportional to revenue).
TAM / SAM / SOM Analysis
TAM (Total Addressable Market) = the entire pie if every dollar of demand were ours. SAM (Serviceable Addressable Market) = the slice we could realistically reach with our service mix and geography. SOM (Serviceable Obtainable Market) = the realistic slice of that we expect to capture given competition and capacity.
Sizing the U.S. children's-entertainment + corporate event entertainment opportunity. IBISWorld-style breakdown.
| Layer | Definition | Size | Our Share Target |
|---|---|---|---|
| TAM (Total) | U.S. event entertainment services (kids' parties, corporate events, school assemblies, festivals) | $36 B | — |
| SAM (Serviceable) | Face painting / balloons / caricature / glitter / bubble services in top 50 US metros — fragmented, served by solo artists | $2.8 B | — |
| SOM Phase 3 | 5-state TX-cluster footprint; Phase 3 target | ~$220 M | 1.5% ($3.3M) |
| SOM Phase 4 | Top 25 US metros owned-and-operated | ~$650 M | 1.7% ($10.8M) |
| SOM Phase 5 | Owned ops + licensed network covering top 100 US metros | ~$1.4 B | 1.9% ($26M+) |
Vertical Expansion (Product Development)
A “vertical” is a customer category with its own buying patterns (e.g., kids' parties vs. corporate events vs. schools). AOV = average order value. B2C = direct-to-consumer; B2B = business-to-business. LTV = lifetime value of a customer (recurring revenue over time). MRR = monthly recurring revenue (the SaaS-style retainer line).
Same artist crew, different packaging. Each vertical lifts blended AOV and adds recurring revenue.
| Vertical | AOV Range | Cadence | Margin Profile | Phase |
|---|---|---|---|---|
| Kids' birthday parties (current) | $200 – $600 | One-off (peak Sat/Sun) | Standard 30% | 1 |
| Corporate / company events | $800 – $2,500 | Quarterly + holiday season | Premium 38% (lower CAC, B2B referrals) | 2 |
| School district contracts | $1,500 – $5,000 | Recurring (PTA fairs, field days, end-of-year) | Premium 40% (low marketing, high LTV) | 2 |
| Festival / multi-day events | $3,000 – $15,000 | Seasonal anchor (4–6/year) | Premium 35% (high gross, higher logistics) | 2 |
| Country clubs / annual contracts | $6,000 – $20,000 | Annual retainer + per-event | Premium 42% | 3 |
| Theme parks / venue revenue-share | Variable | Daily ops | Standard 30% (rev-share contract) | 3 |
| Wedding receptions / Bar Mitzvahs | $600 – $2,000 | Seasonal peak (May–Oct) | Premium 36% | 2 |
| White-label platform license | $8K–$15K MRR per licensee | SaaS recurring | Software 70%+ | 5 |
Geographic Expansion (Market Development)
An SEO factory is our system for auto-generating hundreds of city-specific landing pages so every Google search like “face painter in [city]” finds us. A tenant is an isolated copy of the booking system for a region.
Each tier replicates the proven TX playbook: SEO factory (≈100 city pages) + 8–12 contractor artists + N8N tenant + ad account. Time-to-launch per market: 30–60 days.
| Tier | Geography | Cities | Target Bookings / mo | Phase |
|---|---|---|---|---|
| Tier 0 | Existing: DFW, Houston, Austin, San Antonio, Waco, Stephenville | 127 | 250 (target) | 1 |
| Tier 1 | TX expansion: El Paso, Lubbock, Amarillo, Corpus, McAllen, Tyler, Longview | +50 | +150 | 2 |
| Tier 2 | Adjacent states: OKC, Tulsa, Shreveport, Little Rock, Albuquerque, Las Cruces | +80 | +250 | 3 |
| Tier 3 | National core: Phoenix, Denver, KC, Nashville, Atlanta, Charlotte, Tampa, Orlando | +200 | +700 | 4 |
| Tier 4 | Licensed network: 50 territories @ ~80 bookings/mo each (operator-managed) | +1,000 | +4,000 | 5 |
Unit Economics — Per-Booking Contribution
Unit economics = the profit math on a single transaction (one booking). CAC (Customer Acquisition Cost) = average ad & marketing spend to win one booking. Contribution margin = what's left after the variable costs of that booking; it's what funds fixed overhead and profit. Operating leverage = the fact that fixed costs spread over more bookings, so each new booking is more profitable than the last.
Standard $300 booking, kids' party (B2C). Margin improves with B2B / packages. Numbers in $.
| Line item | Phase 1 | Phase 2 | Phase 3 | Phase 4 |
|---|---|---|---|---|
| Gross revenue | $300 | $420 | $420 | $450 |
| − Performer payout (50%) | −$150 | −$210 | −$210 | −$225 |
| − Processing (~3%) | −$9 | −$13 | −$13 | −$14 |
| − System cost / booking | −$0.56 | −$0.40 | −$0.30 | −$0.20 |
| − CAC (blended) | −$36 | −$38 | −$32 | −$30 |
| − Ops overhead (mgmt, insurance, supplies) | −$21 | −$25 | −$22 | −$20 |
| Contribution margin / booking | $83 | $134 | $143 | $161 |
| Margin % | 27.7% | 31.9% | 34.0% | 35.7% |
Operating leverage: system cost per booking falls from $0.56 → $0.20 (−64%) as fixed infra is amortized over more volume. CAC drops as organic SEO compounds and brand recall lifts repeat-customer share (~25% by Phase 3). Performer payout stays fixed at 50% — the contribution-margin lift comes from everything else getting cheaper per booking.
Margin Curve at Scale
EBITDA = Earnings Before Interest, Taxes, Depreciation & Amortization — a standard way to compare operating profitability across companies of different sizes. Higher EBITDA % means more of every revenue dollar drops to the bottom line.
EBITDA margin progression as fixed costs spread and software/license revenue mixes in.
Revenue Mix Evolution
% of total revenue by line. Diversification reduces single-channel risk.
| Revenue line | Phase 1 | Phase 2 | Phase 3 | Phase 4 | Phase 5 |
|---|---|---|---|---|---|
| Kids' parties (B2C) | 100% | 72% | 62% | 54% | 40% |
| Corporate events | — | 15% | 16% | 18% | 14% |
| Schools / Districts | — | 8% | 10% | 10% | 8% |
| Festivals / Venues | — | 5% | 8% | 8% | 6% |
| Country clubs / Retainers | — | — | 4% | 6% | 4% |
| Licensed platform (SaaS) | — | — | — | 4% | 28% |
Capital Requirements by Phase
FTE = Full-Time Equivalent (one full-time employee, or a combination of part-timers totaling one). Payback = how long until the investment earns itself back in profit.
| Phase | Investment | Primary Use | Payback |
|---|---|---|---|
| Phase 1 | $15K – $30K | Ad spend acceleration, performer recruiting bonuses, supplies inventory | ~4 months |
| Phase 2 | $60K – $120K | B2B sales rep (1 FTE), corporate sales collateral, district outreach, festival gear | ~7 months |
| Phase 3 | $300K – $600K | Per-state launch (4 states × ~$120K), regional managers, dispatch coordinator (1 FTE) | ~10 months |
| Phase 4 | $1.5M – $3M | National brand campaign, 25 metro launches, full ops team (~8 FTE), centralized warehouse | ~14 months |
| Phase 5 | $2M – $4M | Platform productization (multi-tenant SaaS), licensee onboarding, sales team, legal/franchise compliance | ~18 months |
Key Risks & Mitigations
SOP = Standard Operating Procedure (a written, repeatable how-to guide). GL policy = General Liability insurance. 1099 contractor = independent contractor (vs. W-2 employee) — they're paid per gig and handle their own taxes.
| Risk | Severity | Mitigation |
|---|---|---|
| Performer supply shortage as we scale | High | Build a recruiting funnel (Indeed + art schools); standardize 1-day training; tiered payout to incentivize loyalty |
| Google Ads CAC inflation | Medium | SEO compounds across 642+ landing pages — own organic top-3 in target keywords; nurture repeat customers (target 25% repeat by Phase 3) |
| Quality drift across regions | High | Centralized SOPs in this admin platform; dispatch scoring; post-event review automation; mystery-shop audits |
| Saturation in core verticals | Medium | Vertical expansion (corporate, schools, festivals) is the primary hedge; each vertical has independent demand curve |
| Platform technology dependency (N8N, OpenAI, Vonage, Square) | Medium | Provider boundaries are isolated behind backend workflows and config. Voice and payment vendors can be swapped without changing the public website. |
| Regulatory / insurance (Phase 4–5) | Medium | Master GL policy ($2M aggregate) + per-territory riders; W-9 contractor model with clean 1099 audit trail; franchise legal counsel before Phase 5 |
5-Year Financial Snapshot
EBITDA = operating profit before interest, taxes, depreciation, and amortization. Cumulative Invested = total capital deployed up to that point (compare to EBITDA to see when investment pays back).
Conservative case. Assumes successful Phase transitions on schedule.
| Year | Phase | Revenue | Op Margin | EBITDA | Cumulative Invested |
|---|---|---|---|---|---|
| Y1 | 1 → 2 | $540K → $1.0M | 28–30% | ~$240K | $45K |
| Y2 | 2 → 3 | $1.36M → $2.2M | 32–33% | ~$590K | $165K |
| Y3 | 3 | $3.32M | 34% | ~$1.13M | $465K |
| Y4 | 3 → 4 | $6.5M | 35% | ~$2.28M | $1.4M |
| Y5 | 4 | $10.8M | 36% | ~$3.9M | $3.0M |
Phase 5 (licensed platform) is upside not modeled in the 5-year plan; expected to push Y6+ revenue to $26M+ at 42%+ margin if executed.
❄️ Seasonality & the Winter Trough
A seasonal trough is the predictable low point in a business's revenue cycle. Counter-cyclical revenue = a different income stream that peaks when the main one dips, smoothing total cash flow across the year.
The kids' party business has a sharp ~9-week trough that runs from the week after Christmas through the end of February. School holidays end, weather pushes events indoors, family discretionary spend drops post-holidays, and outdoor venues close. Without intervention, monthly bookings can fall 40–55% below summer peak during these three months only — March recovers fast and April onward is peak through October, with a strong spring surge in May. Q1 alone threatens artist retention and creates cash-flow strain on fixed costs.
The wrong answer is layoffs. Releasing trained artists in February means recruiting and re-training in March/April — costing 3–4 weeks of ramp time exactly when demand is exploding into the spring peak. Industry data on seasonal labor churn shows replacement cost of 1.5–2× annual contractor pay per lost artist (recruiting, vetting, training, lost goodwill, slower response times during ramp).
The right answer is counter-cyclical revenue. Build complementary lines that peak in Dec–Feb so artists stay engaged, paid, and ready for the spring surge. Below: a portfolio of options ranked by alignment with our existing assets (skills, brand, customer list, regions, automation platform).
Annual Demand Curve — Before vs After
Indexed bookings per month (100 = annual average). Grounded in three public data sources triangulated against our own 2025 booking history:
- Google Trends for the U.S. search terms “face painter near me”, “balloon twister”, and “kids party entertainment” (rolling 5-year average). Search volume bottoms in Jan–Feb at ~45–60% of the May–Oct peak and recovers sharply in March.
- U.S. CDC Vital Statistics birth-month distribution: ~9% of births fall in August–October vs ~7.3% in February. Since birthday parties cluster around the actual birth month, this drives a structural Q4 + spring peak and Jan–Feb dip in kids’ party demand.
- Party City & Oriental Trading public earnings commentary consistently calls Q1 (Jan–Mar) their seasonal trough, with Q4 the peak — a pattern that mirrors at the venue/entertainer level.
Late December (post-Christmas), January, and February are the structural trough. March recovers, April → October is peak, and November/early-December gets a holiday-party bump.
Net effect: annual variance drops from a 3-to-1 peak-to-trough ratio to ~1.6-to-1. Cash flow becomes predictable; performer retention rises from ~60% to ~85% YoY.
Counter-Cyclical Revenue Portfolio
Each option ranked by asset reuse (1 = uses our existing artists/brand/regions/platform; 5 = mostly new build). Lower scores launch fastest with the least new investment.
| Initiative | Peak Window | Asset Reuse | Est. Revenue Lift (per metro / month) |
Why It Works |
|---|---|---|---|---|
| 1. Holiday Pop-Up Events (Mall Santa supplemental, Christmas market face painting, NYE family party gigs, Mardi Gras, Valentine's school events) | Dec 1 – Feb 14 | 1 — same artists, same skills | $8K – $18K | Malls, markets, hotels actively pay $400–$800/day for face painters & balloon artists during holidays. Direct extension; just need a B2B sales motion targeting venues. |
| 2. Indoor Birthday Venue Partnerships (trampoline parks, bowling alleys, indoor playgrounds, Chuck E. Cheese-style) | Dec – Feb (peak indoor) | 1 — same artists, no weather risk | $5K – $12K | Indoor venues' add-on entertainment is usually thin. Become the preferred entertainment add-on (rev-share or per-event). Counter-intuitively the indoor birthday volume rises in winter as outdoor parks close. |
| 3. Corporate Holiday Parties (office holiday events, family days, year-end employee appreciation) | Dec 1 – Jan 31 | 1 — overlaps Phase 2 vertical | $10K – $25K | Corporate budgets close in December; "kids welcome" company holiday parties are a growing trend. AOV $800–$2,500. Booked 4–8 weeks in advance. |
| 4. Daycare & Preschool Curriculum Visits (weekly art / balloon-craft / sensory-bubble enrichment) | Year-round; peaks Jan–Feb when schools restart | 2 — same artists, recurring contracts | $6K – $15K | Daycares pay $150–$300/visit for enrichment. 1 artist × 4 daycares × 2 visits/week × $200 = $1.6K/wk per artist. Recurring revenue, predictable cash flow. |
| 5. Senior Living & Assisted Care Entertainment (holiday socials, monthly themed events) | Year-round; spikes Dec–Feb | 2 — caricatures & balloons translate well | $3K – $8K | Activity directors at senior communities have monthly entertainment budgets; winter is their highest-need period (residents indoors). Caricatures & balloon flowers are universally loved across ages. |
| 6. Winter Workshop Series (face-paint & balloon-twist classes for 8–14yo on weekends, in-home or at a leased studio) | Jan – Mar | 3 — same artists, new format | $4K – $9K | Parents pay $35–$60/seat for 90-min workshops. Small space rental (~$500/mo) offsets via 4 classes × 12 kids × $45 = $2,160/weekend. Builds future customers (workshop kid → birthday booking). |
| 7. School Spirit Week / Pep Rally / Field Day (in-school theme days, mascot-aligned face painting, glitter tattoos) | Jan – Mar | 3 — same artists, B2B sales effort | $5K – $14K | Schools have ~$3K–$10K event budgets. Spring spirit days & fundraisers cluster in the Jan–Mar window. Booking 1 school = 6–10 events for the year. |
| 8. Branded Merchandise / Subscription Box ("Poppin' Partiez Kit" — face paint set, balloon set, themed crafts mailed monthly) | Q4 gifting + Year-round | 3 — leverages brand & customer list | $2K – $10K | Existing customer list is a warm market. $35/mo subscription × 200 subs = $7K/mo recurring at high gross margin. Cross-sells back into birthday bookings. |
| 9. Indoor Bubble Show / Magic Mini-Show Production (40-min staged shows at libraries, community centers, malls) | Dec – Feb (school break programming) | 3 — needs 1–2 trained performers | $3K – $7K | Libraries & rec centers pay $300–$800 per show during school breaks. Bubble Party is already a service line — productize into a ticketed/paid show format. |
| 10. Wedding Reception Kids' Corner (face paint + balloons + glitter as add-on at Sat winter weddings) | Year-round; winter wedding niche grows | 2 — same artists, B2B partnership | $3K – $7K | Partner with wedding planners for "kids' table entertainment" packages. AOV $400–$800 per wedding. Saturday slots that would otherwise sit idle. |
| 11. Branded Photo Booth & Event Activation Rentals (themed backdrop + balloon arch + face-paint activation, run by 1 artist) | Year-round; holiday parties + winter weddings | 3 — equipment investment ~$2K | $4K – $11K | Photo booth + entertainer combo charges $600–$1,200/event vs $400 for a solo artist. Same labor, 50% higher AOV. Equipment paid back in ~5 events. |
| 12. Halloween / Day of the Dead / Easter Specialty Events (off-peak holiday clustering) | Late Oct + early Apr | 1 — bridges shoulders | $6K – $14K | Already partially captured. Aggressive bookings push for Halloween parties (face paint = perfect fit) and spring egg hunts smooths the Sep–Apr curve. |
| 13. Adjacent Business: Mobile Tax-Season Pop-Ups (Skip) (low alignment — mentioned for completeness) | Jan – Apr | 5 — wrong audience, wrong skills | — | Listed only to document we evaluated it. Doesn't fit kids' entertainment brand. Don't pursue. |
Recommended Winter Strategy (Year 1 — quick wins)
Pick the top 4 highest-asset-reuse plays. Together they target a ~$30K–$60K monthly revenue floor for Dec–Feb at Phase 1 volume — enough to retain the entire artist roster.
| Play | Setup Effort | Time to First $ | Dec–Feb Target |
|---|---|---|---|
| Holiday pop-up events (mall Santa, holiday markets, NYE) | 2 weeks B2B outreach | ~30 days | $15K – $30K |
| Corporate holiday parties (existing Phase 2 vertical, accelerated) | 4 weeks (sales rep) | ~45 days | $10K – $20K |
| Indoor venue partnerships (trampoline parks, bowling alleys) | 3 weeks (5–10 partner contracts) | ~30 days | $5K – $12K |
| Daycare / preschool weekly enrichment | 4 weeks (district outreach + curriculum doc) | ~60 days | $6K – $15K |
| Combined Dec–Feb run-rate (Phase 1 metro): | $36K – $77K / mo | ||
Compare to a "naked" winter month at Phase 1: ~$13K–$20K (45–55 bookings × $300). The portfolio approach roughly triples winter cash flow while keeping artists employed.
Layoffs vs Counter-Cyclical: The Math
Per-metro comparison at Phase 1 volume. Assumes 12 contractor artists.
| Strategy | Dec–Feb cost | Mar ramp-up cost | Mar–Apr capacity | Q1 + Q2 revenue impact |
|---|---|---|---|---|
| Layoff & Re-hire | $0 (no payroll) | ~$18K (recruiting + 3-week ramp + lost bookings) | 60–70% of normal | −$45K to −$75K (lost spring bookings, slow response, quality drift) |
| Counter-Cyclical Mix | ~$8K marketing + ~$2K coordination | $0 (full crew ready) | 100% from day 1 | +$95K to +$165K (winter revenue + uninterrupted spring + retention bonus) |
Net swing per metro per year: ~$140K–$240K in our favor. Plus the unquantifiable wins: artist loyalty, brand reputation as a "real job, not a gig," and recruiting leverage when scaling new metros (existing artists become trainers/refers).
The Compounding Advantage
What makes this scalable isn't any single tactic — it's the compounding effect of three layered moats:
- SEO factory: 642+ landing pages today; +400/state means 2,500+ pages by Phase 3. Organic traffic is a non-linear marketing flywheel — it's near-zero marginal cost and compounds month-over-month.
- Automation cost-per-booking: $0.56 today, falling to $0.20 by Phase 4. That ~$0.36 per-booking gap is pure margin recapture as we scale, while competitors using manual booking pay $5–$15 per booking in admin labor.
- Multi-vertical demand stack: kids' parties drive weekend supply utilization; corporate, schools, festivals fill weekday capacity. Performer utilization rises from ~35% (B2C-only) to ~70% by Phase 3 — same headcount, double the revenue.
Most local entertainment businesses plateau at $250K–$500K because every new booking requires a phone call, a calendar lookup, a manual quote, a paper invoice, and chasing payment. We've eliminated all five with automation that costs <$100/mo. Every dollar above the Phase 1 plateau is contribution-margin dollars our competitors structurally can't earn.
💰 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: Square hosted 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 Square link via SMS |
| 4 | Booked | Square payment event: deposit paid | Confirm booking, create calendar event, assign performer |
| 5 | Reminder | 3 days before event | Send final balance Square 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 Square Payment Links
Stage 1: Deposit
Customer confirms → N8N creates Square payment link (30%)
→ Vonage sends SMS with link
→ Customer pays
→ Square payment event confirms deposit
→ N8N triggers "Booked" confirmation + calendar event
Stage 2: Final Balance (3 days before event)
Scheduled N8N trigger
→ Creates Square payment link for remaining 70%
→ Vonage sends SMS with link + artist info
→ Customer pays
→ Square payment event confirms → event fully paid
💬 SMS Communication Workflows
🔗 N8N Webhooks
💳 Square Payments
Setup
- Create or connect the Square seller account for each region owner
- Add the Square access token and location ID in Integrations → Payment Accounts
- Assign each sales region to the correct Square account in Notifications → Sales Region
- Use Square hosted checkout links for deposits and scheduled balances; use Tap-to-Pay when collecting in person
Payment Link Flow
N8N creates Square hosted checkout links with amount, description, region account, and booking metadata. Square collects card data on its hosted page, keeping the admin portal and workflows out of PCI-sensitive card handling.
📱 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 & Phone Routing
Overview
Bella is the GPT Realtime voice agent that handles inbound calls on +1 (972) 777-6725. She answers availability questions, quotes prices, creates/cancels bookings, and can transfer callers to team members via supervised routing.
Capabilities
- Inbound: Answer availability questions, quote prices, take booking details, check calendar
- Booking: Create and cancel bookings via N8N workflows
- Pricing: Real-time quotes for all services and durations (1-8hr events)
- Transfer: Supervised routing — rings performers by priority group and requires press-1 acceptance
📞 Phone Routing Modes
Control how inbound calls are handled from the Phone Routing tab:
| Mode | Behavior |
|---|---|
| ⏸️ Off | Bella handles calls normally but cannot transfer. No supervised routing available. |
| 🤖 Normal | Full AI conversation. Bella transfers only when the customer asks or she decides to escalate. |
| 📵 Bypass AI | Skip Bella entirely. All callers go straight to supervised routing. |
| 🐛 Debug | Only calls from performer phone numbers talk to Bella. Everyone else skips Bella and rings the configured On Call performer. |
🔔 Supervised Routing
When a call is transferred without a named artist, the system screens team members before connecting the caller:
- On Call performer rings first (if set) — covers ALL regions
- Regional priority performers ring in order (lower number = rings first)
- Performers outside working hours are skipped (if "Respect working hours" is enabled)
- On Call and each regional priority group ring for the configured Ring Seconds; same-priority performers ring together and first press-1 accept wins
- If nobody accepts, Bella resumes the conversation and offers to take a message
How to Configure
- Go to Phone Routing tab
- Select a routing mode
- Optionally set an On Call performer (rings first for all regions)
- In the AI Regional Routing Priorities table, set priority numbers per region (1 = rings first, blank = skip)
- Use arrow keys or type a number. Set to 0 or delete to clear a priority.
- Click Save Changes
🔧 Technical Details
- Platform: OpenAI GPT Realtime bridge in FastAPI
- Voice: Marin (GPT Realtime speech-to-speech)
- Bridge:
/api/popn/voice/gpt-bridge/{slug} - Phone: +1 (972) 777-6725 (Vonage Voice API)
- Transfer: Direct named transfer or supervised press-1 routing via Vonage Voice API
- Deploy: Rebuild the FastAPI backend container
🌐 Landing Pages
Overview
775 auto-generated SEO pages across 6 regions. Generated by node generate-seo-pages.js. Do not hand-edit — they are overwritten by the generator.
- 642 city + service pages (e.g.,
/face-painting-dallas-tx) - 127 per-city all-services hubs (e.g.,
/party-entertainment-dallas-tx) — sitemap priority 0.85 - 6 regional hero pages (e.g.,
/dfw-tx) — sitemap priority 0.9
🔥 Regional Hero Pages
High-priority landing pages, one per metro region. Each includes a services grid + full city directory.
| Region | URL | Cities |
|---|---|---|
| 🤠 Dallas-Fort Worth | /dfw-tx | 27 |
| 🚀 Houston Metro | /houston-tx | 20 |
| 🎸 Austin Metro | /austin-tx | 20 |
| 🌵 San Antonio Metro | /san-antonio-tx | 20 |
| ⭐ Waco / Temple / Killeen | /waco-tx | 20 |
| 🐎 Stephenville / De Leon | /stephenville-tx | 20 |
Core Service Pages
| Page | URL |
|---|---|
| 🏠 Homepage | PoppinPartiez.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 Square confirms a payment event, the POPN - Square Event Handler N8N workflow updates the event color and description
- Payment status is only visible to owners in the calendar description (artists see event details only)
- Manual/replayed payment updates should use the same Square event path documented in 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 |
| 🗣️ OpenAI GPT Realtime | Active Bella voice stack — single speech-to-speech model through FastAPI bridge | Realtime docs |
| ⚡ xAI Grok Realtime | Alternate realtime bridge only when selected in Voice Agent settings | console.x.ai |
| 🗄️ Cartesia (legacy) | Archived former Bella STT/TTS stack. Not deployed and not in the current call path. | Legacy docs |
| 💳 Square | Hosted checkout links + Tap-to-Pay — deposit + final balance | Square Dashboard · 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 | PoppinPartiez.com |
| 🛡️ Admin Portal | This portal | admin.poppinpartiez.com |
| ⚙️ Backend API | FastAPI backend via admin domain | admin.poppinpartiez.com/api |
| 🐳 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, Square payment accounts, N8N webhook URLs |
| 👤 Admin Users | Manage authorized Google accounts + Google OAuth client ID |
| � Dispatch | Scoring weights for performer auto-assignment algorithm |
| 📞 Phone Routing | Routing mode (Off/Normal/Bypass/Debug), on-call, ring priorities, and Bella message-taking recovery |
| 🔔 Notifications | Per-region notification recipients and notification type toggles |
| 💬 Messages | Two-way SMS inbox — view and reply to all customer texts, manage opt-outs |
| �📚 Docs | This documentation section |
💬 Messages & SMS Compliance
Overview
The Messages tab is a two-way SMS inbox showing every text sent to or from +1 (972) 777-6725 — including booking confirmations, payment links, Bella's auto-replies, and customer responses. Admins can manually reply to any active conversation in real time.
📥 What Gets Logged
- Inbound — every SMS from a customer (received via Vonage webhook)
- Outbound — booking confirmations, payment link SMS, reminders (logged by N8N workflows)
- Bella replies — texts sent by the AI voice agent (tagged with 🤖 Bella)
- Admin replies — manual sends from this portal (tagged with admin email)
- Auto-replies — STOP/START/HELP keyword confirmations sent automatically
🚫 SMS Opt-Out Compliance (CTIA / 10DLC)
US carriers require all SMS senders — even transactional — to honor opt-out keywords. Failing to do so risks number suspension and 10DLC campaign revocation.
| Keyword (any of) | Action |
|---|---|
STOP, UNSUBSCRIBE, CANCEL, END, QUIT, STOPALL, OPTOUT | Customer is opted out — auto-confirmation sent — all future sends blocked server-side |
START, UNSTOP, YES, RESUBSCRIBE, OPTIN | Customer is re-subscribed — confirmation sent |
HELP, INFO | Auto-reply with business name, phone, and STOP info |
Disclosure Footer
The first SMS in any new conversation should include: "Reply STOP to opt out, HELP for help. Msg & data rates may apply." This is a CTIA best practice for all commercial SMS.
Using the Messages Tab
- Conversations are listed in the left panel, sorted by most recent activity
- Filters: All · Unread · Active · Opted Out
- Search by customer name, phone, message text, or booking reference
- Click a conversation to view the full thread
- Type a reply at the bottom (Cmd/Ctrl+Enter to send)
- Opted-out conversations are greyed out and the reply box is disabled — server enforces this regardless of UI state
- Manual opt-out: click "🚫 Opt Out" in the thread header (e.g. customer requested verbally)
- Re-enable: click "↻ Re-enable SMS" — only do this with documented customer consent (logged for compliance)
Email Compliance (CAN-SPAM)
Currently all email traffic is internal (notifications to admins/dispatch), so CAN-SPAM does not apply. If customer-facing email is ever added (booking confirmations to customers, marketing newsletters), the system will need:
- Unsubscribe link in every commercial email (10-day honor window)
- Valid physical postal address in footer
- Truthful "From" / subject lines
- The
contact_opt_outstable is already designed with achannelcolumn to support email opt-outs without a migration
⚙️ Config Reference
FastAPI Backend Endpoints
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/api/popn/auth-info/{slug} | GET | None | Google Client ID + allowed emails (for login) |
/api/popn/admin/config/{slug} | GET | Google OAuth | Full config for admin portal |
/api/popn/admin/config/{slug} | POST | Google OAuth | Save config → PostgreSQL |
/api/popn/config/{slug} | GET | X-Internal-Key | Full config for N8N workflows |
/api/popn/routing/{slug}/config | GET | X-Internal-Key | Phone routing mode + performer phones |
/api/popn/transfer/{slug}/initiate | POST | X-Internal-Key | Initiate direct or supervised Vonage transfer |
/api/popn/transfer/{slug}/answer | GET | HMAC-signed URL | NCCO answer URL for direct named transfer fallback |
/api/popn/transfer/{slug}/screen | GET | HMAC-signed URL | Staff press-1 accept prompt for supervised routing |
/api/popn/transfer/{slug}/join | GET | HMAC-signed URL | Moves accepted staff and caller into the same conversation |
/api/popn/notifications/{slug} | GET/PUT | X-Internal-Key | Notification recipient CRUD |
/api/popn/sms/inbound/{slug} | POST | None (Vonage) | Vonage inbound SMS webhook + STOP/HELP handler |
/api/popn/sms/log/{slug} | POST | X-Internal-Key | N8N logs sent SMS to conversation history |
/api/popn/sms/optout-check/{slug}?phone=... | GET | X-Internal-Key | N8N pre-send opt-out check |
/api/popn/admin/sms/conversations/{slug} | GET | Google OAuth | List conversations (admin Messages tab) |
/api/popn/admin/sms/conversations/{slug}/{id}/send | POST | Google OAuth | Admin manual reply (opt-out enforced server-side) |
/api/popn/admin/sms/optouts/{slug} | GET/POST | Google OAuth | List/add opt-outs |
/api/popn/admin/sms/optouts/{slug}/{phone} | DELETE | Google OAuth | Re-enable SMS (with consent) |