Blog/Case study

How we rebuilt Blockster in 13 days, voice agents included

Blockster covers the business of AI and digital money. In 13 days we rebuilt the whole site, from the newsroom to memberships, and put two voice agents on it: a concierge that answers for MoonPay, and ours.

· 9 min read

The Blockster home page

Blockster is a premier publication on the business of AI and digital money: the day's news, video interviews from the conference floor, guides, events, and Stations, where companies such as MoonPay have their own page beside Blockster's reporting on them.

Its previous site had served it well, but it was built for an earlier Blockster, and the publication had outgrown it. We rebuilt it from scratch on the newest Elixir and Phoenix, and went from the first design to the live blockster.com in 13 days. Nine of those were code. Along the way we built the parts most publications don't have: a voice concierge that answers questions about MoonPay out loud, our own voice agent behind Blockster's ad slots, and the pages for the Blockster Briefing, a news video presented by an AI anchor.

Thirteen days, from design to live

The design came first, in its own repository: every page of the new site as a working prototype, with each state a reader could see. By launch that prototype ran to 859 pages. Then a written plan split the build into waves, and each wave started from finished designs. The dates are New York time.

  1. 24 September. The design repository opens.
  2. 28 September. The first line of code: an empty Phoenix application on the newest Elixir and Erlang, running on Fly.io the same day.
  3. 29 September. Every story moved across from the old site, with a redirect for every old address so no link breaks. A written spec for each of the 37 page templates.
  4. 30 September. The homepage, the newsroom and search, then the beats, Watch, Interviews, Guides, Events and the author pages.
  5. 2 October. Sign-in, memberships, checkout and Stations.
  6. 3 to 5 October. The Studio, the software Blockster's editors work in. Then ad bookings, measurement, the newsletter and the Briefing's archive.
  7. 6 October. The voice concierge for MoonPay, our own voice agent on the ads, and a publishing API.
  8. 7 October. The final import, 1,322 stories and 1,473 redirects, and at 3:40 PM, blockster.com switched to the new site.

On launch day the site carried 3,642 automated tests. Every public page was checked against its prototype pixel by pixel, at 28 to 34 screen widths.

The stack

Layer What runs it
Application Elixir 1.20 on Erlang/OTP 29, Phoenix 1.8. Public pages are plain server-rendered HTML; the editors' Studio is Phoenix LiveView.
Database Postgres, managed on Fly.io
Hosting Fly.io: staging from the first day, which became production at launch
Edge Cloudflare, purged the moment a story is published
Images S3, resized on the fly by ImageKit
Search Built in: Postgres finds the candidates, Elixir ranks them
Payments Stripe, for memberships
Email SendGrid, with one-click unsubscribe on every bulk message
Video YouTube, with timed chapters linked to the stories
Voice GPT-Live, OpenAI's full-duplex voice model, over WebRTC

The previous site was also built on Elixir and Phoenix. Rather than upgrade it in place, we rebuilt it in a new repository and carried the content across, so the new site started clean on the current versions of the language and the framework.

It is also built to be read by machines as well as people. Every story has a Markdown copy at its own address, and the site publishes a sitemap, a news sitemap, RSS and an llms.txt, so AI search tools can cite Blockster accurately.

The voice concierge for MoonPay

On MoonPay's Station and beside MoonPay stories, Blockster shows an Ask MoonPay panel. A reader taps the microphone and asks what MoonPay does, where it is available, what it costs, how to get started or what it announced this week. The concierge answers out loud, as MoonPay's AI concierge, run by Talk Society. It covers 32 topics, from fees and payment methods to licences, people and news. It is built not to name competitors or give investment advice.

The Ask MoonPay panel on Blockster
The Ask MoonPay panel on blockster.com/stations/moonpay

How it is put together

Blockster's pageIts own panel design, marked for our script.embed script
Our serverChecks the site, opens a voice session for that reader, holds the API key.session setup
GPT-LiveThe reader's voice goes straight to OpenAI and back, both directions at once.WebRTC
The knowledgeOur server rides alongside and answers every lookup the model makes.sideband

There is no iframe. Blockster draws the panel in its own design and marks it for our script:

<div class="voice-widget"
     data-talk-society-agent="moonpay"
     data-talk-society-src="https://talksociety.ai/embed/v1.js">
  <button class="voice-mic" aria-label="Talk to MoonPay">…</button>
  <p class="voice-status" role="status">Loading the concierge…</p>
  <button class="voice-question">What does MoonPay do?</button>
</div>

Blockster's own page loads our script only when the microphone comes within 300 pixels of the screen, so an article does not pay for a voice agent the reader never reaches. When the reader taps, our server checks that the request comes from Blockster and that the site is within its own budget, then opens a GPT-Live session for that reader. The browser receives a connection, never a key.

