# Bespoken

A Craft CMS plugin that brings high-quality text-to-speech narration into the control panel using the ElevenLabs API. With the click of a button, content becomes listenable — either through a site-wide podcast feed or by embedding audio directly into pages.

-   **Role:** Solo developer — plugin architecture, API integration, web component
-   **Stack:** PHP, Craft CMS, ElevenLabs API, Web Components, JavaScript
-   **Links:** [Plugin Store](https://plugins.craftcms.com/bespoken?craft5) · [Code](https://github.com/johnfmorton/craft-bespoken)

## What it does

Bespoken connects Craft CMS to the ElevenLabs text-to-speech API. Content editors can generate high-quality audio narration for any entry from within the control panel. The plugin supports two delivery methods: a podcast feed that covers the entire site, and per-page audio embedding for inline playback.

I use Bespoken on my own site, [SuperGeekery](https://supergeekery.com), where it reads posts using a clone of my own voice.

## Companion project: Bespoken Audio Player

For sites that embed audio directly into pages, I built the [Bespoken Audio Player](https://github.com/johnfmorton/bespoken-audio-player) — a customizable, accessible web component that handles playback for any number of audio files. It’s designed to drop into any project, not just Craft CMS sites. You can see it in action on the [demo page](https://johnfmorton.github.io/bespoken-audio-player/).

## Why it matters

Bespoken solves a real content accessibility problem: making written content available as audio without manual recording or editing. The plugin handles the entire workflow — generation, storage, delivery — so content teams don’t need to leave the CMS.

![](https://static.supergeekery.com/jfm-site-assets/_portfolio2100w/bespoken-in-craft-cms-store.png)



---

[View All Work](/work)
