Autoreceptionist.ai - System Overview

Complete feature inventory covering public, customer, and admin areas with external service dependencies.

Generated 2026-04-07 - PROD https://autoreceptionist.ai - TEST https://test.autoreceptionist.ai

1. Public Pages

No authentication required. Marketing, onboarding entry, legal, and competitor lead-generation suite.

Landing and marketing

Homepage

Primary marketing landing page with hero, value props, pricing teaser, and demo widget.

GET Public Template: public/landing.php Inputs: none External: Vapi web SDK (VAPI_PUBLIC_KEY, VAPI_DEMO_ASSISTANT_ID) OK

Privacy policy

Static privacy policy page.

GETPublicOK

Terms of service

Static terms of service page.

GETPublicOK

XML sitemap

Dynamically generated sitemap for search engines.

GETPublicService: SeoService::renderSitemapOK

Status JSON

Liveness endpoint returning JSON status payload.

GETPublicOK

AEO and LLM artifacts

robots.txt

Static robots file. Now allows the major LLM and AEO crawlers in addition to traditional search bots.

GET Public Allows: GPTBot, ClaudeBot, anthropic-ai, PerplexityBot, Google-Extended, CCBot, Applebot-Extended Inputs: none OK

llms.txt

llmstxt.org standard file listing key topics, URLs, and a summary tailored for LLM crawlers and answer engines.

GET Public Inputs: none Regenerate: /admin/seo/aeo-llm OK

llms-full.txt

Extended llms.txt variant with the full context pack (expanded descriptions, FAQ answers, product details) for deep-crawl LLMs.

GET Public Inputs: none OK

Authentication

Customer login

Email and password login with brute-force rate limit and optional Google OAuth.

GETPOST Public Inputs: email, password, return_to, CSRF token Rate limit: 5 per IP per 15 min OK

Google OAuth login

Single sign-on via Google. Creates a business account if none exists for the address.

GET Public Keys: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REDIRECT_URI External: Google OAuth OK

Forgot password

Sends a one-time reset link by email without revealing whether the address exists.

GETPOST Public Inputs: email, CSRF token Keys: GMAIL_USER, GMAIL_APP_PASSWORD OK

Reset password

Consumes a valid reset token and stores the new password hash.

GETPOST Public Inputs: token, password, confirm_password, CSRF token OK

Logout

Destroys the session and returns the user to the homepage.

GETURL: /auth/logout and /auth/logout.phpOK

Signup wizard

Multi-step onboarding wizard collecting business details and configuring the assistant.

GETPOST Public Inputs: business name, industry, owner name, owner email, phone, hours, CSRF External: OpenAI via ScriptBuilder (prompt generation), Stripe (trial subscription) OK

Signup preview script

Generates a draft greeting script for the signup flow preview panel.

POSTPublicURL: /signup/preview-scriptOK

Competitor feature suite

Industry index

Hub page linking to each industry-specific landing page.

GETPublicOK

Plumbers landing

Industry landing page for plumbing businesses.

GETPublicOK

Dentists landing

Industry landing page for dental practices.

GETPublicOK

Solicitors landing

Industry landing page for solicitors and law firms.

GETPublicOK

Salons landing

Industry landing page for salons and spas.

GETPublicOK

Electricians landing

Industry landing page for electricians.

GETPublicOK

Accountants landing

Industry landing page for accounting practices.

GETPublicOK

Number porting

Collects current provider details and generates a porting request document.

GETPOST Public Inputs: business name, current number, current provider, account holder, CSRF Service: PortingService OK

Lost-call audit

Analyses a business number to estimate missed calls and lost revenue.

GETPOST Public Inputs: business name, phone, industry, email, CSRF Keys: GOOGLE_PLACES_API_KEY External: Google Places, OpenAI OK

Audit report

Printable report page accessed via tokenised URL after running an audit.

GETPublicInputs: audit_id or token queryOK

Missed-call rescue

Lets a visitor trigger an SMS/recap service for missed calls on their number.

GETPOST Public Inputs: business name, phone, email, consent, CSRF Keys: TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_SMS_FROM Service: MissedCallService, SmsRecapService OK

Help and contact

Help center

Public searchable knowledge base with articles and FAQs.

GETPublicController: HelpController::indexOK

