Skip to main content
Plugins Docs About Support Pricing My Account Browse Plugins
Support

Bodholdt Tickets

The support desk your team actually wants to open

v1.6.20
PHP 8.0+
WP 6.0+
GPL-licensed
14-day money-back

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

$0

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
Get it free →

Solo

$39.00 /yr

Paying annually saves 35% against twelve monthly payments.

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, when you also run Bodholdt Licensing on the same site
  • Email support from the developer, for as long as your license is active
Buy Solo →
Most popular

Studio

$79.00 /yr

Paying annually saves 27% against twelve monthly payments.

Everything in Solo, plus:

  • 5 sites
Buy Studio →

Foundry

$149.00 /yr

Paying annually saves 17% against twelve monthly payments.

Everything in Studio, plus:

  • 25 sites
Buy Foundry →
See full feature comparison →
Feature FreeSoloStudioFoundry
Licensed sites No license needed1525
Agents Up to 3UnlimitedUnlimitedUnlimited
Unlimited tickets IncludedIncludedIncludedIncluded
Claude-BYOK AI drafting IncludedIncludedIncludedIncluded
Canned replies, CSAT, gamification, custom fields IncludedIncludedIncludedIncluded
Email-to-ticket piping Not includedIncludedIncludedIncluded
Departments and routing Not includedIncludedIncludedIncluded
Advanced per-agent and per-department reporting Not includedIncludedIncludedIncluded
Licensing-aware customer context (needs Bodholdt Licensing) Not includedIncludedIncludedIncluded

Every paid license includes email support from the developer while the license is active. A one-time (Lifetime) license has no renewal date, so its support does not stop at one. Bug reports, pre-sales and billing questions are always free.

Try it free

Start with the free edition

A full support desk, free forever: up to 3 agents, unlimited tickets, and the Claude-BYOK AI co-pilot. Any paid plan (Solo, Studio, or Foundry) adds email-to-ticket piping, departments and routing, and advanced reporting.

The free edition of Bodholdt Tickets is free and GPL. No email, no account, no license key.

Download Bodholdt Tickets

Optional. The download above never asks for an email, and this does not change that. One short message per release, and you can leave at any time.

Real screens from Bodholdt Tickets

These are real admin screens, not mockups. Click any one to view it full size.

A unified inbox you can filter by Open, Mine, All or Resolved, and by SLA. Every row carries the customer's plan, the category and the department, and an overdue badge appears only when a ticket really is overdue. Open one for the whole conversation, internal notes, and what that customer owns.
A unified inbox you can filter by Open, Mine, All or Resolved, and by SLA. Every row carries the customer's plan, the category and the department, and an overdue badge appears only when a ticket really is overdue. Open one for the whole conversation, internal notes, and what that customer owns.
Track ticket volume over time, break it down by channel, category or department, and measure first-response and resolution against targets you set yourself. Departments and per-agent reporting come with any paid plan.
Track ticket volume over time, break it down by channel, category or department, and measure first-response and resolution against targets you set yourself. Departments and per-agent reporting come with any paid plan.
Every way a customer can reach you, in one place: the front-end form and customer-portal shortcodes, the embeddable widget, and turning inbound email into tickets. Email intake comes with any paid plan.
Every way a customer can reach you, in one place: the front-end form and customer-portal shortcodes, the embeddable widget, and turning inbound email into tickets. Email intake comes with any paid plan.
The setup checklist says what is still missing and links straight to the fix, so a new desk is never a guessing game. This is a desk part way through setup, not a finished one.
The setup checklist says what is still missing and links straight to the fix, so a new desk is never a guessing game. This is a desk part way through setup, not a finished one.
An optional arcade gives the desk a rank and an XP bar as you work through tickets. It is free, and it stays hidden until you turn it on.
An optional arcade gives the desk a rank and an XP bar as you work through tickets. It is free, and it stays hidden until you turn it on.

An AI co-pilot that drafts replies, a workflow that plays like a game, and support tickets that can read your customers' licences when you run Bodholdt Licensing alongside it. 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

Response Ops arcade with XP and ranks, plus Clutch Time bonuses for beating the SLA buzzer

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
  • Response Ops arcade with XP and ranks, plus Clutch Time bonuses for beating the SLA buzzer
  • Reports on volume, response times, and CSAT
  • Categories and canned replies
