Built for small and medium-sized businesses

An automated system for managing day-to-day business operations With built-in multi-behavioral AI call handling and intent detector built in.

WE BUILT THIS SYSTEM FOR YOU HERE IN 3 GUIDED STEPS

1

Tell us about your business

Company details, country, industry, workflow needs, and setup basics.

2

Review and verify

See the configured system, review how it works, and verify business details.

3

Test and activate

Run the live test, preview the dashboard, and activate only when ready.

Advanced Base System Intelligence

Not one generic agent. More like 10 agents in one system.

This is a major part of the base system, not an add-on. It is also one of the most advanced and unique capabilities in the product. AI Call Port can automatically detect what the caller needs and shift behavior in real time. That means the same base system can respond like a sales agent, booking agent, reservation agent, information desk, inventory checker, emergency handler, after-hours responder, and more, without sounding like one rigid script.

  • Sales agent behavior
  • Lead qualification behavior
  • Booking agent behavior
  • Reservation-taking behavior
  • Information desk behavior
  • Inventory and availability checking behavior
  • Support response behavior
  • Emergency response and escalation behavior
  • After-hours response behavior
  • Language detection and multilingual behavior
Who this is for

Built for businesses that rely on calls, bookings, and follow-up

AI Call Port fits businesses that lose revenue when calls are missed, appointments are not confirmed, and leads sit untouched after first contact.

Home Services

Plumbing, HVAC, electrical, garage, and field repair

Handle inbound calls, book urgent jobs, confirm appointments, and keep old leads moving without adding manual phone coverage.

Beauty & Wellness

Med spas, salons, clinics, and appointment-heavy teams

Keep scheduling, reminders, cancellations, and follow-up campaigns connected so the front desk is not overloaded.

Local Services

Cleaning, moving, restoration, landscaping, and similar operators

Route incoming demand, track client history, and keep confirmations and next steps visible for the owner and team.

Sales-Led SMBs

Businesses that need lead recovery and structured follow-up

Upload old client lists, trigger outbound campaigns, and convert missed opportunities into active pipeline work.

Real Owner Dashboard

Show the actual dashboard, not a lighter preview version

This is the real owner dashboard structure the business uses for live operations. It shows calls, CRM, reports, billing, requests, and activated upgrades in one connected workspace.

Live Embedded Demo

The same owner dashboard shell can be used for real operations. What users see here is the real product structure, not a separate landing-page concept.

Trust & Fit

Designed to feel low-risk and easy to evaluate

Visible pricing Users can see package logic and upgrade pricing before activation.
Live test first The system is reviewed and tested before a business commits to keeping upgrades.
Keep only what fits After month one, businesses keep only the upgrades they actually want to use.
Built for real operators Best fit for teams that depend on calls, bookings, confirmations, and lead follow-up.
Why it is different

More than answering calls

AI Call Port is a business operations system with built-in AI call handling, not a standalone answering tool. It keeps conversations, records, scheduling, confirmations, and owner visibility connected now, and expands into deeper management control through upgrades like Advanced Management.

Built-in CRM and history

Customer records, transcripts, recordings, notes, and next steps stay connected inside the same system.

Scheduling and confirmations

Sales and service visits, staff coordination, confirmations, and reminders all work inside one business flow.

One connected dashboard

Owners can see what needs attention, what has been confirmed, what is pending, and what should happen next.

Core system capabilities

What the system does right now

The base system is built to handle inbound conversations, keep records connected, schedule real business activity, and move existing data into action before deeper management layers are added.

Inbound call handling

  • Incoming calls handled automatically
  • Base system includes intent-adaptive AI behavior instead of one fixed receptionist script
  • Intent-based behavior across sales, bookings, reservations, support, emergencies, and after-hours flow
  • Urgency, after-hours, and operational routing logic
  • Language detection and multilingual response logic when needed

CRM and communication history

  • Built-in client database and CRM behavior
  • Call summaries, transcripts, recordings, and notes
  • One communication history tied to the customer record

Scheduling and confirmations

  • Sales and service appointment scheduling
  • Client reminders and confirmations from email or SMS
  • Booking status, staff follow-through, and completion tracking

Outbound campaigns from existing data

  • Upload your own client and lead lists in spreadsheet format
  • Recover old data and turn it into new revenue activity
  • Use call, text, or text-then-call workflows from one system

Advanced management

  • Add a deeper management layer on top of Scheduling when the business is ready
  • Includes task control, staff coordination, sales pipeline visibility, and approvals management
  • Gives the owner a simple, user-friendly management dashboard with clear next steps and operational control
  • Supports staff access so team members can work inside the system with the right level of visibility
  • Keeps management logic connected to real booked activity instead of turning it into a separate tool
