Audio coverage console for your WordPress blog archive
See which of your published posts already have a narrated version, pick the ones that do not, and backfill your whole archive in one run.
Build me an app for turning my WordPress blog archive into audio. The job it solves is coverage: I need to see at a glance which of my published posts already have a narrated version and which do not, then backfill the missing ones in bulk without re-doing work I have already paid for.
The main surface is a coverage table listing every published post. Load it from WordPress List Posts with status set to published, paging through every page rather than stopping at the first one, since the whole point is seeing the full archive. Each row shows the post title linking out to the live article, the publish date, its category, the word count, a clear has-audio indicator, and the duration of the audio when one exists. Default the sort to oldest first, because the backlog is what people come here to clear.
Give the table a filter bar: a No audio yet toggle that should be on by default, a category filter, a date range, and a title search. Pass the category, date and status filters into List Posts itself so the server does the narrowing rather than fetching everything and filtering in the browser. One catch worth knowing up front: there is no WordPress operation in the catalog for listing categories, so build the category dropdown from the distinct categories present on the posts you have already loaded rather than trying to fetch a taxonomy list.
Before anything is counted or narrated, clean the post body: strip HTML tags, WordPress shortcodes in square brackets, captions, embed markup and any script or style blocks, then collapse the leftover whitespace. The word count column is computed from that cleaned text, not the raw body. A settings value holds a minimum word count, default it to around 300, and posts below it render as Too short to narrate and cannot be selected, so link posts and one-paragraph announcements never get picked up by a bulk run.
The narration voice comes from Cartesia List Voices. Show the available voices in settings with a preview of the name and description, let me pick one as the default narration voice, and remember it. Keep the audio settings there too: the mp3 output format and bit rate, and the Google Drive folder the files are written to.
Rows carry checkboxes with a select-all that applies to the current filter, not just the visible page. As soon as anything is selected, a summary bar shows the number of posts selected and the total character count of the cleaned text across the selection, plus a rough runtime estimate. This is the guardrail against burning credits by accident, so the bulk run button opens a confirm step that repeats those numbers before anything is sent to Cartesia.
Running the batch processes each selected post in turn. Send the cleaned text to Cartesia Text to Speech (Bytes) with the chosen voice and mp3 output. Upload the returned audio to Google Drive with Upload File (Resumable), naming the file after the post slug and publish date, and use the resumable path rather than a simple upload because long articles produce files well past the 5MB limit for a single-shot upload. Then call Google Drive Create Permission on the new file with type anyone and role reader so the audio is playable by readers, and build the shareable link from the file id.
Finally, use WordPress Update a Post to prepend a Listen to this post block to the top of the post body, pointing at the Drive link. Wrap that block in a stable marker comment so the app can recognize its own insertion later: on a regenerate, replace the existing block rather than stacking a second player on the article, and never insert one twice. Preserve the rest of the body exactly as it was, and do not change the post status, title or publish date.
There is no WordPress media library upload operation available, so the audio must be hosted in Google Drive and linked into the post as described. Do not write a step that uploads the mp3 into the WordPress media library.
Persist a record per narrated post: the post id, the Drive file id, the public link, the duration, the character count, the voice used and the timestamp. That store is what drives the has-audio column and what makes a re-run cheap, since posts already recorded are skipped and only newly published ones come back as uncovered. Offer an explicit per-post Regenerate for articles I have rewritten, which is the one path allowed to overwrite an existing record.
While a batch runs, show per-row progress moving through narrating, uploading, sharing and updating the post, with a running completed count. Isolate failures so one bad post does not abort the batch: mark that row failed with a readable reason, carry on with the rest, and let me retry just the failed rows afterwards. If a post fails partway, do not record it as covered.
What does this prompt do?
- Lists every published post in one table with its publish date, category, word count, whether it already has an audio version, and how long that audio runs.
- Filter down to the posts with no audio yet, tick the ones you want, and see the total narration length before you start so a bulk run never surprises you.
- Narrates each selected post in the voice you choose, saves the mp3 to your Google Drive with a shareable link, and adds a Listen to this post player to the top of the article.
- Remembers everything it has already narrated, so running it again next month only picks up the posts you have published since.
What do I need to use this?
- A WordPress site you can log in to and edit published posts on
- A Cartesia account, which supplies the narration voices
- A Google Drive account where the finished audio files will be stored and shared
- A rough idea of how short is too short to narrate, since the app skips posts under a word count you set
How can I customize it?
- Swap the narration voice, or use a different voice for a particular category of post
- Change the minimum word count so short news items and link posts get skipped automatically
- Edit the wording and placement of the Listen to this post line that gets added to your articles
- Point the audio at a different Google Drive folder, for example one per year or per category
FAQs
Where do the audio files actually live?
Will it re-narrate posts I have already done?
How do I avoid burning through narration credits by accident?
What happens to images, code blocks, and shortcodes in my posts?
Does this work on a self-hosted WordPress site?
Can I do a handful of posts instead of the whole archive?
Related templates
One desk to pull scripts from Drive, give every line its own voice, redo the one take that missed, and share approved audio in Slack.
See which products still have no video, animate their hero photos into short cinematic clips, and compare motion styles side by side before you pick a winner.
Paste the brief, get six shots back as images you can re-roll, animate into short clips, and send to the team for review without leaving the page.
One place to manage every AI character your brand uses, run themed photo shoots on demand, and keep the same face showing up across every campaign.
Replace the monthly decay spreadsheet with a live board of pages losing search traffic, moving each one from spotted to refreshed and monitored.
Let each rep open a deal, tick the slides that fit, and get a tailored Google Slides deck filed in Drive and logged on the CRM record.
Stop guessing which posts have audio.
Open one console, see your whole archive at a glance, and backfill the missing narration in a single run.