Version
1.6.20
PHP Required
8.0+
WordPress
6.0+
Setup
Activate and go
License
Commercial GPL
v1.6.20 · Sep 5, 2026
  • The Manage account link in the license screen now points at the address that answers directly, instead of one that redirects first.
v1.6.19 · Sep 5, 2026
  • The customer portal page now tells browsers and proxies not to store it. It carried no caching instruction at all, while the account pages beside it did, so a signed-in customer's ticket list and their session token could be kept by a shared browser and shown to whoever opened the page next. A page that merely quotes the shortcode in documentation is left alone, because it is not an account page.
v1.6.18 · Sep 5, 2026
  • You can now use any Claude model your key has access to, instead of only the three this plugin was built with. The Model setting was a fixed dropdown, and the save handler refused anything that was not one of those three, so when Anthropic released something newer there was no way to select it: the field quietly fell back to the default and the plugin treated its own age as your mistake. It is now a text field with the same three offered as suggestions, and it accepts any model id. Use Test connection after changing it.
  • The model id also used to be written down in seven places across three files, which is how a list like that ends up half updated. It is written down once now, and the shipped suggestions are unchanged in this release.
v1.6.17 · Sep 5, 2026
  • An email with no plain-text part became a blank ticket. Inbound email-to-ticket read only the plain-text body a message carries, and mail sent as HTML alone has none, so the ticket was created with nothing in it while the endpoint reported success. The agent alert then said "(no message body)" and the customer receipt quoted nothing back, which reads at both ends like the desk lost the message. The HTML part is now used when there is no text part, converted to readable text so a message looks the same however it was sent.
v1.6.16 · Sep 4, 2026
  • Your account now says what your support actually is. A verified customer sees one plain line about email support whether or not the paid support model is switched on, instead of a support panel that simply vanished when it was off.
  • The support-status endpoint no longer hands its checkout links to anonymous callers. The buy details were assembled one line above the check that decides whether the caller is allowed to see them, so any unauthenticated request could read them. They are assembled after that check now.
  • A lifetime grant can no longer exceed the ceiling that was already applied to it. This plugin was handed a capped number by Bodholdt Licensing and recomputed its own from scratch, discarding the cap, so a 127-site lifetime tier could issue 762 non-expiring credits. It now takes whichever is smaller. Switching paid support off also stops the grant outright, which it did not do before.
  • Asking to grant zero credits now grants zero. It granted one, because the count was clamped to a minimum of one before it was used.
  • Wording only, on our own store: the customer portal no longer offers to manage support credits. The credit feature itself is untouched and is still yours to switch on for your own desk.
v1.6.15 · Aug 28, 2026
  • Tested with WordPress 7.1.
  • The arcade panel now filters the markup it draws through an allowlist instead of printing it as given. Nothing about how it looks or behaves changes, and the progress bar keeps the labels a screen reader reads out. The small script behind the milestone popups was tightened the same way.
v1.6.14 · Aug 26, 2026
  • Ticket attachments are now encrypted on disk. Attachments live in your uploads folder, and whether that folder can be read directly over the web is decided by your web server, not by this plugin: Apache and LiteSpeed honour the rule the plugin writes, nginx and Caddy do not. Encrypting the files means a direct request returns unreadable data, so the support desk, which checks whether you are an agent or the customer who owns the ticket, is the only way to the file again. Existing attachments are converted quietly in the background, and files from before this release keep working either way. A new entry under Tools, Site Health tells you whether your server exposes the folder.
v1.6.13 · Aug 26, 2026
  • Attachment filenames now come from a cryptographic random source. They were generated with a WordPress helper that other plugins are allowed to filter, which meant another plugin could decide how unguessable your attachment names were. Stored files are also written with tighter permissions.
v1.6.12 · Aug 26, 2026
  • Plainer writing. A few messages used long dashes where a full stop or a separator reads more easily. Nothing functional changed.
v1.6.11 · Aug 25, 2026
  • The free contact widget no longer offers the categories that cost a support credit. If you have turned the paid support model on, a question about one of your products was a tracked ticket on the Support page and a free message one click away on the same page. The widget now asks Tickets which categories are credited and simply leaves those out, so each door offers what it is for. Nothing changes if you have not turned the paid model on, because then nothing is credited.