Pricing

Visible before activation

Pricing is visible before the live test and activation path, and the launch offer is visible too, so the business can understand the real system and the real upgrade logic without guessing.

Both base packages include the same AI Call Port operating system with AI call handling, built-in CRM, dashboard operations, reporting, and workflow control. The difference is the voice tier, included voice minutes, and overage rate.

Luxury System

Same full AI Call Port system with luxury voice

$499
per month
  • Same advanced AI Call Port system, dashboard, CRM, reporting, alerts, and workflow control
  • Intent-adaptive AI behavior across sales, bookings, reservations, support, emergencies, and after-hours calls
  • Premium luxury voice for a more elevated caller experience
  • Built-in caller language detection
  • 1000 included luxury voice minutes
  • $0.45/min after included usage

After choosing Standard or Luxury, your business can add only the upgrades it actually needs, or use the Beta Partner Offer to try the full system first.

Core operating upgrades

Add deeper scheduling, management, and follow-up only where the business actually needs it.

Additional upgrades

Optional support layers for multilingual handling and external CRM syncing.

Beta Partner Offer

  • Pay only the base system price for your first month
  • Use Scheduling, Advanced Management, Outbound Follow-Up, Additional Languages, and External CRM Integration during month one
  • Test the real workflow first, then keep only what fits
  • Completed feedback unlocks 50% off for selected upgrades after month one
  • This launch offer is limited to the first month after release
Activation confidence

Activation happens only after review and live testing

Pricing is visible first, the system is reviewed first, and the business tests it live before anything is turned on or any upgrade decision becomes permanent.

What happens before activation

  • The business goes through a guided intake and review process
  • Contact details are verified and required approval steps are completed
  • The system is tested live before the final activation decision
  • After month one, only the upgrades the business wants stay active

Why this activation path feels different

  • No hidden pricing before setup
  • No activation before the business sees how the system works
  • No commitment before the live test confirms the experience
  • No forced upgrades after the trial month ends
Expandable modules

Designed to grow as the business grows

New modules are planned to stay logically connected to the same business operations system and the same dashboard, instead of becoming separate tools.

Beta Partner Offer

Try the full AI business system for the price of the base system

Never miss a customer call again. Automatically book jobs and follow up every lead.

Use every feature for 30 days—calls, scheduling, follow-up, CRM, and management.
The base system includes 1000 minutes (~150–300 calls/month).
After month one, completed feedback unlocks 50% off for the upgrades you keep.

  • AI Call Handling + 1000 Minutes$349
  • Scheduling$149$74.50
  • Advanced Management$299$149.50
  • Outbound Follow-Up$199$99.50
  • Additional Language Pack$99$49.50
  • External CRM Integration$149$74.50
Regular full-access value: $1,244/month Luxury full-access value starts at $1,394/month.
Launch price
$349
per month
Full system access + 1000 included minutes (~150–300 calls/month) for the first 30 days
$1,244/month regular full-access value
Get the full $1,244 system for just $349
  • Try the full system with 1000 included minutes
  • After month one: base stays at $349/month
  • Completed feedback unlocks 50% off for selected upgrades for one year
No contract. Cancel anytime.
Beta pricing locked for early users only.
  • Base system continues at $349/month with 1000 included minutes.
  • Completed feedback unlocks 50% off for one year on selected upgrades. Change or remove them anytime.
  • Example after month one: Base system $349 + Scheduling $74.50 + Outbound Follow-Up $99.50 = $523/month.
