Master feature inventory
A full checklist of what a complete Best Deal On install has. For each feature: what it is, how to check it on any copy or install, and its status on bestdealon.app as verified on Nov 3, 2026 (from the code, the live flags and Render deploy records). Statuses: live, built but off, planned, not built. Where something could not be confirmed it says not verified. Settings are explained in settings and feature flags; history is in the changelog.
Public site (bestdealon-v2)
| Feature | What it is | How to check | Status |
|---|---|---|---|
| Home page | Pitch, listings, call button for (727) 632-0002 | GET / returns 200 | live |
| Feature comparison | Best Deal On + Bizinator comparison chart | GET /features/ | live |
| App install guide | Best Deal On Bot early-access install steps | GET /app/ | live |
| Listing pages | One static page per approved business, with JSON and feed | GET /ph/<10 digits>/, profile.json, feed.xml | live |
| Legal pages | Privacy Policy and Terms | LEGAL_PAGES=on; GET /privacy, /terms | live |
| Indexing | Pages indexable, no noindex | INDEXING=on; no X-Robots-Tag header | live |
| Sitemap, feed, llms.txt, robots.txt | Machine-readable site files | GET /sitemap.xml, /feed.xml, /llms.txt, /robots.txt | live |
| Handbook wiki | This handbook, server-rendered | GET /wiki/; pages listed in the sitemap | live (since 11:43 PM EST Nov 3) |
| Health check | Service status | GET /health | live |
Accounts
| Feature | What it is | How to check | Status |
|---|---|---|---|
| Sign up, sign in, sign out | Business and personal accounts | /signup, /login | live |
| Email confirmation | Single-use confirm link by email (Resend) | /confirm?t=… after sign-up; admin setting mail_resend | live |
| Password reset | Emailed reset link | /forgot, /reset | live |
| Sign-in link (magic link) | Passwordless email sign-in | /login/link; admin setting magic_link | built; live state not verified |
| Mail allowlist | Mail only to listed addresses | MAIL_ALLOWLIST (empty = anyone) | live (set) |
| Dashboard | Owner status page with listing and phone-bot status | /account (signed in) | live |
| API tokens | One token per install for the extension / Sync API | /account/tokens | live |
| Device connect | Connect the extension with a short code | /device | live |
Listings and data
| Feature | What it is | How to check | Status |
|---|---|---|---|
| Sync API | Create, read, update listings with ETags and scopes | GET /api/v1/schema; docs/API.md; tests in tests/run.php | live |
| Revisions | Every change stores a new revision | Store::put; admin listing history | live |
| One-off boot hooks | Audited, marker-guarded data fixes run once at deploy | env var named in bin/install.php, removed after use | live (pattern) |
Admin
| Feature | What it is | How to check | Status |
|---|---|---|---|
| Admin area | Overview, users, subscriptions, businesses, claims, activity, audit log, tokens, settings | /admin/… (admin only) | live |
| Edit business | Admin edits listing fields with a saved revision | /admin/businesses → Edit | live |
| Manual verify | Admin marks a phone verified with a reason | Edit business → Mark verified; audit phone.verified | live |
| Audit log | Old → new values for every admin action | /admin/audit | live |
| Delete user | Typed confirm, audited, tokens revoked | /admin/users | live |
Phone verification and claims
| Feature | What it is | How to check | Status |
|---|---|---|---|
| Verify by call | The bot calls the listing's own number with a code (read or key-in) | CALL_VERIFY=on (site) and BDO_VERIFY_CALLS (bot); /api/phone/verify/ | live |
| Phone verify by SMS | Text codes | PHONE_VERIFY_SMS | built but off |
| Inbound claims | Bot offers to start a claim during a call | INBOUND_CLAIM (site), BDO_INBOUND_CLAIM + tenant bdo_claims (bot); /admin/claims | built but off |
| Caller lookup | Signed endpoint that tells the bot if a caller has an account (name, booleans, email label only) | CALLER_LOOKUP=on; signed POST /api/callbot/caller-profile (unsigned → 401) | live |
| Caller recognition | Bot greets known callers by name; never counts as verification | tenant bdo_caller_lookup, returning_caller_greeting | live |
Owner tools
| Feature | What it is | How to check | Status |
|---|---|---|---|
| Web phone-bot dashboard | Calls, messages, subscribers and KB gaps for the owner | /account/phone-bot (signed in) | live |
| Best Deal On Bot extension | Chrome extension v2.3.0: Home, Business, Phone bot, Bots, Backups, Keys, Settings | Load unpacked; Business › Sync with bestdealon | live (early access, not in the Chrome Web Store) |
| Bot backups | Extension backs up Grok Bot bots | Extension › Backups | live (early access) |
| Owner API | Read-only per-business API on the bot | /api/owner/v1/status (and subscribers, calls, kb-gaps, messages, .csv) | live |
Phone bot (callbots-bdo)
| Feature | What it is | How to check | Status |
|---|---|---|---|
| Phone line | Grok Voice answers (727) 632-0002 through Twilio | Call the line; /health shows mode, active_calls | live |
| Knowledge base answers | kb_answer from the Best Deal On KB with citations | kb/bestdealon/; /admin/kb-gaps.csv | live |
| Take a message | Message emailed to the team, no audio | tenant take_message | live |
| Email links and summaries | Caller confirms an email; links sent via Resend | tenant email_enabled; tools set_email_address, send_email | live |
| Transfer to a person | Transfer by SIP REFER, else take a message | tool transfer_to_human | built; per-business routing planned |
| Newsletter | Email sign-up with confirm and unsubscribe | /newsletter/confirm, /unsubscribe on the bot | live |
| Owner briefing call | Daily owner summary call | tenant owner_briefing | built but off (not configured) |
| Texting (SMS) | Texts to callers, STOP/HELP/START | tenant sms_enabled; /twilio/sms on the site | built but off (waits for carrier A2P approval, about 4–24 h after submission) |
| Graceful drain on deploy | Keep live calls through deploys | /health draining | not built on this service |
| Payments | Online billing | Stripe keys | built but off (no keys) |
Onboarding
| Feature | What it is | How to check | Status |
|---|---|---|---|
| Onboarding states | new → phone_verified → calls_connected → sms_pending → sms_live | src/Onboarding.php; dashboard status | live |
| Self-serve phone-bot setup | Owner sets up their own bot without help | — | planned (manual today, see onboarding workflow) |
| Per-business call routing | Each business's own number to its own tenant | — | planned |