v1.6.10 · Aug 25, 2026
  • There is now a plain list of every ticket inside WordPress admin. The Support Desk is an app, and when an app fails it takes the whole queue with it. That is exactly what happened when the desk stopped loading on sites using Plain permalinks: for as long as it lasted there was no other way to see a single ticket. Under Tickets you will now find All Tickets, a straightforward table of every ticket with its status, the customer and their email address, which filters, searches and pages. WordPress builds it directly, with no JavaScript of its own, so it keeps working when the desk does not and it works with JavaScript switched off. It is read only on purpose. It is there so you can see the queue and answer people from your own mail, not to become a second desk. Your agents can open it too, not just administrators.
  • The desk no longer names the wrong plan beside a locked report. Per-agent and per-department reporting unlocks on the first paid plan, but the reports screen said Studio: in the badge, on the button, and in three separate sentences. Anyone who saw those sections was being pointed at a plan more expensive than the feature actually needs. The plan name now comes from the same place as the check that unlocks the feature, so the two cannot drift apart again.
v1.6.9 · Aug 25, 2026
  • Everything the desk and the forms say can now be translated. The plugin's JavaScript asks WordPress for translations exactly as its PHP does, but the translation catalog was built by scanning PHP only, so not one of those strings was ever offered to a translator. A fully translated site still showed the Support Desk, the customer portal, the support form and the widget in English, with no way to tell why. The catalog now includes them: 331 more strings, the desk among them. Nothing changed in the code that shows them, so an untranslated site looks exactly as it did.
v1.6.8 · Aug 25, 2026
  • The support paywall no longer throws away what you typed. A customer who filled in the form, attached a file, and pressed Send watched the whole message vanish and be replaced by a request for payment. The form now stays exactly where it was, the buy panel appears alongside it, and "Back to your message" returns everything untouched. The Send button is restored too, instead of staying stuck on "Sending...".
  • The paywall stopped claiming something that was not true. It said an active subscription or an in-window license includes support. Under the credits model the in-window allowance is deliberately not used, so half that sentence was dead on arrival for the stores most likely to show it. It now states only what is true wherever it appears: the request needs one support credit, and the credit opens a tracked, prioritized ticket.
  • "New request" in the customer portal goes to the support form again. The portal looked for any published page containing the shortcode and took whatever the database returned first, which could be a documentation page that merely quotes it. The plugin now records the pages it creates and prefers them, and the fallback lookup is ordered instead of arbitrary.
  • The Support model help text now matches the code, including that the in-window lifetime allowance applies to the window model and not to credits.
v1.6.7 · Aug 24, 2026
  • The arcade is fully translatable now, and its toasts can be dismissed. Several labels the arcade shows (the dismiss button, the "Nice" message on a plain points toast, and the level badge) stayed in English no matter what language your site runs in, because the shared arcade code never passed them through for translation. They now translate like everything else, the level number is formatted for your locale, and every celebration has a close button. Toasts also pause while you hover or focus them, and skip their timer entirely if you have asked your system to reduce motion.
  • A site that cannot create the arcade tables now keeps trying. On a host where the database user is not allowed to create tables, the plugin recorded the arcade as installed anyway and never tried again, so the arcade stayed silently broken forever. It now confirms the tables really exist before recording success, and retries later if they do not.
v1.6.6 · Aug 24, 2026
  • The arcade now has an off switch, and it covers the Support Desk too. Since 1.6.5 the arcade has been off by default, but there was no control for it anywhere, so there was no way to turn it back on. There is now one under Appearance, alongside confetti and sound. It also does more than it used to: the Support Desk kept showing agents the XP chip, the leaderboard, and a points toast on every reply no matter what, because only the WordPress admin scoreboard honored the switch. One control now covers both. If you want the arcade on your desk, turn it on under Appearance.
Show the full release history (49 older releases)
v1.6.5 · Aug 24, 2026
  • The arcade (XP, ranks, HUD, confetti) is now off by default. Turn it on any time under the plugin's Arcade settings. Nothing else changes.
v1.6.4
  • A new ticket now emails somebody. Agent email alerts are on by default, so the team hears about a new ticket or a customer reply even when nobody has the Support Desk open. Fresh installs used to ship with alerts off, which meant a complaint could sit unseen for days. Sites with saved Tickets settings keep them exactly as they are; the new default applies where the settings were never saved.
  • Customers get a receipt. When a customer opens a ticket through the form, the widget, email, or the portal, they now receive one confirmation email with their ticket reference and a copy of their message, so they have a written record and something to reply to. You can turn this off under Tickets, General, "Send customers a receipt."
  • Receipts cannot start mail loops. The receipt declares itself machine-sent (RFC 3834), is never sent to bounce or no-reply addresses, skips inbound mail that identifies itself as automatic, and is capped at two per address per hour. Bounce handlers and other helpdesks cannot ping-pong with it.
  • Alerts reach a one-person shop. On a site where the support address is also the owner's own address, alerts were silently skipped by a safeguard that only matters when inbound email piping is on. The safeguard now applies only in that case, so the owner actually gets the alert.