const moduleData = { "scheduling": { tag: "Core upgrade", title: "Scheduling", subtitle: "Turn call interest into confirmed work instead of missed opportunities.", copy: "Scheduling gives your business a cleaner path from inbound call to booked appointment. It reduces back-and-forth, missed confirmations, and front-desk overload.", points: [ "Best for businesses that live on appointments, routes, or visit-based work.", "Includes reminders, confirmations, and 3 staff seats by default.", "Makes the business feel organized to both the customer and the owner." ] }, "advanced-management": { tag: "Management layer", title: "Advanced Management", subtitle: "Give the owner one place to run the moving parts of the business.", copy: "Advanced Management sits on top of Scheduling and turns the system from booking software into a real operating layer. Tasks, staff, approvals, and pipeline work stop living in scattered notes and messages.", points: [ "Best for owners who want more than call handling and booking alone.", "Includes task management, staff coordination, sales pipeline, and approvals.", "Creates clearer accountability without making the team use a heavy tool." ] }, "outbound-follow-up": { tag: "Growth upgrade", title: "Outbound Follow-Up", subtitle: "Wake up old leads and turn silent data into new revenue activity.", copy: "Outbound Follow-Up helps businesses stop wasting old contact lists, missed leads, and dormant opportunities. It turns existing data into structured recovery campaigns from the same system.", points: [ "Best for businesses with old lead lists, quote requests, or inactive clients.", "Upload spreadsheets and sort contacts into usable follow-up groups.", "Ideal for teams that want growth without starting from zero every month." ] }, "language-pack": { tag: "Support upgrade", title: "Additional Language Pack", subtitle: "Meet more customers in the language they are most comfortable using.", copy: "This upgrade makes the system more accessible to multilingual markets without forcing the business to split communication across separate tools. It helps you sound more local, more responsive, and easier to trust.", points: [ "Best for service areas with strong bilingual or multilingual demand.", "Adds another supported language to the call handling experience.", "Useful when language accessibility directly affects conversion." ] }, "crm-integration": { tag: "Support upgrade", title: "External CRM Integration", subtitle: "Keep AI Call Port connected to the tools your business already runs on.", copy: "For teams that already rely on an outside CRM, this upgrade keeps data moving without double entry. It protects your existing workflow while still giving you the operating benefits of AI Call Port.", points: [ "Best for businesses that already have a CRM they cannot replace yet.", "Connects AI Call Port beyond the built-in CRM layer.", "Useful when call handling, records, and follow-up must stay synchronized." ] }, "intent-qualification": { tag: "AI behavior", title: "Lead qualification behavior", subtitle: "Tell serious opportunity from low-value noise before the business wastes time on the wrong call.", copy: "AI Call Port can shift into qualification mode when the caller sounds like a real prospect instead of a routine information request. That means the system can ask smarter questions, collect better context, and move stronger leads forward faster.", points: [ "Useful when every sales call should not be treated the same way.", "Helps separate buying intent from casual browsing or routine questions.", "Built to protect sales time and improve conversion quality." ] }, "intent-sales": { tag: "AI behavior", title: "Sales agent behavior", subtitle: "Handle incoming opportunities like a conversion-minded sales rep, not a passive receptionist.", copy: "When the call is sales-driven, the system can change tone and behavior to guide the conversation toward action. It can collect intent, reduce drop-off, and help move the caller toward the next step instead of simply answering questions.", points: [ "Best for businesses where inbound calls are revenue opportunities.", "Useful for quote requests, new customer inquiries, and service sales.", "Designed to turn attention into action." ] }, "intent-booking": { tag: "AI behavior", title: "Booking agent behavior", subtitle: "Move callers into confirmed appointments instead of letting interest stay loose and uncommitted.", copy: "When a caller is ready to schedule, the system can switch into booking behavior and guide the call toward an actual confirmed slot. This helps convert demand into scheduled work instead of follow-up friction.", points: [ "Best for businesses that live on booked jobs or appointments.", "Supports cleaner scheduling, confirmations, and next-step clarity.", "Turns intent into operationally useful bookings." ] }, "intent-reservations": { tag: "AI behavior", title: "Reservation agent behavior", subtitle: "Handle reservation-style calls with a flow built for time slots, availability, and customer confidence.", copy: "Some businesses need reservation logic rather than simple appointment logic. The system can respond with a more reservation-focused behavior when the caller needs time-based placement, availability handling, or booking certainty.", points: [ "Useful for reservation-heavy or availability-sensitive businesses.", "Keeps the conversation structured around time slots and confirmation.", "Makes the interaction feel more organized and professional." ] }, "intent-support": { tag: "AI behavior", title: "Support response behavior", subtitle: "Handle routine support needs without pulling your team into the same repeated conversations all day.", copy: "When the caller needs updates, answers, or service-related help, the system can shift into support mode instead of treating the call like a sales inquiry. This protects staff time while keeping the caller helped and informed.", points: [ "Useful for status checks, routine questions, and service support.", "Reduces repeated interruptions for the team.", "Keeps support logic inside the same operating system." ] }, "intent-info": { tag: "AI behavior", title: "Information agent behavior", subtitle: "Answer common questions clearly so the business does not waste labor on repetitive low-value calls.", copy: "A large share of inbound calls are basic information requests. The system can shift into a concise information role that gives clear answers without pulling the owner or staff into every small interaction.", points: [ "Useful for hours, services, policies, directions, and general questions.", "Keeps the phone line responsive even when staff are busy.", "Improves caller experience without adding more admin load." ] }, "intent-inventory": { tag: "AI behavior", title: "Inventory checking behavior", subtitle: "Answer availability questions with more confidence when the call depends on what is actually available.", copy: "Some callers are trying to find out whether something is in stock, open, available, or ready. The system can shift into availability-checking logic so the conversation matches the caller’s real need instead of following a generic path.", points: [ "Useful for product checks, slot availability, and readiness questions.", "Helps the business sound more accurate and responsive.", "Keeps inventory-style calls from becoming awkward dead ends." ] }, "intent-routing": { tag: "AI behavior", title: "Intent routing behavior", subtitle: "Send the caller down the right path automatically instead of forcing one script on every conversation.", copy: "The system can recognize what type of call is happening and route behavior accordingly. That means sales, bookings, information, support, and urgent calls can all be handled differently without manual intervention.", points: [ "Useful when one business receives many different call types.", "Reduces friction caused by generic one-size-fits-all response logic.", "Makes the system feel adaptive, not scripted." ] }, "intent-emergency": { tag: "AI behavior", title: "Emergency routing behavior", subtitle: "Recognize urgent situations fast and respond with the right priority logic.", copy: "Emergency calls should not be handled like normal calls. The system can detect urgency and switch into faster escalation behavior when the situation needs higher-priority handling.", points: [ "Useful for plumbing, HVAC, electrical, restoration, and urgent services.", "Helps protect serious calls from getting buried in normal flow.", "Supports faster response where timing matters." ] }, "intent-afterhours": { tag: "AI behavior", title: "After-hours behavior", subtitle: "Respond differently outside business hours without losing control of the customer experience.", copy: "A good after-hours response should not sound like the middle of the workday. The system can automatically shift behavior based on time and availability so the caller gets the right expectation and next step.", points: [ "Useful for nights, weekends, holidays, and off-schedule coverage.", "Keeps the business responsive when the team is not actively on the phone.", "Prevents after-hours calls from feeling unmanaged." ] }, "intent-notification": { tag: "AI behavior", title: "Owner notification behavior", subtitle: "Trigger the right alert when the call needs attention, approval, or fast visibility.", copy: "Some calls need more than a response. They need the owner or manager to know immediately. The system can recognize those situations and trigger the right notification behavior instead of letting important calls disappear into history.", points: [ "Useful for high-value leads, approvals, urgent situations, and exceptions.", "Improves visibility for owners without making everything feel urgent.", "Helps the right people see the right calls at the right time." ] }, "intent-language": { tag: "AI behavior", title: "Language detection behavior", subtitle: "Recognize caller language and adapt response flow before the conversation breaks down.", copy: "Language detection makes the system more flexible for multilingual markets. Instead of forcing every caller into one language path, the system can identify the language and respond with more appropriate handling when needed.", points: [ "Useful for bilingual and multilingual service areas.", "Improves trust and clarity for callers who are more comfortable in another language.", "Makes the business feel more accessible and better prepared." ] }, "future-hr": { tag: "Planned module", title: "HR helper", subtitle: "Make staffing and people coordination feel organized instead of reactive.", copy: "HR helper is designed to keep people-related structure closer to real operations. Instead of staffing notes living in scattered texts and spreadsheets, the business gets one clearer place to manage internal coordination.", points: [ "Ideal for teams that are growing beyond ad hoc staff coordination.", "Would support staffing structure, internal requests, and people visibility.", "Fits businesses that want operations and team management connected." ] }, "future-accounting": { tag: "Planned module", title: "Accounting", subtitle: "Bring money decisions closer to the work actually happening in the business.", copy: "Accounting is planned to connect financial visibility back to calls, bookings, and completed work. That means fewer blind spots between operations and the numbers that matter.", points: [ "Ideal for owners who want cleaner operational-to-financial visibility.", "Would support stronger business decisions from one connected system.", "Designed to reduce the gap between activity and financial logic." ] }, "future-campaigns": { tag: "Planned module", title: "Advertising campaigns", subtitle: "Connect marketing spend directly to calls, follow-up, and outcomes.", copy: "Advertising campaigns would bring growth activity into the same operating system instead of leaving it in separate dashboards. The goal is clearer attribution from campaign to call to booked business.", points: [ "Ideal for businesses already spending on local ads or lead generation.", "Would connect campaigns to real calls, follow-up, and conversion activity.", "Built for measurable growth, not disconnected reporting." ] }, "future-recovery": { tag: "Planned module", title: "Lead recovery", subtitle: "Turn old opportunities back into active revenue without starting from zero.", copy: "Lead recovery is designed for businesses sitting on missed quotes, inactive contacts, and old inquiry lists. Instead of treating old data like dead data, the system helps bring it back into motion.", points: [ "Ideal for businesses with years of untouched contact history.", "Would make old leads easier to sort, re-engage, and convert.", "Built to unlock value that is already inside the business." ] }, "future-performance": { tag: "Planned module", title: "Staff performance", subtitle: "See who is following through, who needs support, and where work is slipping.", copy: "Staff performance is planned to make accountability easier without turning the business into a corporate dashboard. Owners get clearer visibility into coordination, completions, and operational follow-through.", points: [ "Ideal for teams where performance visibility is still too informal.", "Would connect staff results back to tasks, bookings, and workflow progress.", "Built for clarity, not micromanagement." ] }, "future-retention": { tag: "Planned module", title: "Customer retention", subtitle: "Keep follow-up, repeat business, and long-term customer value inside one system.", copy: "Customer retention is planned to help businesses stay connected after the first booking or sale. Instead of treating every job like a one-time event, the system can support stronger repeat-business logic.", points: [ "Ideal for service businesses that rely on repeat visits or ongoing relationships.", "Would support retention campaigns and long-term customer follow-up.", "Built to increase lifetime value, not just first conversion." ] } }; const modal = document.getElementById("module-modal"); const titleEl = document.getElementById("module-title"); const subtitleEl = document.getElementById("module-subtitle"); const tagEl = document.getElementById("module-tag"); const copyEl = document.getElementById("module-copy"); const pointsEl = document.getElementById("module-points"); const closeBtn = document.getElementById("module-close"); document.querySelectorAll("[data-module]").forEach((button) => { button.addEventListener("click", () => { const data = moduleData[button.dataset.module]; if (!data) return; tagEl.textContent = data.tag; titleEl.textContent = data.title; subtitleEl.textContent = data.subtitle; copyEl.innerHTML = data.copy; pointsEl.innerHTML = data.points .map((point) => `
  • ${point}
  • `) .join(""); modal.classList.add("is-open"); modal.setAttribute("aria-hidden", "false"); }); }); function closeModuleModal() { modal.classList.remove("is-open"); modal.setAttribute("aria-hidden", "true"); } closeBtn.addEventListener("click", closeModuleModal); modal.addEventListener("click", (event) => { if (event.target === modal) closeModuleModal(); }); window.addEventListener("keydown", (event) => { if (event.key === "Escape" && modal.classList.contains("is-open")) { closeModuleModal(); } }); const previewData = { overview: { title: "Overview", description: "The owner starts here with live visibility across calls, bookings, follow-up, requests, billing, and upgrade activity.", tag: "Full dashboard preview", submenu: ["Summary", "Alerts", "Today"] }, "call-handling": { title: "Call Handling", description: "Inbound activity, intent shifts, call outcomes, missed-call recovery, and urgent routing stay visible in one workspace.", tag: "Base system active", submenu: ["Calls", "Appointments", "Tasks", "Notifications"] }, crm: { title: "CRM", description: "The built-in CRM keeps customer records, transcripts, notes, recordings, and next steps connected to the same history.", tag: "Built-in CRM", submenu: ["Clients"] }, reports: { title: "Reports", description: "Activity, revenue direction, conversions, and operational patterns stay visible without jumping between tools.", tag: "Owner reporting", submenu: ["Performance", "Revenue", "Conversions", "Activity"] }, billing: { title: "Billing", description: "Current plan, charges, credits, active upgrades, and projected billing stay visible inside the same owner dashboard.", tag: "Financial control", submenu: ["Plan", "Usage", "Invoices", "Payment Settings"] }, requests: { title: "Requests", description: "Support issues, approvals, account changes, and operational exceptions stay visible instead of getting lost in messages.", tag: "Owner control", submenu: ["Open Requests", "Approvals", "Support Issues", "Resolved"] } }; "advanced-management::Staff Management": { stats: [["9", "staff actions"], ["2", "schedule conflicts"], ["1", "reassignment pending"]], panels: [ ["Staff view", [["Field route reassignment", "Pending"], ["Coverage gap detected", "Review"], ["Team reminders issued", "Done"], ["Late completion flag", "Alert"]]], ["Why it matters", [["Managers see workload", "Yes"], ["Staff follow-through is clearer", "Yes"], ["Coordination is less reactive", "Better"], ["Operational control improves", "Visible"]]] ] }, "advanced-management::Sales Pipeline": { stats: [["6", "pipeline items"], ["2", "stalled deals"], ["$4.9k", "open value"]], panels: [ ["Pipeline view", [["New estimate request", "Open"], ["Follow-up quote", "Pending"], ["High-value lead", "Priority"], ["Dormant opportunity", "Stalled"]]], ["Management value", [["Sales work becomes visible", "Yes"], ["Stalled deals are easier to spot", "Yes"], ["Owner sees conversion risk", "Better"], ["Follow-up gets accountability", "Useful"]]] ] }, "advanced-management::Approvals & Requests": { stats: [["5", "approval items"], ["2", "manager decisions"], ["1", "urgent exception"]], panels: [ ["Approval workspace", [["Discount exception", "Owner"], ["Schedule override", "Pending"], ["Client-facing change", "Manager"], ["Urgent escalation", "Review"]]], ["Why it matters", [["Approvals become structured", "Yes"], ["Operational exceptions stay visible", "Yes"], ["Decision flow is cleaner", "Better"], ["Owner control feels real", "Strong"]]] ] }, "referrals::Referral Sources": { stats: [["12", "referral sources"], ["4", "active partners"], ["9", "new leads"]], panels: [ ["Source tracking", [["Media partner A", "Active"], ["Client referral link", "Used"], ["Partner campaign", "Tracked"], ["Direct share link", "Open"]]], ["Referral value", [["Sources stay visible", "Yes"], ["Attribution is cleaner", "Yes"], ["Owner sees what works", "Better"], ["Growth path gets clearer", "Useful"]]] ] }, "referrals::Referral Activity": { stats: [["7", "new referrals"], ["3", "activated accounts"], ["2", "follow-up pending"]], panels: [ ["Referral activity", [["New referred lead", "Tracked"], ["Activated referred account", "Done"], ["Pending referral callback", "Open"], ["Referral follow-up note", "Saved"]]], ["Why it matters", [["Referrals stop being guesswork", "Yes"], ["Discount logic stays visible", "Yes"], ["Growth source quality improves", "Likely"], ["Credits are easier to trust", "Better"]]] ] }, "referrals::Discounts": { stats: [["-$20", "monthly credit"], ["2", "active referral discounts"], ["1", "new credit pending"]], panels: [ ["Discount view", [["Referred active client A", "-$10"], ["Referred active client B", "-$10"], ["Pending referral activation", "Open"], ["Credit next cycle", "Likely"]]], ["Owner clarity", [["Credits are itemized", "Yes"], ["Billing impact is visible", "Yes"], ["Referrals feel real", "Better"], ["Program trust improves", "Useful"]]] ] }, "referrals::Insights": { stats: [["41%", "best source conversion"], ["3", "top referral partners"], ["18%", "referral growth"]], panels: [ ["Referral insight", [["Best partner source", "Partner A"], ["Highest activated client rate", "Direct referrals"], ["Weakest source", "Needs review"], ["Growth pattern", "Positive"]]], ["Decision support", [["Owner sees source quality", "Yes"], ["Referral program is measurable", "Yes"], ["Spend and growth align better", "Likely"], ["Attribution gets cleaner", "Helpful"]]] ] }, "languages::Active Languages": { stats: [["2", "languages active"], ["14", "non-English calls"], ["100%", "coverage available"]], panels: [ ["Language coverage", [["English", "Active"], ["Spanish", "Active"], ["French", "Available"], ["Language pack status", "On"]]], ["Value to business", [["Coverage feels broader", "Yes"], ["Accessibility improves", "Yes"], ["Caller trust increases", "Likely"], ["Language routing stays visible", "Clear"]]] ] }, "languages::Voice Mapping": { stats: [["2", "voice profiles"], ["1", "language switch rule"], ["0", "mapping errors"]], panels: [ ["Voice mapping", [["English voice profile", "Assigned"], ["Spanish voice profile", "Assigned"], ["Fallback behavior", "Ready"], ["Language-specific prompts", "Loaded"]]], ["Why it matters", [["Voice fit improves", "Yes"], ["Language experience feels cleaner", "Yes"], ["Fallback stays controlled", "Better"], ["Multilingual quality improves", "Likely"]]] ] }, "languages::Routing": { stats: [["8", "language-routed calls"], ["3", "auto language shifts"], ["1", "manual fallback"]], panels: [ ["Routing behavior", [["Spanish-speaking caller", "Auto-routed"], ["Bilingual request", "Handled"], ["Unknown language fallback", "Review"], ["Language detection success", "Strong"]]], ["Operational value", [["Routing stays automatic", "Yes"], ["Staff interruptions drop", "Likely"], ["Caller confidence rises", "Better"], ["System feels more capable", "Strong"]]] ] }, "languages::Usage": { stats: [["14", "multilingual calls"], ["4", "bookings from language shift"], ["2", "support calls resolved"]], panels: [ ["Usage overview", [["Spanish call bookings", "4"], ["Information calls resolved", "5"], ["Support requests handled", "2"], ["After-hours multilingual calls", "3"]]], ["Owner visibility", [["Usage is visible", "Yes"], ["Impact can be tracked", "Yes"], ["Language pack value is clearer", "Better"], ["Expansion decisions improve", "Useful"]]] ] }, "crm-sync::Sync Overview": { stats: [["24", "mapped CRM fields"], ["3", "sync rules"], ["0", "critical errors"]], panels: [ ["Sync controls", [["Client field mappings", "Ready"], ["Outcome sync rules", "Active"], ["Direction control", "Configured"], ["Approval gates", "Optional"]]], ["Use case", [["Built-in CRM still works", "Yes"], ["Outside CRM syncs cleanly", "Yes"], ["Logs remain visible", "Yes"], ["Owner sees connection health", "Clear"]]] ] }, "crm-sync::Mappings": { stats: [["24", "active mappings"], ["4", "custom fields"], ["1", "mapping review needed"]], panels: [ ["Field mappings", [["Client name sync", "Mapped"], ["Phone and address", "Mapped"], ["Outcome status", "Mapped"], ["Custom service field", "Review"]]], ["Why it matters", [["Double entry drops", "Yes"], ["Field confusion drops", "Likely"], ["Data stays cleaner", "Better"], ["Owner trust improves", "Useful"]]] ] }, "crm-sync::Logs": { stats: [["128", "sync events"], ["3", "warnings"], ["0", "critical failures"]], panels: [ ["Sync log", [["Client record pushed", "Done"], ["Outcome update synced", "Done"], ["Address mismatch warning", "Review"], ["Retry completed", "Resolved"]]], ["Visibility value", [["Logs stay visible", "Yes"], ["Errors are easier to spot", "Yes"], ["Support gets context fast", "Better"], ["Connection health is clearer", "Useful"]]] ] }, "crm-sync::Rules": { stats: [["3", "sync rules"], ["2", "approval gates"], ["1", "direction override"]], panels: [ ["Rule controls", [["One-way sync for notes", "Active"], ["Two-way client details", "Active"], ["Approval before overwrite", "On"], ["Priority source rule", "Configured"]]], ["Why it matters", [["Sync stays controlled", "Yes"], ["Data conflicts drop", "Likely"], ["Owner keeps confidence", "Better"], ["Integration feels safer", "Strong"]]] ] } }; const previewTitle = document.getElementById("preview-title"); if (previewTitle) { const previewDescription = document.getElementById("preview-description"); const previewTag = document.getElementById("preview-tag"); const previewSubmenu = document.getElementById("preview-submenu"); const previewActions = document.getElementById("preview-actions"); const previewStats = document.getElementById("preview-stats"); const previewPanels = document.getElementById("preview-panels"); const previewDetailTitle = document.getElementById("preview-detail-title"); const previewDetailCopy = document.getElementById("preview-detail-copy"); const previewDetailGrid = document.getElementById("preview-detail-grid"); let activePreview = "overview"; let activeSubview = "Summary"; let activeAction = ""; const previewActionLabels = { overview: ["Live Queue", "Owner Alerts", "Today Board"], "call-handling": ["Active Call Paths", "Intent Shifts", "Urgent Escalations"], crm: ["Client Record", "Conversation History", "Next Steps"], reports: ["Performance Snapshot", "Revenue Trend", "Conversion Watch"], billing: ["Current Charges", "Credits Applied", "Next Invoice"], requests: ["Open Requests", "Approval Queue", "Resolved History"], scheduling: ["Today's Calendar", "Confirmation Flow", "Staff Assignments"], "outbound-follow-up": ["Lead Segments", "Live Campaigns", "Recovery Queue"], "advanced-management": ["Task Board", "Staff Control", "Pipeline View"], referrals: ["Referral Sources", "Monthly Credits", "Referral Insights"], languages: ["Active Languages", "Routing Rules", "Usage Impact"], "crm-sync": ["Sync Health", "Field Mapping", "Sync Rules"] }; function getActionLabels(moduleKey) { return previewActionLabels[moduleKey] || ["Live View", "Owner Alerts", "Next Actions"]; } function setActiveButton(groupSelector, activeValue, attrName) { document.querySelectorAll(groupSelector).forEach((button) => { button.classList.toggle("active", button.getAttribute(attrName) === activeValue); }); } function renderPreviewActions(moduleKey) { const actions = getActionLabels(moduleKey); if (!actions.includes(activeAction)) { activeAction = actions[0]; } previewActions.innerHTML = actions.map((label) => ` `).join(""); } function renderPreviewPanels(view) { previewStats.innerHTML = view.stats.map((stat) => ` `).join(""); previewPanels.innerHTML = view.panels.map((panel) => `

    ${panel[0]}

    `).join(""); } function setPreviewDetail(title, copy, detailItems) { previewDetailTitle.textContent = title; previewDetailCopy.textContent = copy; previewDetailGrid.innerHTML = detailItems.map((item) => `
  • ${item[0]} ${item[1]}
  • `).join(""); } function describeAction(moduleKey, moduleData, actionLabel) { return { title: actionLabel, copy: `${actionLabel} opens a live owner-facing view inside ${moduleData.title.toLowerCase()}, so the business can see real activity, make decisions faster, and keep the workflow connected without jumping between tools.`, items: [ ["What opens", `${moduleData.title} data updates in one connected workspace.`], ["Why it matters", "The owner sees what needs action now instead of chasing messages or spreadsheets."], ["Activated state", "This view is shown as fully active with all current upgrades turned on."] ] }; } function describeStat(moduleData, statLabel, statValue) { return { title: `${statValue} ${statLabel}`, copy: `This metric is clickable because the dashboard is meant to feel real. It gives the owner a fast read on ${statLabel} inside ${moduleData.title.toLowerCase()} and shows where attention should go next.`, items: [ ["Metric value", `${statValue} currently shown in this preview.`], ["Owner takeaway", `This helps the business quickly judge ${statLabel} without digging through reports.`], ["Connected workflow", "The metric ties back to calls, bookings, CRM, follow-up, or management activity."] ] }; } function describePanelItem(moduleData, panelTitle, itemLabel, itemValue) { return { title: itemLabel, copy: `${itemLabel} appears under ${panelTitle.toLowerCase()} so the owner can understand what is happening, what state it is in, and what the next action should be inside ${moduleData.title.toLowerCase()}.`, items: [ ["Current status", itemValue], ["Shown in", `${moduleData.title} / ${activeSubview}`], ["Why it matters", "Important operational details stay visible and actionable instead of getting buried."] ] }; } function renderSubmenuButtons(moduleKey) { const data = previewData[moduleKey]; previewSubmenu.innerHTML = (data.submenu || []).map((item) => ` `).join(""); } function renderPreview(moduleKey, submenuKey) { const data = previewData[moduleKey]; if (!data) return; activePreview = moduleKey; activeSubview = submenuKey || data.submenu[0]; previewTitle.textContent = `${data.title} / ${activeSubview}`; previewDescription.textContent = data.description; previewTag.textContent = data.tag; renderSubmenuButtons(moduleKey); renderPreviewActions(moduleKey); const viewKey = `${moduleKey}::${activeSubview}`; const view = previewViewData[viewKey]; if (view) { renderPreviewPanels(view); const actionDetail = describeAction(moduleKey, data, activeAction); setPreviewDetail(actionDetail.title, actionDetail.copy, actionDetail.items); } } document.querySelectorAll("[data-preview]").forEach((button) => { button.addEventListener("click", () => { document.querySelectorAll("[data-preview]").forEach((item) => item.classList.remove("active")); button.classList.add("active"); renderPreview(button.dataset.preview); }); }); previewSubmenu.addEventListener("click", (event) => { const button = event.target.closest("[data-preview-submenu]"); if (!button) return; renderPreview(activePreview, button.dataset.previewSubmenu); }); previewActions.addEventListener("click", (event) => { const button = event.target.closest("[data-preview-action]"); if (!button) return; activeAction = button.dataset.previewAction; setActiveButton("[data-preview-action]", activeAction, "data-preview-action"); const detail = describeAction(activePreview, previewData[activePreview], activeAction); setPreviewDetail(detail.title, detail.copy, detail.items); }); previewStats.addEventListener("click", (event) => { const button = event.target.closest("[data-preview-stat]"); if (!button) return; setActiveButton("[data-preview-stat]", button.getAttribute("data-preview-stat"), "data-preview-stat"); const [statLabel, statValue] = button.getAttribute("data-preview-stat").split("||"); const detail = describeStat(previewData[activePreview], statLabel, statValue); setPreviewDetail(detail.title, detail.copy, detail.items); }); previewPanels.addEventListener("click", (event) => { const button = event.target.closest("[data-preview-item]"); if (!button) return; setActiveButton("[data-preview-item]", button.getAttribute("data-preview-item"), "data-preview-item"); const [panelTitle, itemLabel, itemValue] = button.getAttribute("data-preview-item").split("||"); const detail = describePanelItem(previewData[activePreview], panelTitle, itemLabel, itemValue); setPreviewDetail(detail.title, detail.copy, detail.items); }); renderPreview("overview", "Summary"); }