Bodholdt Tickets
The support desk your team actually wants to open
Get Bodholdt Tickets
License-aware tickets, a Claude-BYOK AI co-pilot, and a desk that plays like a game. A generous free tier with up to 3 agents, unlimited tickets, and AI included. Download it free.
Free
Free forever:
- Up to 3 agents
- Unlimited tickets
- Front-end form, Gutenberg block, and customer portal
- Custom fields, private notes, and canned replies
- CSAT ratings plus gamification (XP, levels, leaderboard)
- Claude-BYOK AI drafting (bring your own Claude key)
- Embeddable widget and basic reports
Solo
Everything in Free, plus:
- 1 site
- Unlimited agents
- Email-to-ticket piping
- Departments and routing
- Advanced per-agent and per-department reporting
- Licensing-aware customer context
- Email support while active
Foundry
Everything in Studio, plus:
- 25 sites
- Priority email support while active
See full feature comparison →
| Feature | Free | Solo | Studio | Foundry |
|---|---|---|---|---|
| Sites | 1 | 1 | 5 | 25 |
| Agents | Up to 3 | Unlimited | Unlimited | Unlimited |
| Unlimited tickets | ✓ | ✓ | ✓ | ✓ |
| Claude-BYOK AI drafting | ✓ | ✓ | ✓ | ✓ |
| Canned replies, CSAT, gamification, custom fields | ✓ | ✓ | ✓ | ✓ |
| Email-to-ticket piping | — | ✓ | ✓ | ✓ |
| Departments and routing | — | ✓ | ✓ | ✓ |
| Advanced per-agent and per-department reporting | — | ✓ | ✓ | ✓ |
| Licensing-aware customer context | — | ✓ | ✓ | ✓ |
| Support credits (Lifetime plans only) | — | 15 | 50 | 150 |
Support credits apply to one-time (Lifetime) plans only. Annual and monthly plans include email support while active.
Start free with the Lite edition
A full support desk, free forever: up to 3 agents, unlimited tickets, and the Claude-BYOK AI co-pilot. Upgrade to Pro for email-to-ticket piping, departments and routing, and advanced reporting.
Get Bodholdt Tickets (free)
The free version is yours. No card, no license key. Enter your email and we will send you a download link.
Enter the 6-digit code sent to your email:
Didn't receive it? Check your spam folder, or click Resend Code.
Real screens from Bodholdt Tickets
These are real admin screens, not mockups. Click any one to view it full size.
License-aware support tickets, an AI co-pilot that drafts replies, and a workflow that plays like a game. You get a front-end agent support desk, four customer channels (email, web form, portal, and an embeddable widget), departments and routing, and reporting, all self-hosted on WordPress.
Front-end Agent Support Desk (SPA)
AI co-pilot that drafts replies with your own Claude key
Four channels: email, form, portal, and widget
License-aware customer panel
Departments and routing
Gamification with XP, levels, and a leaderboard
Reports on volume, response times, and CSAT
Categories and canned replies
- Front-end Agent Support Desk (SPA)
- AI co-pilot that drafts replies with your own Claude key
- Four channels: email, form, portal, and widget
- License-aware customer panel
- Departments and routing
- Gamification with XP, levels, and a leaderboard
- Reports on volume, response times, and CSAT
- Categories and canned replies
- Free (wp.org) edition: reworded the customer portal's "Linked emails" copy so it reads as consolidating your tickets across email addresses (no licensing/paid-support phrasing), and finished the wp.org readme (screenshots + a clean free-launch changelog). No behavior change.
- Code quality: annotate the custom-table database queries (the plugin owns its own `wp_bt_*` tables, which have no core API) with justified `phpcs:ignore` markers, add `wp_unslash()` to the remaining admin save paths, and trim the short description — clears the WordPress.org Plugin Check warnings. No behavior change.
- Free (wp.org) build: regenerate the translation template for the free slug/text domain so the shipped `.pot` matches `bodholdt-support-tickets` (no stale licensing strings).
- Hardening: escape upgrade-nag output in the agents/plan admin views and add `wp_unslash()` + key sanitization to the Settings and Appearance save paths.
- Fix: pass bound query parameters to `$wpdb->prepare()` via argument spread in the ticket-queue query so replacement counts match (no behavior change).
- Free (wp.org) build: the slug rename now also rewrites `assets/admin.css`, so the free edition's admin styling is correctly scoped and no longer renders unstyled.
- Desk SPA: surface SLA state in the agent desk — an "Overdue" / "At risk" badge on queue rows, an SLA quick-filter (Overdue / At risk) in the inbox, and first-response / resolution due times with their on-track / at-risk / overdue state in the ticket detail panel. (Pro; the desk shows nothing SLA-related on the free plan.)
- New (Pro): SLA management + automation. Set first-response and resolution targets per priority (Urgent / High / Normal / Low), define your business hours (working days, open/close, timezone, or count 24/7), and every new ticket is stamped with due dates. The desk flags tickets that are *at risk* or *breached*, and an hourly check emails the assigned agent and admin the moment a target is missed.
- New (Pro): round-robin auto-assignment. Tickets routed to a department are automatically handed to the next agent in that department.
- SLA due dates recompute automatically when a ticket's priority changes. (The basic SLA *report* remains available on the free plan.)
- Rebuilt the Agent Support Desk SPA and refined the in-admin help and upgrade prompts.
- Packaging: the WordPress.org free build now ships a self-contained free edition (Pro-only code physically stripped) and is available as a self-served Lite download.
- New, more generous Free + a clearer Pro. The plan model is now free-vs-Pro: paid tiers differ only by how many sites they cover. Free now includes up to 3 agents, unlimited tickets, the support form & block, the customer portal, custom fields, private notes, canned replies, CSAT, gamification, categories, the Claude (bring-your-own-key) AI co-pilot, the embeddable widget, and basic/aggregate reports.
- Pro (any paid plan) adds: unlimited agents, inbound email-to-ticket piping, departments & routing, advanced per-agent/per-department reporting, and license-aware customer context in the desk.
- Inbound email intake and the licensing-aware customer context are now gated to paid plans; the free plan is capped at 3 agent seats (upgrade to any paid plan for unlimited agents).
- In-app bug reports (authenticated channel). A new `bt/v1/app-report` endpoint lets a companion mobile app file tickets on behalf of the logged-in user — no typed email, identity comes from the authenticated account. Reports land in your desk on the new `app` channel and reply by email like any other ticket.
- Beta-tester allowlist. Submission is gated on a per-user Beta tester capability, toggled from the user-edit screen (Users → edit a user → "Bodholdt Speed Test — Beta"). Only allowlisted accounts can file reports. The `app` channel bypasses the free-tier cap and the paid-support gate, so it stays fully decoupled from licensing.
- Agent email alerts. Get an email the moment a customer opens a ticket or replies — so your team is notified even when nobody has the Support Desk open. A reliable fallback to the desk's browser/desktop alerts (which require each agent to opt in per device).
- Turn it on under Tickets → Agent notifications: choose whether to alert on new tickets, new replies, or both; send to all agents or only the assigned agent/department; add extra recipients (a shared inbox or on-call alias); and send a test alert to confirm delivery. Off by default.
- Appearance preview fix. The settings-page brand preview now faithfully reflects light/dark mode (the admin dark styling was bleeding into the live preview's input fields). Visual-only.
- White-label your customer-facing surfaces. The contact form, customer portal, and floating widget now adopt *your* brand instead of Bodholdt's — driven by a single accent colour with clean, neutral defaults. Semantic ticket-status colours keep their meaning.
- New Appearance settings. Pick a brand colour, light/dark/auto mode, corner style, and font from the Tickets settings page, with a real live preview. Applies across the form, portal, and widget at once. (The agent Support Desk is intentionally left on its own dark theme.)
- Refreshed admin styling. The Tickets settings screen now uses the shared Bodholdt Labs dark admin design system — clearer headings and labels, readable inputs and tables, a unified button style, and consistent focus states. No functional change.
- Choose your support model. New setting runs lifetime support as non-expiring credits (tokens), a fixed time window, or both.
- Build your own credit packs. Define any number of packs (credits + price + your own Stripe Payment Link) instead of a fixed single/3-pack.
- Set how many non-expiring credits each lifetime license grants, by site tier.
- See your support credits. The My Tickets portal now lists your available support credits with a per-product breakdown, so you always know what you have and which product each credit applies to.
- Renamed to Bodholdt Tickets. The product is now "Bodholdt Tickets" and the wp-admin menu reads "Tickets." No functional changes - your license, data, and settings are untouched.
- Product-scoped support credits. Lifetime support credits are now redeemable only for support on the product they were purchased with; manually-granted/comped credits remain universal.
- Custom ticket fields. Add your own fields (text, dropdown, checkbox, email, number, and more) to the support form and the new block - values arrive attached to the ticket.
- Gutenberg support-form block. Drop the support form on any page with a block, alongside the existing [bodholdt_support_form] shortcode.
- Lifetime support credits. Lifetime license purchases now automatically receive non-expiring support credits, ADDED to any credits you already have (never overwritten).
- More desk power. File attachments on tickets (customer + agent), a canned/saved-replies picker, one-click ticket deletion, a personal "My stats" tab, and a fully responsive Support Desk.
- Accessibility, i18n, and reliability improvements throughout.
- Brand consolidation: author byline + the License page's support email now use Bodholdt Labs / bodholdtlabs.com.
- Licensing + plans. Bodholdt Tickets is now a licensed product with a Free tier and paid Solo/Studio/Foundry plans. Enter your license key under Tickets → License to unlock your plan and receive automatic updates. The Free tier includes 1 agent and 25 tickets/month across email, the web form, and the customer portal. Solo adds the AI co-pilot, the embeddable cross-site widget, categories, gamification, and aggregate reports with CSV. Studio adds departments & routing plus the per-agent and per-department report breakdowns. Foundry removes all limits. Your desk keeps working if a license lapses — it falls back to Free-tier limits after a short grace period, never losing your data. (No database changes.)
- Reporting & analytics. A new supervisor-only Reports view in the Support Desk surfaces what the desk already tracks: volume over time (created vs resolved + open backlog, sliced by channel, category, and department), speed & SLA (first-response and resolution times with median/avg/p90 and % within a target you choose), CSAT (average, the 1–5 spread, a daily trend, and breakdowns by agent and department), per-agent workload & outcomes, and the category/channel/tag mix. Pick a date range (7/30/90 days, this month, or custom) and export any report to CSV. Agents can opt out of the peer leaderboard from their stats panel (supervisors still see everyone in reports). Computed live from your data — no setup required. (Adds reporting indexes — applied automatically on update.)
- Departments & routing. Group your agents into departments (Sales, Support, Billing…), then map each category to a department so incoming tickets auto-route to the right team — set it all up under Tickets → Departments & routing, and tick which departments each agent belongs to. In the Support Desk, the department shows on every ticket, you can filter the queue by department (or “My departments”), and re-route a ticket by hand from the ticket header. Built to run real multi-team support out of the box; solo operators can simply leave it empty. (Adds an `assigned_group` column — applied automatically on update.)
- Categories. Define your own ticket categories (e.g. one per product, or Billing / General) under Ticketing settings; customers then pick “What’s this about?” on the front-end form and the embeddable widget, and you can filter the Support Desk queue by category. The category shows on the ticket and in the queue. (Adds a `category` column — applied automatically on update.)
- Onboarding — a new “Channels & setup” panel at the top of the Ticketing admin page. It shows a setup checklist (do you have a form page, a portal page, agents, email intake, the AI co-pilot?) and spells out every way customers can reach you — the form + portal shortcodes (with “view your page” links) and pointers to the widget + email — plus a one-click “Create the support pages for me” button. Makes it obvious how to put ticket entry on the front end.
- Phase 4 (polish) — customer-facing pass on the submission form, customer portal, and embeddable widget. Delightful success states (an animated checkmark + warm copy) when a request is sent or a sign-in link is on its way; the widget now has a friendly chat-bubble launcher, properly labeled fields, focus-on-open, and closes on Escape; consistent look across all three. Accessibility + micro-interaction polish; no functional change to ticket handling.
- Phase 4 (packaging) — distribution-ready build. Adds a `build.sh` that produces a clean customer/WordPress.org ZIP (ships only the compiled Support Desk bundle, never the React source or build tooling), directory-index hardening (`index.php` silence files), a translation template, and a polished readme. No behavior change for existing installs.
- Phase 3 — gamification. The desk now plays like a game: agents earn XP for first responses, resolutions, and good CSAT; XP drives levels (with a progress bar), daily streaks, an all-time rank, a weekly + all-time leaderboard, and unlockable achievements. A stats chip sits in the Support Desk top bar; clicking it opens a leaderboard + achievements panel, and a satisfying “+XP” toast pops whenever you earn points. (Adds a bt_xp table — created automatically on update.)
- Phase 2.3 — embeddable cross-site widget. Paste a small snippet on ANY external website and a floating “Contact support” button appears; visitors file a ticket without leaving the page. The widget UI is isolated in a shadow DOM (host-site CSS can’t interfere), and submissions post cross-origin to a token-gated endpoint with an optional origin allowlist + honeypot + rate limit, landing on the “widget” channel. Configure + copy the snippet under Tickets → Embeddable widget.
- Phase 2.2 — customer portal. Add the [bodholdt_portal] shortcode to a page and customers can view, track, and reply to their own tickets. Works for logged-in WordPress users (uses their account email) and for customers without an account via a passwordless magic-link sign-in (enter email → receive a secure, single-use link → a 7-day session). Every view is strictly scoped to the signed-in customer’s email; internal notes and AI drafts are never shown. Magic-link requests are honeypot- and rate-limited and never reveal whether an email exists.
- Phase 2.1 — front-end submission form. Drop the [bodholdt_support_form] shortcode on any page and customers can file a ticket from your site (pre-filled for logged-in users). New tickets land in the desk on the “form” channel and flow into the same pipeline as email (auto-triage/draft if the co-pilot is on). Posts to a public REST endpoint protected by a honeypot + per-IP rate limit + validation; a clean, self-contained card that fits any theme; on-screen confirmation with the ticket reference.
- Phase 1.3 — thread summarize. A “✨ Summarize” button in the ticket header gives agents a one-click internal TL;DR for picking up or handing off a conversation: what the customer needs, what’s happened, current status, and the recommended next step. Includes internal notes for full context; shown in a dismissible banner above the thread; never sent to the customer.
- Phase 1.2 — the self-organizing desk. With Auto-pilot on (AI Co-pilot settings), every new ticket is analyzed by Claude the moment it arrives — in one call it sets the priority, adds topic tags, and pre-writes a reply that's waiting in the composer behind the “review before sending” ribbon when the agent opens the ticket. Tags show in the ticket header. Drafts are kept out of the visible conversation, generated at most once per ticket, and discarded once the agent sends. Analysis runs on a background job so inbound email stays fast; nothing is ever sent without a human.
- Phase 1 — the AI co-pilot (BYOK Claude). Agents click “Draft with AI” in the Support Desk and Claude drafts a reply using the ticket thread, the customer’s license context, and your brand voice + knowledge base. Drafts land in the composer under a “review & edit before sending” ribbon — a human always reviews and sends; nothing goes out automatically. Bring your own Anthropic API key (stored encrypted at rest); pick the model (defaults to Claude Opus 4.7); set brand voice + a knowledge base in Tickets → AI Co-pilot, with a one-click connection test. The stable system prompt (voice + KB) is prompt-cached for speed + cost across drafts.
- Phase 0.4 — email channel + configuration console (closes Phase 0). Outbound: agent replies email the customer via the site’s mail/SMTP, with a [#BT…] subject tag so their reply threads back. Inbound: a token-secured webhook endpoint (no IMAP needed) that any inbound-parse service (Postmark/Mailgun/SendGrid) or server forward can POST email to — new mail opens a ticket, replies thread by the subject tag, and quoted reply tails are trimmed. Console: a wp-admin page to set the desk name, from-name/email, enable in/out email, view + rotate the inbound webhook URL, and grant/revoke agent access. The core engine (license-aware tickets + REST API + Agent Support Desk + email + admin) is now complete; next up is the AI co-pilot.
- Phase 0.3 — the Agent Support Desk: a chrome-less, full-page React app at /support-desk/ (agent-gated) where agents work tickets. Tier-colored, triage-sorted queue (Open/Mine/All/Resolved + search); a conversation thread with distinct customer / agent / internal-note styling; a reply composer (with internal notes + ⌘↵ to send); assign + status + one-click Resolve; and a license-aware customer panel showing the customer's Bodholdt Licensing tier, active licenses, sites, and renewal inline. Built with React + Vite (bundle in assets/desk/). Cyberpunk-dark, matches the Labs catalog.
- Phase 0.2 — the `bt/v1` REST API (tickets list/get/create/reply, status, assign, csat, plus /me and /agents; all gated on the bt_agent capability) and the license-aware customer lookup that pulls a customer's Bodholdt Licensing tier, products, active licenses, and nearest expiry into every ticket. This is the spine the Agent Support Desk front-end (0.3) will talk to.
- Phase 0.1 — initial scaffold: plugin bootstrap, database schema (tickets, messages, attachments, tags, canned replies, activity log), and capabilities (bt_agent / bt_supervisor / bt_admin). Not yet feature-complete; activation creates the schema and a status page in the admin.