v1.6.3
  • The Support Desk now works on default permalinks. On a fresh WordPress site set to Plain permalinks, the agent Support Desk could not load its ticket queue: it showed an empty inbox with a "No route was found" error while real tickets waited unseen. The desk now builds its addresses correctly under every permalink setting, so the queue loads and agents can answer tickets straight away.
  • A clear heads-up when permalinks need changing. If your site is on Plain permalinks, administrators now see one dismissible notice explaining that setting Permalinks to Post name makes the Support Desk and the support pages work. This is the same setting that lets the /support/ and /my-tickets/ pages open instead of your blog.
v1.6.2
  • American spellings throughout. The plugin and this changelog used British spellings in places (licence, colour, behaviour, cancelled). They now match the rest of Bodholdt Labs. Wording only, nothing behaves differently.
  • Housekeeping: the archive no longer carries the internal markers used to build the free edition.
v1.6.1 · Aug 15, 2026
  • Safer licensed updates. The paid updater sends a license key only to the exact configured HTTPS licensing origin and the Bodholdt Tickets download route. It rejects lookalike hosts, unexpected ports, embedded credentials, insecure URLs, and redirects, so a redirect or altered update response cannot forward the key elsewhere.
  • Complete privacy requests. Export now includes every ticket field and profile snapshot, private and AI-authored messages with their AI metadata, activity, tags, attachment metadata, paid-support records, and web-push registration details without exposing push authentication secrets. Erase removes message content, AI metadata, activity, attachments, tags, customer snapshots, and the requester's push registrations. Financial support-credit rows are minimized but retained with an explicit retention notice.
  • Compliance hold support. When the site-wide `BODHOLDT_NEW_SALES_HOLD` flag is active, new support-credit purchase links are suppressed while existing support entitlements and completed purchase capture continue to work.
v1.6.0
  • Times are correct everywhere, on every timezone. The desk, the customer portal, and the widget were reading stored times as UTC even though they are stored in your site's local time, so every date and time was off by your timezone offset on any site not set to UTC. Every timestamp the plugin sends to a browser now carries an explicit offset and is rendered in the reader's own locale.
  • Full translation support. Every user-visible string in the agent Support Desk, the customer portal, the support form, the widget, and the admin screens is now translatable, plurals go through the proper plural forms rather than "1 items", and dates and numbers are formatted for the reader's locale. The translation template ships up to date.
  • Right-to-left languages. Arabic, Hebrew, Farsi, and other RTL languages lay out correctly across the admin screens and every customer-facing surface. This is done with logical CSS properties, so there is no separate stylesheet to keep in sync and left-to-right layout is unchanged.
  • Accessibility (WCAG 2.1 AA). Fixed measured contrast failures on headings, primary buttons, and focus rings; focus is always clearly visible and never removed without a replacement; dialogs trap focus, close on Escape, and return focus to what opened them; progress, success, and error messages are announced to screen readers; every failure path now says what went wrong instead of a button silently reverting; animation honors the reduced-motion setting.
  • Prices show in your currency. Support-credit packs are formatted on the server in the currency you configure, with the right symbol, separators, and decimal places, including zero-decimal currencies such as JPY. The hard-coded dollar sign is gone. Set your currency under Tickets > Paid Support.
  • Inbound email sender verification. Inbound webhook deliveries are verified before a ticket is opened, so a forged sender address cannot open or reply to a ticket as someone else.
  • Free and paid editions can no longer collide. Activating this plugin on a site already running the free edition (or the reverse) used to end in a raw PHP fatal error, which is exactly what happened the moment a free user bought a license. The second copy to load now stops cleanly and an admin notice names the folder to deactivate. Nothing is lost either way; your data lives in the database.
  • Privacy. The erase tool is now complete in the free edition too, and uninstall removes web-push subscriptions, SLA state, and per-user settings on every site of a multisite network. The shared arcade tables are left alone, because other Bodholdt plugins use them.
  • Attribution. The bundled canvas-confetti library now ships with its ISC copyright and permission notice inline and a full license file alongside, as its license requires. The build fails if either goes missing.
  • Build safety. The free build now fails rather than shipping if its version, readme stable tag, and changelog disagree, if the translation loader is missing, or if publishing the download does not verify. That is what let the free download fall a release behind.
  • Admin console: the Categories example text is now generic instead of internal product names, the copy-me shortcode fields have proper labels, and the settings page carries no decorative glyphs.
