WeDispatch, 1.14 to 1.22: the catch-up
Nine releases in three days. The credit becomes the unit, volume changes itself, the API can patch a passage, listens group by author, and whatever runs without you can be switched off site by site. The whole tour, without one release note a day.
Version 1.13.0 replaced three plans with a single offer and a slider. Nine releases followed in three
days, and publishing a note for each would have produced nine reads for one story. Here it is in one
piece, sorted by what it changes for you rather than by number.
The unit is the credit
The simulator answered "you need 120 articles" to someone publishing 30. The figure was right, the
word was wrong: a 15,500-character article costs four credits, so a subscription sold as "50
articles" gives twelve real articles to a newsroom that writes long. That was not an approximation,
it was a promise we do not keep, written into the name of what we sell.
The product now speaks in credits everywhere, and the credit never travels alone: "one credit = one
article of up to 5,000 characters, roughly 830 words". That sentence lives in one place and the
screens call it, instead of seven wordings of one definition. The simulator shows its arithmetic
rather than hiding it: "30 articles × 4 credits = 120 credits a month". That line was what was
missing, not the right number.
Two wording fixes along the way. We no longer say "signs" but "characters", because the first is
typesetter's jargon and the rest of the product already said the second. And to give the order of
magnitude in words, the calculation divided by 5: measured on our own articles, written French runs
at 6.14 characters per word. The screen announced 1,200 words where there are 980, a twenty percent
gap, in the direction that makes you under-buy your volume. You find out when you hit your cap, which
is the worst possible moment. The ratio is now re-measured every time our checks run, on the blog's
real articles.
Hitting your cap is no longer a dead end
A customer blocked on the 20th of the month had no way out on their own. The slider on the
Subscription screen now does it, with a single rule called by both the screen and the checkout: on
the annual plan, moving up is immediate and charges only the difference, moving down is scheduled for
renewal; on the monthly plan everything waits for next month. A change is never refused, it is
scheduled with its date when it cannot apply straight away.
Choosing and changing are the same gesture, in the same place: both now lead to your client area
rather than the pricing page, which argues without subscribing.
A public page explains the subscription, and lets you try it
/en/subscription answers three questions with three tools, and none of them is an illustration:
they call the checkout's own code. How much volume do I need, starting from what you know, how many
articles and how long. What am I allowed to do, with a table generated from the feature list itself,
so it cannot forget a new one. And what if I change my mind, with a simulator that calls the same
functions as the payment route.
One frequently asked question also answers, in plain words, the one everybody asks: yes spaces count,
yes commas too, here is where to find the count in Word and Google Docs, and what is counted is the
text actually read out, not your page's code.
Four more doors in the API
Patch a passage. GET /api/v1/podcasts/{id}/words returns the position of every word,POST .../correct re-synthesises only the passage you point at and stitches it back. It is the one
operation in the product that does not charge for the whole article.
Hear a sample. POST /api/v1/voices/preview reads your text with the voice of the engine that
will actually produce your articles. Not billed, not stored, thirty samples an hour.
Take an audio out of circulation. DELETE /api/v1/podcasts/{id} removes the files and keeps the
record, the listening history and the source text. There was no delete route at all: an article sent
to the trash in a CMS stayed listenable through its direct address.
Sign an article. The author field travels with the article, and GET /api/v1/stats returns a
table by byline. You have nothing to send if you come through an RSS feed: the signature is read
there on its own. Two precautions are held by checks, and they matter more than the feature itself.
Unsigned articles form their own row, so the sum of authors always adds back up to the total:
dropping them would produce a table whose figures do not reconcile, with nobody able to say why. And
the completion rate is recalculated on the totals rather than averaged across rates, which would give
an article listened to three times the same weight as one listened to three thousand.
What runs without you can be switched off, site by site
An "automatic run" switch existed at account level. There is now one per site, in its card, in three
states: inherit, on, paused. The combination rule is deliberately blunt, the sweep runs if the account
and the site agree, and a site never turns back on what the account turned off, because the account is
the side that holds the invoice.
Your CMS can also declare the nature of its request. trigger: "auto" puts it under those switches,
exactly like a feed; when it is paused, nothing is produced and nothing is charged. The default stays"manual": an integration declares that it is automatic, we do not guess it on its behalf.
While it is paused, articles published are recorded as seen and are not caught up when you resume.
That is deliberate: waking an automation must never trigger a bill nobody asked for.
What we removed
The old prices are not hidden, they no longer exist in the code. A price kept just in case is a price
that will be displayed, and that one had been, in production, on the page where you pay. Two scripts
able to recreate the old grid went with them: a tool that can put a retired offer back on sale is a
door left open.
Usage billing left too. It reported every generation to meters whose next tiers were chargeable, while
the offer sells a hard cap: the two mechanisms coexisted instead of replacing one another. Nobody was
charged, and it was the right window to close. The credit count stays in the trace: it no longer
bills, it explains.
One door had stayed open: POST /api/account/billing still accepted an old plan name with no volume,
and created a subscription on a price no longer in the catalogue. Unreachable by clicking, open to a
program. Closed.
The fixes you reported
The feature comparison was unreadable on a phone: a column table does not shrink, it transposes, and
below 760 px each row becomes a block. The FAQ promised that regenerations are not re-charged, while
the counter includes them: the promise lived in six places, all corrected, and what remains true is
more interesting, targeted correction only counts the characters of the passage re-read. Finally the
Subscription screen crashed in production on every account, blank page, because of a declaration
order; a check now forbids that shape across the whole product.
On the WordPress side
A voice is chosen by ear: a "Listen" button now accompanies every list, everywhere one appears. A card
finally connects two halves that ignored each other, what is left of your month and the articles with
no audio, and it never queues more than what is left. Cache plugins are detected at runtime and the
page is purged when the audio arrives, that is, after the article is saved, at the moment when nobody
purges any more. The one-click connection link reported "expired link" while nothing expired, and
pasting a key by hand left the previous account's figures on screen: both are fixed. And the plugin
now sends the article's byline, with its own per-author screen.
And one repair that was about us
This blog's articles were being voiced every morning by a path hard-wired when the site was built,
disconnected from the product itself: it consulted neither the switch on the account it was producing
on, nor its API keys, nor any rule at all. You do not disarm such a path, you unplug it. It now has to
be asked for, and even then it refuses if the owning account has turned its automatic voicing off. An
automation you disarm is an automation that rearms itself.
Give your articles a voice with WeDispatch
This blog is itself voiced by WeDispatch. Curious how it sounds on your content?
Book a demo