Contact form

Public contact form that creates a submission record and sends an admin notification email.

GETPOST Public Inputs: name, email, subject, message, CSRF Keys: CONTACT_FORM_RECIPIENT, GMAIL_USER, GMAIL_APP_PASSWORD OK

2. Customer Features

Require customer login. Handled by DashboardController via Middleware::requireUser.

Dashboard

Customer dashboard home

Overview with call volume, usage, quick stats, and onboarding checklist.

GETCustomerOK

Dismiss onboarding checklist

Hides the onboarding card by stamping onboarding_dismissed_at.

POSTCustomerURL: /dashboard/dismiss-onboardingOK

Calls

Call history

Paginated list of inbound and outbound calls with status and duration.

GETCustomerOK

Call detail

Full transcript, recording, and metadata for a single call.

GETCustomerURL: /dashboard/calls/detail?id=...OK

Call export CSV

Streams a CSV of the filtered call list for reporting.

GETCustomerURL: /dashboard/calls/exportOK

Bookings

Bookings list

Appointments captured by the AI receptionist with ability to update status.

GETCustomerOK

Update booking status

Marks a booking as confirmed, cancelled, or completed.

POSTCustomerURL: /dashboard/bookings/updateInputs: booking_id, status, CSRFOK

Connect Google Calendar

OAuth flow to link a calendar so bookings are created directly in Google Calendar.

GETCustomerURL: /dashboard/calendar/connectKeys: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETOK

Calendar OAuth callback

Receives the Google OAuth code and stores the calendar refresh token.

GETCustomerURL: /dashboard/calendar/callbackOK

Disconnect calendar

Revokes the stored Google Calendar credentials.

POSTCustomerOK

Knowledge base

Business knowledge

Structured business facts (services, hours, policies) the AI uses when answering calls.

GETPOSTCustomerInputs: category, key, value, CSRFOK

Support

Support tickets

Customer list of help tickets with status and last update.

GETCustomerOK

Support ticket detail

Conversation thread for a single ticket with reply and reopen actions.

GETCustomerURL: /dashboard/support/ticket?id=...OK

Create support ticket

Posts a new support request that notifies admins via email.

POSTCustomerInputs: subject, message, priority, CSRFOK

Reply to ticket

Adds a customer reply to an existing ticket.

POSTCustomerOK

Reopen ticket

Reopens a previously closed ticket.

POSTCustomerOK

Billing

Billing overview

Current plan, trial status, invoices, and call quota with upgrade and cancel actions.

GETCustomerKeys: STRIPE_SECRET_KEY, STRIPE_PRICE_STARTER, STRIPE_PRICE_PRO, STRIPE_PRICE_ENTERPRISEOK

Billing actions

Launches Stripe customer portal or triggers upgrade/cancel actions.

POSTCustomerInputs: action, CSRFOK

Owner reports

Weekly owner-facing report listing rescued calls, bookings, and revenue impact.

GETCustomerService: OwnerReportServiceOK

View single report

Detailed view of a specific weekly report with all source data.

GETCustomerURL: /dashboard/reports/view?id=...OK

Settings

Account settings

Business profile, contact details, greeting script, working hours, and voice selection.

GETPOSTCustomerInputs: business name, phone, hours, greeting, voice, CSRFOK

Change password

Customer-initiated password change using the current password.

POSTCustomerInputs: current_password, new_password, confirm, CSRFOK

Onboarding and signup

See Signup wizard under Public pages for the initial account creation flow.

3. Admin Features

Require admin session. Handled by AdminController, OutreachController, ContactController behind Middleware::requireAdmin.

Dashboard

Admin dashboard

KPIs: active customers, MRR, call volume, trial conversions, churn.

GETAdminOK

Admin login

Dedicated admin login form with rate limiting.

GETPOSTPublicOK

Customers

Customers list

All business accounts with plan, status, and last login.

GETAdminOK

Customer detail

Individual account: calls, bookings, billing, support, activity log.

GETAdminURL: /admin/customers/detail?id=...OK

Customer action

Suspend, unsuspend, reset password, or impersonate a customer.

POSTAdminInputs: id, action, CSRFOK

Customer export CSV

Full customer list download for reporting.

GETAdminOK

Call export CSV (admin)