GPT-Live is full duplex: it listens while it talks, so a reader can cut in halfway through an answer, the way they would with a person. When the answer is already in front of it, it starts answering in about a second. The audio travels straight between the reader's browser and OpenAI over WebRTC. Our server joins the same session on a second connection, the sideband, where it answers the model's lookups and keeps the record of the call.

Because the panel runs inside someone else's page, every other script on that page could in principle read what the browser receives. So the browser gets as little as possible. It cannot send anything into the session, and on a partner's page it receives no transcript at all:

"client": {
  "data_channel": {
    "allowed_client_events": [],
    "allowed_server_events": [{"type": "session.started"}, {"type": "session.closed"}]
  }
}

We checked that on a live call from Blockster's staging site: the page received only the start of the session. The transcript stays on our side.

How it stays current

A concierge that answers for a company is only as good as what it knows today. Its knowledge has three layers:

  • Curated facts. About 120 dated, cited facts written and checked by hand: who runs MoonPay, where it is based, what it sells.
  • A watcher. Every 15 minutes it reads MoonPay's help centre, its press releases and Blockster's MoonPay Station. When a page's text changes, Claude reads it and keeps a fact only with the sentence from the page that proves it, quoted word for word. The first full read turned 186 pages into 2,433 facts.
  • A live search. For questions about this week, limited to 15 sources we trust, so "what did MoonPay announce?" gets today's answer.

When facts disagree, a standing fact a person wrote on purpose outranks one a model extracted from a source of the same standing, unless the page it came from has since changed. A date alone never decides it: a press release from yesterday restating a company's founding year is not newer information.

Two things we learned

  • Field order is part of the prompt. When we asked the model for each fact's answer before its evidence, it often returned empty facts. Asking for the evidence first made extraction reliable in every run we tested.
  • When the agent says "I don't know", check what its lookup returned before blaming the research. More than once the answer was in the knowledge base and our ranking threw it away.

Our own AI on the ads

Blockster's own "Talk to it now" ad slots open Talk Society's voice agent. It knows the reader came from Blockster, asks what kind of business they run, explains what an AI agent would do for it, and books a call with us during the conversation. It runs on the same embed script as the concierge.

The first version of it greeted the reader. With no recorded greeting to play, the model stayed silent on two of our first three test calls while the ad said it was listening. Blockster's ad already invites the reader to talk, so now our agent waits for them, the way the concierge does.

The Talk to it now panel on Blockster
The "Talk to it now" panel on Blockster, which opens our agent

The Blockster Briefing, presented by an AI anchor

We also make the Blockster Briefing: the day's news on AI and digital money in about three minutes, presented by Electra, an AI-generated presenter. Blockster's reporters write the stories and review every edition, and the page says so under the player.

Latest edition29 October 20263:108 stories

AI-generated presenter. Reporting and editorial review by Blockster. News, not financial advice; every edition is on Blockster. The video plays from YouTube once you press play or a chapter.

On the site, each edition is a YouTube video with timed chapters, and every chapter links to the story it covers, so a viewer can jump from the video to the full piece. Shows are marked as AI-presented in the data, which is what puts the disclosure on the page. New editions go up through the Studio or the publishing API; the first edition published through the API went live on launch day without a deploy.

Everything else

The voice agents and the presenter are the parts people notice. Underneath them is a full publication, and we built all of it:

  • The newsroom. Homepage, beats, search, guides, events, interviews and author pages.
  • The Studio. Blockster's editors write, edit and curate the homepage in software we built for them. A stale browser tab can never overwrite a newer version of a story.
  • Memberships and checkout, on Stripe.
  • Stations, the company pages, each with its own reporting, interviews and, for MoonPay, a voice concierge.
  • A publishing API, so other tools can file stories and videos. Keys are stored only as hashes.
  • Email for sign-in and a weekly newsletter.
  • Caching tuned for news. A new story shows everywhere the moment it is published, at the edge and in readers' browsers.

We have kept shipping since launch: an ambassador programme with personal links and unique-click counts, a contributor network for writers, and free Company Stations. By 27 October that was 58 merged changes, 33 of them since launch.

How we work

Talk Society is one founder and a team of AI agents built with Claude. The founder talks to the client and decides what gets built. The agents write the code, test it, attack it and ship it.

On Blockster that meant the designs settled first, a written plan for each wave, and several waves built in parallel by agents working on separate copies of the code. Every feature was attacked by independent AI reviewers before it merged, and their findings are written into the release notes. Before launch, eight AI reviewers went through the whole codebase and a second agent re-checked each finding: 41 problems confirmed. The ones in the code were fixed or settled before the switch; the rest went on the design, editorial and owner lists. No release ships with a failing test.

What this means for your business

Most businesses that come to us want one voice agent: a receptionist, a sales agent, a concierge that knows their company inside out. We build those in about a week. If you also need what goes around the voice agent, the website, the software your team works in, payments, email and video, we build that too. Blockster is the proof.

More from the blog