v1.5.4
  • Security and reliability hardening. Support credits are now granted only for a genuine credit purchase, and repeated or simultaneous captures can no longer grant extra credits. The GDPR erase tool now fully drains customers with large ticket histories instead of stopping after the first batch. SLA due dates, breach alerts, and clutch bonuses are corrected on sites that are not set to UTC.
  • Privacy and access. Internal agent notes and their attachments can no longer be reached from the customer portal. Portal actions now carry a per session token. The erase tool also clears the customer entered subject line. Uninstall now removes uploaded files, appearance settings, and gamification standings, and cleans every site on a multisite network.
  • Smaller fixes. Rate limiting keys on the real client address, web push endpoints must be https and are validated before use, the stored web push key is encrypted at rest, legacy Office document uploads are accepted, the translation template was refreshed, and a queue search edge case no longer errors.
v1.5.3
  • Privacy tools (GDPR export and erase). The plugin now answers data subject requests through the built-in WordPress privacy tools. Export returns a customer's tickets, messages, attachments, support credits, and verified email links; erase deletes the messages, attachments, and links, anonymizes the ticket history, and anonymizes but retains paid-support purchase records where tax law requires. Suggested privacy-policy text is added to Settings > Privacy. No change to how the support desk works.
v1.5.2
  • Arcade engine polish (shared). XP now counts correctly when several events land at the same moment, the on-screen HUD labels are fully translatable, and celebration cards always stay within the screen. No change to how the support desk works.
v1.5.1
  • The Support Desk now names your rank. The desk's top-bar scoreboard shows your Response Ops rank (Rookie through Desk Legend) next to your level and XP, matching the wp-admin HUD, so your progress reads the same on both surfaces. Your stats panel shows it too.
v1.5.0
  • Response Ops. The support desk becomes something you want to play. A HUD in wp-admin tracks your level, rank, and XP as you work tickets, and your agents get the same on the Support Desk itself, with a celebration when a customer rates a reply or you reach a new rank. Clutch Time rewards a save landed right before an SLA runs out, scaled to how close to the buzzer you get. Trophies unlock as you go. All optional, sound stays off by default, and the desk works exactly as before.
v1.1.0
  • Settings redesign. The one long settings page is now a set of tabs (General, Channels, Notifications, Team, Paid Support, AI Co-pilot, Appearance), each with its own Save, so you configure one thing at a time. Every setting is exactly where it was, just grouped.
  • New setup status card at the top tells you at a glance whether your desk is ready, and links straight to the step that still needs doing.
  • Custom fields and credit packs now have friendly row editors instead of a type-the-syntax text box. The plain text editor is still there under "Edit as text" if you prefer it.
  • The inbound webhook URL and widget embed snippet now hide their secret token until you click Reveal, and both got a one click Copy button.
  • Clearer wording on the email intake and paid support options, with the fine print tucked into "how this works" expanders.
  • The database table list collapses to a single "all tables ready" line unless something needs attention.
  • Support Desk: every emoji is replaced with original brand icons, including the achievement badges. No functional change.
v1.0.0
  • 1.0 is out of beta. Bodholdt Tickets graduates to 1.0 after 30+ shipped releases. No breaking changes; this marks the product as production-stable: the same license-aware desk, AI co-pilot, four intake channels, departments and routing, SLA management, and gamification you've been running.
  • Added an "External services" section to the readme (Anthropic, Web Push, licensing server) and self-hosted the admin font so no admin request is sent to Google Fonts.
  • When a license is inactive, the plugin now shows a "renew to update" note on the Plugins screen instead of a failed update.
v0.33.4
  • 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.
v0.33.3
  • 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, which 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).
v0.33.2
  • 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.
v0.33.1
  • Desk SPA: the agent desk now surfaces SLA state, with 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.)
v0.33.0
  • 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.)
v0.32.1
  • 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.