Global call export across all customers.

GETAdminURL: /admin/calls/exportOK

Audits

Audits list

All lost-call audit submissions from the public audit tool.

GETAdminOK

Rescue

Rescue queue

Missed-call rescue submissions awaiting or in follow-up.

GETAdminOK

Update rescue status

Change the lifecycle status of a rescue record.

POSTAdminInputs: id, status, CSRFOK

Revenue

Revenue dashboard

Monthly recurring revenue, churn, trial conversion, lifetime value.

GETAdminKeys: STRIPE_SECRET_KEYOK

At risk

At-risk customers

Accounts trending toward churn based on usage drop, failed payments, or support signals.

GETAdminOK

Email log

Email log

Outbound email audit trail with recipient, subject, and status.

GETAdminOK

Audit log

Audit log

Admin and system action log for compliance and debugging.

GETAdminOK

Settings

System settings

Centralised form for all environment-overridable settings (app, email, OAuth, Vapi, Twilio, Stripe, plans, costs, outreach, branding).

GETPOSTAdminService: Settings::getAllGroupedOK

Stripe setup wizard

Step-by-step wizard that creates products, prices, and webhook using the Stripe API.

GETPOSTAdminKeys: STRIPE_SECRET_KEYOK

Setup wizard

First-run checklist that validates database, Vapi, Twilio, Stripe, Google, and SMTP connectivity.

GETPOSTAdminOK

SEO and content (legacy)

SEO Meta Editor (legacy)

Legacy - superseded by /admin/seo/content-audit and /admin/seo/settings. Original per-page meta title, description, OG tag, and sitemap inclusion editor.

GETPOSTAdminOK

Content blocks

Edit marketing copy (hero, feature list, pricing, FAQ) stored in the content service.

GETPOSTAdminService: ContentServiceOK

SEO and Marketing

SEO Dashboard

Overview of crawl stats, bot breakdown, top URLs, backlinks, audit scores, keyword count, and LLM citations this month.

GET Admin Inputs: none OK

Bot Crawl Log

Paginated log of crawler visits (Googlebot, Bingbot, GPTBot, ClaudeBot, PerplexityBot, CCBot, Google-Extended, Applebot). Supports filters and CSV export.

GET Admin Inputs: bot, date_from, date_to, url, page (query filters), export=csv OK

Competitors

Competitor tracker with one-click scan via the SSRF-hardened fetcher and snapshot history.

GETPOST Admin Inputs: competitor_name, competitor_domain, CSRF OK

Target Keywords

CRUD for target keywords. Seeded with 10 UK keywords on migration 035.

GETPOST Admin Inputs: keyword, target_url, intent (informational/commercial/navigational/transactional), priority (primary/secondary/long_tail), CSRF OK

Content Audit

Runs SeoAuditService over every public URL and scores 0-100 on title, meta description, H1, word count, schema, canonical, OG, and internal links.

GETPOST Admin Inputs: run (trigger), CSRF OK

AEO and LLM Optimization

Status panel: llms.txt present, GPTBot allowed, homepage FAQ, schema emitted. Includes regenerate-llms.txt button and LLM citation log.

GETPOST Admin Inputs (add citation): llm_name, query, cited_url, snippet, CSRF OK

Schema Preview

Paste a URL to see the emitted JSON-LD schema.org structured data block.

GETPOST Admin Inputs: url, CSRF OK

SEO Settings

Central settings for search engine webmaster tools, third-party SEO APIs, and organisation/brand schema fields.

GETPOST Admin Inputs: GOOGLE_SEARCH_CONSOLE_PROPERTY, GOOGLE_SITE_VERIFICATION_TOKEN, BING_WEBMASTER_API_KEY, BING_SITE_VERIFICATION_TOKEN, SERPAPI_KEY, AHREFS_API_TOKEN, brand_name, phone_e164, address_json, founding_date, twitter_handle, linkedin_url, CSRF External: SerpAPI (serpapi.com), Ahrefs (ahrefs.com/api), Google Search Console, Bing Webmaster Tools OK

Outreach

Outreach dashboard

Outbound calling program overview: active campaigns, leads dialled, conversions.

GETAdminOK

Campaigns list

All outbound calling campaigns with status and progress.

GETAdminURL: /admin/outreach/campaignsOK

New campaign

Create a campaign: target list, script, pacing, schedule.

GETAdminOK

Campaign detail

Per-campaign stats, lead status counts, and call log.

GETAdminOK

Save campaign

Persists create/update to the campaign record.

POSTAdminInputs: name, script_id, schedule_id, list_id, CSRFOK

Campaign action

Start, pause, or archive a campaign.

POSTAdminOK

Scripts list

Library of outbound call scripts and AI prompts.

GETAdminURL: /admin/outreach/scriptsOK

Edit script

Edit or create an outbound script with variables and AI system prompt.

GETAdminOK

Save script

Persists script changes.

POSTAdminOK

Delete script

Removes a script from the library.

POSTAdminOK

Leads import

Upload a CSV of leads into the outreach queue.

GETPOSTAdminInputs: CSV file, campaign_id, CSRFService: CsvImportServiceOK

Leads scrape

Search Google Places, Apollo, or Outscraper for new leads.

GETPOSTAdminKeys: GOOGLE_PLACES_API_KEY, APOLLO_API_KEY, OUTSCRAPER_API_KEYOK

Import scraped leads

Move scraped results into the outreach lead table.

POSTAdminOK

Lead detail

Individual lead record with call history and status.

GETAdminOK

Update lead status

Change lead disposition (contacted, converted, do-not-call).

POSTAdminOK

Suppression list

Do-not-call phone numbers and domains to exclude from outreach.

GETAdminOK

Add suppression

Add a single entry to the suppression list.

POSTAdminOK

Remove suppression

Remove an entry from the suppression list.

POSTAdminOK

Import suppression CSV

Bulk import of suppression entries from a CSV.

POSTAdminOK

Call schedules

Time-window definitions for when outbound campaigns may dial.

GETAdminOK

Save schedule

Create or update a call schedule.

POSTAdminOK

Toggle schedule

Enable or disable a schedule without deleting it.

POSTAdminOK

Delete schedule

Remove a schedule definition.

POSTAdminOK

Support tickets and contact

Support tickets (admin)

All customer support tickets across the platform.

GETAdminOK

Admin ticket detail

Conversation thread with admin reply, status, and priority controls.

GETAdminOK

Admin reply

Post an admin reply on a ticket and optionally notify the customer.

POSTAdminOK

Change ticket status

Open, pending, solved, closed.

POSTAdminOK

Change ticket priority

Low, normal, high, urgent.

POSTAdminOK

Support FAQs

Maintain the public help center FAQ content.

GETAdminURL: /admin/support/faqsOK

Save FAQ

Create or update a FAQ entry.

POSTAdminOK

Delete FAQ

Remove a FAQ entry.

POSTAdminOK

Contact submissions

Public contact form submissions with assignment and status.

GETAdminURL: /admin/contact-submissionsOK

Update contact status

Update lifecycle of a contact submission.

POSTAdminOK

Media and showcase

Upload media

Upload audio, images, or PDFs to the media library.

POSTAdminURL: /admin/upload/mediaInputs: file, type, CSRFOK

Showcase

Curated list of case studies or testimonials rendered on marketing pages.

GETAdminOK

Save showcase entry

Add or update a showcase record.

POSTAdminOK

Delete showcase entry

Remove a showcase record.

POSTAdminOK

4. API and Webhook Endpoints

Machine-to-machine endpoints used by Vapi, Stripe, Twilio, and the dashboard front-end.

Status

Liveness JSON.

GETPublicURL: /api/statusOK

Outbound booking API

Creates a booking off an outbound AI call.

POSTSignedURL: /api/outbound-bookOK

Calendar check API

Returns free slots for the connected Google Calendar in a time window.

POSTSignedURL: /api/calendar-checkKeys: GOOGLE_SERVICE_ACCOUNT_JSON or customer OAuthOK

Calendar book API

Creates a Google Calendar event for a confirmed booking.

POSTSignedURL: /api/calendar-bookOK

Vapi webhook

Receives call started, transcript, and ended events from Vapi.ai.

POSTHMACURL: /webhooks/vapiKeys: VAPI_SERVER_SECRETOK

Stripe webhook

Receives subscription, invoice, and payment events from Stripe.