v0.32.0
  • 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).
v0.31.0
  • 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. There's 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 > the "Bodholdt Speed Test" Beta toggle). 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.
v0.30.0
  • 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.
v0.29.1
  • 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.
v0.29.0
  • 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 color with clean, neutral defaults. Semantic ticket-status colors keep their meaning.
  • New Appearance settings. Pick a brand color, 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.)
v0.28.0
  • Refreshed admin styling. The Tickets settings screen now uses the shared Bodholdt Labs dark admin design system, with clearer headings and labels, readable inputs and tables, a unified button style, and consistent focus states. No functional change.
v0.27.0
  • 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.
v0.26.2
  • 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.
v0.26.1
  • 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.
v0.26.0
  • 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.
v0.25.0
  • 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.
v0.18.1 · May 22, 2026
  • Brand consolidation: author byline + the License page's support email now use Bodholdt Labs / bodholdtlabs.com.
v0.18.0 · May 21, 2026
  • 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.)
v0.17.0 · May 20, 2026
  • 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 to 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, with no setup required. (Adds reporting indexes, applied automatically on update.)
v0.16.0 · May 20, 2026
  • 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.)
v0.15.0 · May 20, 2026
  • 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.)
v0.14.0 · May 20, 2026
  • 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), pointers to the widget + email, and a one-click “Create the support pages for me” button. Makes it obvious how to put ticket entry on the front end.
v0.13.0 · May 20, 2026
  • Phase 4 (polish): a 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.
v0.12.0 · May 20, 2026
  • Phase 4 (packaging): a 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.
v0.11.0 · May 20, 2026
  • 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.)
v0.10.0 · May 20, 2026
  • Phase 2.3: the 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.
v0.9.0 · May 20, 2026
  • Phase 2.2: the 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.
v0.8.0 · May 20, 2026
  • Phase 2.1: the 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.
v0.7.0 · May 20, 2026
  • 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.
v0.6.0 · May 20, 2026
  • 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.
v0.5.0 · May 20, 2026
  • 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.
v0.4.0 · May 20, 2026
  • 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.
v0.3.0 · May 20, 2026
  • 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 + Cmd + Enter 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.
v0.2.0 · May 20, 2026
  • 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.
v0.1.0 · May 20, 2026
  • Phase 0.1: the 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.
After purchase, you'll receive a download link and license key by email. In your WordPress admin, go to Plugins → Add New → Upload Plugin, choose the ZIP you downloaded, click Install, then Activate. The plugin will prompt you for your license key on its settings page. Paste it in and you're live.
Each WordPress installation domain that activates the key counts as one site, including staging and development domains. Clear the key on an old site to release its activation before moving it.
Yes. Contact support before changing plans so we can confirm the price, effective date, and license limits for your order. Your current entitlement remains in place until the change is confirmed.
Yes. Contact support before renewal so we can confirm the effective date and the site limit that will apply. We do not silently deactivate existing sites.
Lifetime means the supported lifetime of the product, not the customer's lifetime. For a normal discontinuation, we aim to give 12 months' notice and a license for the closest equivalent successor. A binding legal, provider-policy, security, or privacy issue may require an earlier stop and a bounded recovery path instead. The current Terms of Service govern the details.
Yes. Open the Stripe billing portal from your account dashboard and cancel there. You keep access until the end of the billing period.
14 days, no questions asked, full refund. Open a ticket on our Support page (bodholdtlabs.com/support) using the email you bought with.
Two reasons: Stripe's per-transaction fees compound when you charge 12 times instead of once, and monthly subs have higher churn risk for us. Annual or lifetime is the better deal if you know you're sticking around.
Solo, Studio, and Foundry all include the same paid features: unlimited agents, email-to-ticket piping, departments and routing, advanced per-agent and per-department reporting, and licensing-aware customer context. They differ only by sites: Solo ($39/yr) covers 1 site, Studio ($79/yr) covers 5 sites, and Foundry ($149/yr) covers 25 sites.
Yes. A generous free edition of Bodholdt Tickets is available now, self-served from bodholdtlabs.com. It runs a real support desk with up to 3 agents, unlimited tickets, and Claude-BYOK AI drafting included, so it doubles as an open-ended trial of the core product. For the paid features on Solo, Studio, and Foundry, the 14-day money-back guarantee is your trial: buy it, run it, and refund within 14 days if it doesn't fit.