POSTSignedURL: /webhooks/stripeKeys: STRIPE_WEBHOOK_SECRETOK

5. Required External Services and API Keys

Consolidated from Settings::getDefinitions() in src/Services/Settings.php. Admin-settable keys can be edited at /admin/settings; env-only keys must be set in the host environment.

ServicePurposeKeysAdmin group
ApplicationCore app identity and environmentAPP_URL, APP_NAME, APP_ENV, ADMIN_EMAILApplication
Database (MySQL)Persistent storageDB_HOST, DB_NAME, DB_USER, DB_PASS, DB_CHARSET (env-only)Database
SecuritySession and webhook integrityENCRYPTION_KEY (env-only), SESSION_SECRET, WEBHOOK_TOLERANCE_SECONDSSecurity
Gmail SMTPTransactional email deliveryGMAIL_USER, GMAIL_APP_PASSWORD, MAIL_FROM_ADDRESS, MAIL_FROM_NAME, CONTACT_FORM_RECIPIENTEmail
Google OAuth (customer login)Customer SSOGOOGLE_LOGIN_ENABLED, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REDIRECT_URI, GOOGLE_SCOPESGoogle OAuth
Google Service AccountAdmin demo calendar and system calendar operationsGOOGLE_SERVICE_ACCOUNT_JSON, ADMIN_CALENDAR_ID, ADMIN_DEMO_*Google Service Account
Vapi.aiVoice AI assistant and telephony bridgeVAPI_API_KEY, VAPI_SERVER_SECRET, VAPI_BASE_URL, VAPI_PHONE_NUMBER_ID, VAPI_PUBLIC_KEY, VAPI_DEMO_ASSISTANT_IDVapi.ai
TwilioPhone numbers and SMSTWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_SMS_FROM, TWILIO_DEFAULT_AREA_CODETwilio
StripeBilling and subscriptionsSTRIPE_SECRET_KEY, STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_STARTER, STRIPE_PRICE_PRO, STRIPE_PRICE_ENTERPRISE, STRIPE_TRIAL_DAYSStripe
Plans and costsQuota limits and cost accountingPLAN_*_CALLS, PLAN_*_PRICE, COST_VAPI_PER_MINUTE_PENCE, COST_TWILIO_*Plan Limits, API Costs
OutreachOutbound calling pacingOUTREACH_MAX_CALLS_PER_DAY_DEFAULT, OUTREACH_RETRY_HOURS, OUTREACH_MAX_RETRIES, OUTBOUND_CALLER_IDOutreach
Lead sourcesLead scraping providersOUTSCRAPER_API_KEY, APOLLO_API_KEY, GOOGLE_PLACES_API_KEYLead Sources
BrandingSite chrome and demo widget copyBRAND_LOGO_SVG, BRAND_FAVICON_SVG, BRAND_SITE_NAME, BRAND_ACCENT_COLOR, DEMO_*, COMPANIES_HOUSE_NUMBER, ICO_REGISTRATION, WHATSAPP_NUMBERBranding
SerpAPISERP position tracking for target keywordsSERPAPI_KEY (from serpapi.com)SEO
AhrefsBacklink and domain authority dataAHREFS_API_TOKEN (from ahrefs.com/api)SEO
Google Search ConsoleProperty verification and search performanceGOOGLE_SEARCH_CONSOLE_PROPERTY, GOOGLE_SITE_VERIFICATION_TOKENSEO
Bing Webmaster ToolsBing index coverage and keyword dataBING_WEBMASTER_API_KEY, BING_SITE_VERIFICATION_TOKENSEO

6. Known Residual Issues

  • None observed during this pass. All PROD smoke-tested routes returned HTTP 200.

7. Audit Findings and Fixes Applied

  • Enumerated every route in public/index.php (103 route registrations) and cross-referenced against the controllers in src/Controllers/.
  • Smoke tested 30 PROD routes (public, auth, industry landing, dashboard, and admin entry points). Every route returned HTTP 200.
  • Reviewed Settings::getDefinitions() to build the consolidated API key and service table.
  • No code defects were found that required a source fix during this pass.
  • SEO/AEO/LLM admin system built and deployed (migration 035, 7 new tables, 22 new admin routes, schema.org JSON-LD on every public page, llms.txt standard file, LLM bot allow list in robots.txt).