Skip to main content
Skip to main content

Widget releases

Human-readable release notes for the embeddable PodSaid widget served from widget.podsaid.com.

Every release corresponds to a git tag; the tag push automatically publishes bundles to widget.podsaid.com/v<version>/* (immutable pin) and widget.podsaid.com/v1/* (floating URL that always points at the latest v1.x). Embeds using the floating URL pick up new versions automatically on the next cache refresh (~5 min); embeds using a pinned URL keep serving the exact version they specified.

Canonical source: packages/widget/CHANGELOG.md in the ui repository.

Unreleased

v1.31.0 — 2026-10-11

  • Quieter web citation cards (ui#308). A Website card showed its text-fragment directive (#:~:text=An%20opportunity%E2%80%A6) on the link line and its chunk’s markdown — ###, **, _ — in the excerpt. The link line now shows just the destination, and drops the hostname entirely when the citation is on the page the reader is already on; the href is unchanged, so clicking still scrolls to and highlights the passage. The excerpt is flattened to the words it was wrapping. Both happen at display time, so cards already in flight are fixed without a re-embed.

  • podsaid:navigate, and one code path for every click that leaves the widget (ui#309). Clicking a citation card, its source link, or an inline [1] chip in an answer now emits a bubbling, composed, cancelable podsaid:navigate CustomEvent — { feedId, href, target, source, citationIndex }, where target is "same" or "cross". Calling preventDefault() stops the widget navigating, so a host can route with its own framework instead of the synthetic-anchor click the widget falls back to; not cancelling it closes a slide-out panel that would otherwise sit on top of the page the visitor just asked to see. Those three clicks previously had three copies of the same decision and had drifted: the source link opened a foreign URL in a new tab while the card body replaced the page, taking the conversation with it. Playable citations never navigate — audio and video play inside the card. Documented at console.podsaid.com/docs/embed/events.

v1.30.3 — 2026-10-10

  • Citation glyphs follow the chip’s text colour (ui#307). The globe, RSS-waves and chain-link glyphs baked stroke='white' into their SVGs, chosen when .cite-chip was a solid accent pill. The chip is now an 18% accent tint with --podsaid-fg text, so the glyphs were invisible on any light theme. They are now drawn as masks tinted with currentColor, so they follow the chip’s text colour on any palette — no new attribute, and no second copy of each icon for light and dark.

v1.30.2 — 2026-10-10

  • Web citations open the page, not the player (ui#306). citation-mode="url" assumed every sectionUrl was relative and joined it onto the feed’s websiteUrl. Crawled pages write absolute URLs — they live on the customer’s own origin — so the join produced https://site/https://site/page, and the click fell through to the episode player instead. An absolute (or protocol-relative) sectionUrl is now used as-is; a relative one keeps today’s behaviour, so docs feeds are unaffected. This also preserves #:~:text= fragments, which is what makes a citation land on the passage on sites that have no element ids to anchor to.

v1.30.1 — 2026-10-05

Internal release-tooling fix. No change to the widget itself — 1.30.0 was tagged but never published.

v1.30.0 — 2026-10-05

Changes that are merged but not yet published.

Citation links and “Read More” are quieter.

They were the same strong colour as the buttons that continue the conversation, so a reference looked like an action. They now sit in a lighter tint of your accent colour with a defined edge, and “Read More” no longer overlaps the text beneath it.

The demo’s buttons are shorter and centred — “More Questions” and “Ask My Own”.

v1.29.6 — 2026-10-05

Sample questions now type themselves out.

Each suggested question is written a character at a time and its bubble grows with it, one after another. The arrow appears once a question has finished, so it is clear which ones are ready to click. Visitors who have asked for reduced motion still see them appear instantly.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.29.5 — 2026-10-05

Your question now appears as a bubble sized to what you typed, aligned right.

Previously every question drew a full-width panel, which looked the same as the answer beneath it. Short questions now make small bubbles, long ones wrap at 85% of the panel.

The suggested questions are shaped the same way, so the whole conversation reads consistently.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.29.4 — 2026-10-04

Suggested questions now take the same colours as the question you asked.

On some sites the sample questions picked up the colour meant for small controls like the Send button, which could leave them harder to read than intended. They now follow the same colour as your asked question, so the two always match.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.29.2 — 2026-10-04

Fix: on some sites a long answer appeared to flicker as it was written.

Two things were moving the conversation at once while an answer streamed — the widget positioning the question you just asked, and the demo scrolling to the newest text — so the view was pulled in opposite directions on every update.

The question you asked now stays pinned at the top and the answer reads downward from it, steadily, with no flicker.

In guided-questions mode, the message box is now hidden while sample questions are on screen — including while an answer is being written and while the follow-on buttons are showing. It returns as soon as you choose Ask My Own Question.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.29.1 — 2026-10-04

Fix: on some sites the suggested questions appeared above the widget rather than inside it.

The panel of suggested questions could render outside the widget’s own card — above its header and tabs — if the widget was still setting itself up when the panel was drawn. It now waits for the widget to be ready.

This only affected the ?sermon-questions demonstration mode, and only where the panel was opened very early in page load.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.29.0 — 2026-10-04

Your question now appears in your own accent colour, matching the buttons around it.

The bubble showing the question you asked used to be a neutral grey panel, which made it blend into the answer beneath it. It now uses the same colour as the other filled controls in your widget, so the conversation reads as a back-and-forth rather than as one block of text.

If you have set a specific colour for that bubble, or a header colour, nothing changes — those still win. The text colour follows the one already chosen for your accent, so no new contrast decision is made.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.28.3 — 2026-10-04

Fix: in the guided question mode, nothing happened at all if the page was open in a background tab.

Clicking a suggested question did nothing — no answer, no error — when the browser tab was not the one in front. Browsers pause part of a page’s timing machinery in background tabs, and the demo was relying on it.

This only affected the ?sermon-questions demonstration mode. Normal use of the widget was unaffected.

Also: the soft chime on each suggested question is now more predictable. Browsers do not let a page play audio until the visitor has clicked something, so when the panel opens by itself the first set of questions is silent — there is no way around that. From the first click onwards it plays normally.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.28.2 — 2026-10-04

Fix: in the guided question mode, clicking a suggested question sometimes did nothing at all.

The question would appear in the box and then simply sit there — no answer, no error. It depended on how busy the page was at that moment, so it worked most of the time and failed occasionally, which made it hard to notice.

This only affected the ?sermon-questions demonstration mode. Normal use of the widget was unaffected.

Also in this release: the small Read More button on a long answer now takes your widget’s own colours instead of a fixed dark grey, so it looks like part of the widget rather than something sitting on top of it. If you have not customised those colours, it looks exactly as it did before.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.28.1 — 2026-10-04

Fix: in the guided question mode added yesterday, the two buttons under an answer were not appearing.

Clicking a suggested question produced the right answer from your archive, but the Show more suggestions and Ask my own question buttons never arrived, so the only way on was to reload the page.

This only affected the ?sermon-questions demonstration mode. Normal use of the widget was unaffected.

The suggested questions also now appear faster, look like buttons rather than statements, carry a small arrow so it is obvious they are meant to be clicked, and each one lands with a soft chime.

The small Read More button that appears on a long answer now takes your widget’s own colours instead of a fixed dark grey, so it looks like part of the widget rather than something sitting on top of it. If you have not customised those colours, it looks exactly as it did before.

The chime is deliberately quiet, and it only plays when someone opened the panel themselves — browsers do not let a page start audio on its own, and we have not tried to work around that. It also stays silent for visitors whose system is set to reduce motion.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.28.0 — 2026-10-04

New: a guided way to show someone what your archive can answer, without typing a question yourself.

Add ?sermon-questions to the end of a page address that carries the widget, and the widget opens with four suggested questions appearing one after another. Click one and the widget answers it for real, from your archive — there is nothing pre-recorded and nothing staged. Underneath the answer you get two choices: show four more suggestions, or take over and ask your own.

It is built for the moment when you are showing the widget to someone else — a staff meeting, a board, a visitor who does not yet know what to ask. The hardest part of demonstrating a search tool is thinking of a good question while people are watching.

Nothing changes on your site unless that address is used. Without it the widget behaves exactly as it always has.

The suggested questions are general ones that any sermon archive is likely to have covered — about grief, anxiety, forgiveness, money, doubt, prayer and purpose — and they are deliberately phrased the way a person actually types rather than the way a sermon series is titled.

If a suggested question has not been covered in your archive, the widget says so rather than inventing an answer. That is the same behaviour it has always had for any question it cannot ground in your own content, and it is worth seeing in a demonstration: it is usually the moment someone realises the answers are genuinely theirs.

One honest note on size: the widget file is about 2.6KB larger (roughly 3%) because this ships inside it. On a typical connection that is not perceptible, and we measured it rather than estimated.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks this up on the next cache refresh (~5 min).

v1.27.8 — 2026-09-28

Fix: your channel’s avatar now displays in the widget on your own website — it was showing as a broken image icon everywhere except podsaid.com and the admin console.

The small round channel picture beside your channel name in the widget’s header was failing to load on embedded installs. The image itself was fine; the widget was requesting it in a way YouTube’s image servers reject when the request comes from a site other than YouTube’s own. It now requests the image in a way those servers accept.

If you have been looking at your widget on podsaid.com and wondering why the avatar looked fine there but broken on your own site, that is exactly this — the problem only ever affected embeds.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks up the fix on the next cache refresh (~5 min).

One thing worth knowing if you are checking: if you previously opened the broken image’s address directly in a browser tab, your browser has cached it and the widget may have already looked correct to you while still being broken for your visitors. A fresh browser, or a hard reload, shows what visitors actually see.

v1.27.7 — 2026-09-21

Fix: the “Allow web returns” checkbox in the widget’s info popover now truthfully controls web citations — an unchecked box means no web-sourced answers come back, as visitors have always expected.

The checkbox was showing as unchecked but the underlying request behavior was still allowing web citations to be included in answers. That’s fixed. Because the checkbox is currently shipping as a disabled “coming soon” placeholder, this means web-sourced citations are off by default for every visitor until the checkbox is re-enabled in a future release. Answers cite only your ingested podcast/sermon content.

No embed changes required — the floating widget.podsaid.com/v1/ URL picks up the fix on the next cache refresh (~5 min).

Privacy note: the visitor’s preference (when the checkbox is re-enabled) is stored only in the visitor’s own browser as a single 0/1 value per feed. No personal data, no tracking, no data sent to us or third parties.

v1.27.6 — 2026-09-20

Fix: tab labels and the channel-count badge no longer get hard-clipped when the widget sits inside a narrow container — they now truncate gracefully with an ellipsis so nothing important is chopped mid-letter.

On narrower embed containers (some responsive layouts land the widget at roughly 340px inner width on phones), the “Sermons” tab used to render as “Sermo” and the “2 channels” badge as “2 cha” — a hard right-edge cut with no ellipsis to signal the truncation. Both now shrink and ellipsize (e.g. “Serm…” or “2 ch…”), so it’s clear the label is truncated rather than looking broken. The full channel count is always visible in the About/info popover the widget’s title bar opens on tap.

Wider containers (desktop, iOS Safari at typical widths) see no visual change — the fix only kicks in when the container is genuinely tighter than the sum of the row’s children.

v1.27.5 — 2026-09-20

Fix: the widget no longer runs edge-to-edge on Android phones — it now has a small side gutter on both iOS and Android, matching the visual breathing room iPhone was already getting.

On Android Chrome the widget’s content sat flush against the phone edges, making it read as “too wide”. iOS Safari’s viewport was already comfortable, so this only changed behavior for Android. Now every phone gets an ~8px horizontal gutter automatically. No embed changes required — the floating widget.podsaid.com/v1/ URL picks up the fix on the next cache refresh (~5 min).

Sidebar layout embeds (where the widget is intentionally full-width inside its own container) are unaffected.

v1.27.4 — 2026-09-19

Fix: the widget’s About dialog now fits mobile viewports — every section (chips, hero, stats, dates, Allow-web-returns, credits) is reachable, and the dialog scrolls internally if it doesn’t fit at once.

Follow-up to v1.27.3. Tapping the (i) icon in the widget header on an iPhone used to open the About dialog with the bottom half clipped off — the “Allow web returns” toggle and the widget/copyright credits were unreachable. This release caps the dialog to its container and adds internal scroll, and shrinks the hero (avatar + branding) on phones so more content fits without scrolling in the first place.

No embed snippet changes. No new theming variables to set. Pinned embeds (widget.podsaid.com/v1.27.3/*) keep serving the old bundle; embeds on the floating URL (widget.podsaid.com/v1/*) pick up automatically on the next CDN cache refresh (~5 min).

v1.27.3 — 2026-09-19

Fix: the widget now fits mobile viewports cleanly — no more focus-time zoom on iPhone Safari, no more clipping off the sides.

Tapping the “Ask a question…” input or the Search input on iPhone used to zoom the page in and pan it sideways, which clipped the “chars left” counter and the widget edges off the visible viewport. This release lifts both inputs’ font size just high enough to disable iOS Safari’s auto-zoom behavior (a well-known Safari trigger at font sizes under 16px), so the widget stays anchored on tap.

At the same time we tightened up the widget’s own mobile layout — slightly less padding, a shorter default pane height on phones, and the “chars left” + Send row wraps if it gets narrow — so the whole widget stays inside the viewport on any phone width. The Web Component’s shadow host also gets display: block so it can’t push wider than its column on external sites.

No embed snippet changes. No new theming variables to set. Pinned embeds (widget.podsaid.com/v1.27.2/*) keep serving the old bundle; embeds on the floating URL (widget.podsaid.com/v1/*) pick up automatically on the next CDN cache refresh (~5 min).

v1.27.2 — 2026-09-17

Fix: the “N of M channels” badge next to the widget title is now readable on dark-branded headers.

If your widget install customises the widget header to a dark brand color (e.g. a navy or deep-purple banner) and your accent color is in a similar family, the small “1 of 2 channels” pill next to the title had washed out to near-invisible in v1.27.1. This release retunes that pill to automatically inherit whatever text color your header is already using, so it reads with the same contrast as your title.

No embed snippet changes. No new theming variables to set. Picks up automatically on the next CDN cache refresh (~5 min).

v1.27.1 — 2026-09-17

Fix: citation labels and the widget title now correctly reflect multi-channel answers.

v1.27.0 made chat search every channel you had selected, and the backend was doing that correctly the whole time — but the widget’s UI was still labeling every citation with your first-selected channel’s name, and the title bar at the top of the widget was showing that channel’s brand instead of your organization’s. So a multi-channel answer looked like a single-channel one; switching which channel was “primary” made it look like the answer had changed, when in fact the underlying answer was drawing from both channels either way.

v1.27.1 fixes both. When you have 2+ channels checked:

  • Each citation card shows the actual source channel’s name — some cards will read your Classic channel, others your Contemporary channel, matching where each excerpt actually came from.
  • The title bar reads your organization name (from the account settings in the admin console). If no organization name has been set on your account, the widget falls back to a neutral label like “Classic + Contemporary” — never empty, never picking one channel over another.
  • The channel avatar is not shown when multiple are selected — no single logo represents an answer that spans multiple channels; the widget uses a letter-tile fallback instead.

Single-channel selections and feed-scoped installs are unchanged. No embed snippet changes — your existing <ask-pod-widget embed-key="pk_live_…"> picks up the new behaviour on next CDN cache refresh (~5 min).

v1.27.0 — 2026-09-17

Chat now searches every channel you have selected, not just the primary one.

v1.26.0 shipped the chip strip so you could toggle which channels a search covers — but Ask (chat) was still only asking your primary channel behind the scenes. If you had both Classic and Contemporary checked and typed a question that lived in Contemporary, you’d get “I don’t have that in the library” even though search found it just fine. v1.27.0 closes that gap.

What visitors see

  • Chat draws from every checked channel. Ask a question with 2+ chips selected and the answer synthesises across all of them, with each source citation labeled by its channel (same badge you already see on search results).
  • The answer follows the evidence. If your question is genuinely about Contemporary content, you’ll get Contemporary citations even with both chips checked — the widget doesn’t “balance” citations to force both channels into every answer. That’s intentional: relevance drives what shows up, not a quota. On questions where the answer really does span multiple channels, you’ll see citations from each.
  • Single-channel installs and single-chip selections are unchanged. If you narrow to one chip, or your install was never org-scoped in the first place, chat behaves exactly as it did in v1.26.0 — same URL, same response shape, same latency.
  • No snippet changes. Your existing <ask-pod-widget embed-key="pk_live_…"> picks up the new behaviour on next CDN cache refresh (~5 min). No code changes to your site.

v1.26.0 — 2026-09-17

Big one: the widget now supports “org-scoped” installs where a single embed key covers every feed linked to your customer account.

Until now the widget’s snippet always looked like <ask-pod-widget feed-id="…" api-key="…"> — one key, one feed. If your organization runs multiple podcast or sermon feeds (e.g. a Classic service and a Contemporary service, each with its own audio archive) you had two options: mount two widgets side-by-side, or pick a single feed and lose the other from search. Neither felt right.

v1.26.0 introduces an alternative attribute shape:

<ask-pod-widget embed-key="pk_live_…"></ask-pod-widget>

Notice: no feed-id. The widget loads the linked-feed list on mount and renders every one of them together. Nothing else about your embed changes — same <script> tag from the CDN, same Shadow DOM isolation, same customization CSS variables.

What visitors see

  • Chip strip in the About dialog. Tap the (i) to open About; up top there’s a row of checkboxes, one per channel. Toggle which ones a search covers. One channel must remain selected at all times.
  • Aggregate stats on the hero. When multiple channels are checked, the big number in the About dialog sums across them (e.g. 1,535 SERMONS across Classic + Contemporary), the oldest/newest dates span the union, and the freshness pill shows the most-recent-of-any. Uncheck a chip and the numbers re-count to reflect the narrower scope. The title reads your organization name; the halo picks up the first selected channel’s artwork.
  • Channel-count badge on the title bar. Small text next to the church name reads 2 channels when all selected, 1 of 2 channels when narrowed.
  • Search results labeled with source-channel. Every search result carries a small badge showing which channel it came from. Same for the sources listed under a chat answer.

The install-mode picker

Which attribute shape do you use?

SituationSnippetWhere you get the key
Your org has one podcast/sermon feedfeed-id="…" api-key="pk_live_…"Per-feed embed key from Console → Keys
Your org has multiple linked feedsembed-key="pk_live_…"Org-scoped embed key from the same Console page (once available; pilot customers today request via [email protected])

If you’re a single-feed customer, you can keep your existing embed exactly as it is — no change required, and every feature you had before still works.

What’s not in this release

  • Chat still targets one feed per question. Search fans out across all selected channels, but the AI chat currently uses whichever channel is primary. Multi-channel chat (with the AI synthesizing a single answer from sources across every selected feed) is the next release. If a visitor asks a question about a topic that only appears in your secondary channel, chat may say it can’t find an answer even when search can — narrowing the chip strip to just that channel resolves it in the meantime.

Under the hood

  • New attribute embed-key (string). Mutually exclusive with feed-id — pass one, not both.
  • New API dependency: GET /v1/embed/config and POST /v1/search (both org-scoped) — the backend endpoints landed in the same arc.
  • Fixed a subtle bug uncovered during pilot testing where chip avatars sometimes rendered as letter tiles instead of channel artwork; also improved silent-failure diagnostics so future issues surface in the browser console instead of hiding.

Full CHANGELOG entry with implementation notes, extracted-helper coverage, and the bug-fix specifics: packages/widget/CHANGELOG.md.

v1.25.1 — 2026-09-15

Fix: feed-header info marker now matches the title-bar text color.

The (i) info button in the widget’s feed-header (right of the church name) was rendering as a muted grey while the church name next to it rendered at full color. They belong to the same tap target (tap the row to open the About dialog), so the visual mismatch read as a bug. Both now render at the same color at rest.

Presentational-only — no embed code changes required, no new attributes or CSS custom properties.

v1.25.0 — 2026-09-14

Suggested-rewrite chip on refusal responses + “Allow web returns” toggle becomes a coming-soon placeholder.

Two changes bundled from the sermon-generation-guard rollout:

  • 💡 Ask: … chip on refusal answers. When the backend refuses to answer a question (e.g. “write me a sermon on grace” on a sermons feed — see the new sermon-generation guard) it can now include a natural-language rewrite. If it does, the widget renders a pill-shaped button below the refusal text with 💡 Ask: <rewrite>. Tapping the button submits the rewrite as the visitor’s next message — same code path as typing and hitting send. Full-width on mobile, inline-block on wider viewports.
  • Analytics hook for embedders. On chip tap the widget fires a bubbling, composed podsaid:chip_click CustomEvent from the widget host (crosses the Shadow DOM boundary) with { feedId, suggestedRewrite, variantResolved } in detail. Wire it up like any other DOM event to measure conversion rate — no vendor SDK is bundled with the widget.
  • Backwards-compatible. Widgets running against backends that don’t send suggestedRewrite render exactly as before — no chip.
  • “Allow web returns” toggle is now disabled. The per-feed opt-out that shipped in v1.22.0 is a coming-soon placeholder while the backend web-returns feature is being reworked. The row stays visible (dimmed) so you can see the setting you’ll get; any pre-existing opt-out from earlier versions is still honored at request time.

No embed code changes required. No new attributes, JS properties, or CSS custom properties.

v1.24.0 — 2026-09-13

Asked-question bubble inherits your brand colors from the title bar.

Four new CSS custom properties on <ask-pod-widget> let you brand the widget’s title bar (the feed-header strip above the tabs) and have the visitor’s asked-question bubble in the chat pane adopt the same colors automatically:

  • --podsaid-header-bg — feed-header background
  • --podsaid-header-fg — feed-header text color
  • --podsaid-user-bubble-bg — question-bubble background (defaults to --podsaid-header-bg)
  • --podsaid-user-bubble-fg — question-bubble text (defaults to --podsaid-header-fg)

Common case: set just --podsaid-header-bg + --podsaid-header-fg and both the title bar AND the visitor’s question bubble adopt your brand — one edit, coherent look. Want the bubble a different shade from the header? Set the two user-bubble tokens explicitly and they win. Full docs and recipes: Customization — brand the title bar and question bubble.

Additive — if you don’t set these tokens, the widget renders exactly as it did in v1.23.0.

v1.23.0 — 2026-09-12

Experimental-variant badge on non-default answers.

When the backend resolves your feed to a non-default answer-clamp variant (used for tuning experiments), the widget now shows a small 🧪 experimental pill in the top-right of the assistant answer bubble. Hover it for the variant name.

  • What triggers it: the backend’s /chat response variantResolved field. Set when the operator places a feed on the allowlist for a non-default variant.
  • What it does not affect: the answer itself, the citations, the streaming behavior — all unchanged. The pill is purely an indicator.
  • Backwards-compatible: widgets serving backends that don’t send variantResolved show no badge (same as before). No embed code changes required.

v1.22.0 — 2026-09-08

Web citation UX — source-link cards + user-opt-out control.

Follows v1.21.0 (globe glyph for web citations inline). This release completes the “user can see and control web returns” story:

  • Source-link button on expanded citation cards. Web/docs citation cards in the “More related moments” drawer now show a clickable button with the citation’s glyph + shortened URL. Clicking opens the source (new tab for cross-origin, in-page nav for same-origin).
  • “Allow web returns” checkbox in About dialog. Per-feed preference (defaults to checked). Unchecking asks the backend to skip web content entirely — the LLM never sees it, so answer text AND citations both stay off web sources coherently.

Zero public API surface changes.

v1.21.0 — 2026-09-08

Web citations get their own glyph. Backend-side filter obsoletes the Episodes-tab band-aid. Citation clicks now branch on widget render mode.

Three widget changes bundled from the fix for docs/web milestone:

  • 🌐 Globe glyph for web citations. WebSaid-crawled page citations render with a dedicated globe glyph, visually distinct from the 🔗 chain-link that docs citations use. Classification is automatic based on citation URL shape — no config change for embedders.
  • Episodes-tab client-side filter removed. Backend now filters synthetic web/docs episode rows out of the /feeds/{id}/episodes endpoint, so the widget no longer needs to hide them client-side. Fewer moving parts, no behavior change.
  • Citation click routing per widget-render mode. Citations now classify against the widget’s own origin: same-origin → in-page SPA navigation, cross-origin → open in new tab (_blank, noopener/noreferrer). Previously, cross-origin citation clicks navigated the widget itself away, destroying the chat context — that no longer happens.

Zero public API surface changes.

v1.20.7 — 2026-08-26

Crawlable episode links. Episode titles in the Episodes tab are now real <a href> anchors — Google, ChatGPT, Perplexity, and Claude Web follow them to canonical PodSaid episode pages where transcripts + structured data live. On a PodSaid-hosted feed page the link stays on the same domain; on an external customer embed it points at the canonical podsaid.com URL. Right-click “Copy Link”, cmd+click “Open in New Tab”, and standard browser share menus all work as expected now. Video-play thumbnails and the Q&A scope checkbox are unchanged.

v1.20.6 — 2026-08-23

Citation chip + SPA nav. Chip now renders as a solid --podsaid-accent filled pill with --podsaid-accent-fg text — high-contrast on any host brightness. Same-origin citation clicks now do SPA-friendly navigation via a synthetic <a> click, so SvelteKit’s router intercepts instead of forcing a full-page reload.

v1.20.4 — 2026-08-23

Sidebar answer fills space. In layout="sidebar" mode, the assistant’s answer now grows to fill the messages pane vertically instead of hugging the top with empty space below.

v1.20.3 — 2026-08-23

Popover contrast fix. The ⓘ info popover was near-illegible when the host page used a dark theme (like the docs drawer). Root cause: the card’s text color fell back to the host’s inherited light color while sitting on a white background. Landing dark-scoped text on the card’s default white bg is now the guaranteed fallback, and muted labels bump from 60% → 78% opacity so secondary text reads clearly.

v1.20.2 — 2026-08-23

Docs terminology. The widget’s existing Episodes / Sermons label switch now recognizes type="docs" too, returning “Pages”. Applies to the ⓘ info popover’s stat label and anywhere else the widget names episodes. Backwards-compat: podcast/sermon feeds unchanged.

v1.20.1 — 2026-08-23

Obvious clickable citations. UX polish on the citation surface. Three discoverability improvements:

  • Inline [N] chip in the answer text now renders as a subtle pill (accent-tinted background + border + focus outline) that reads as an obvious link chip. Previously the only click affordance was an opacity shift on hover, which visitors missed.
  • Docs chip trailing glyph — docs citation chips now show [N]🔗 (link emoji) to match the visual footprint of YouTube ([N]▶) and RSS ([N]{rss-icon}) chips. Consistent shape across all modes.
  • Whole citation card is now clickable when citation-mode="url" — hover shifts border to accent, → arrow in the header signals the affordance, click navigates to the citation’s linked section. Keyboard-accessible via Enter/Space. Podcast/sermon widgets (default citation-mode="timestamp") unchanged.

No attribute API changes. Purely visual + click-target polish.

v1.20.0 — 2026-08-22

Docs-as-feed attributes. Two additive attributes on <ask-pod-widget> that let a docs-shaped feed embed the widget cleanly. Zero behavior change for every existing embed — defaults preserve pre-v1.20.0 render exactly.

  • citation-mode ('timestamp' default | 'url'). 'url' navigates the top-level window to feed.websiteUrl + citation.sectionUrl on citation click, instead of the current seek/popup behavior. Browser handles anchor scroll to the section. Falls back to timestamp behavior if the citation has no sectionUrl or the feed has no websiteUrl so a data-shape drift never breaks the widget.
  • tabs (comma-separated allow-list; default = all four render). tabs="chat,search" is the docs-as-feed shape — Ask + Search only. Unknown values are ignored; if every value is unknown the widget falls back to rendering all tabs (additive-only stability guarantee).

The two attributes are independent — a podcast feed could adopt tabs="chat" alone, and a docs-hosted embed could theoretically stay on citation-mode="timestamp" for a mixed-content feed. The docs-as-feed default combines both.

v1.19.0 — 2026-08-11

Clear buttons + multi-select sermons. Two bundled UX changes:

  • Clear buttons. The Ask and Search panes each gain a Clear affordance. Search: ✕ next to the input row when there’s a query, results, or error — clears them and refocuses the input. Ask: Clear button on the left of the chat submit row when there’s chat state — aborts the in-flight SSE, drops history + streaming buffer, and starts a fresh Q&A session. Sermon selection is preserved across a chat clear.
  • Multi-select sermons. Replaced the single-episode hyperlink on the Sermons/Episodes pane with a checkbox on each row. Selecting sermons puts them in the Ask pane header as removable chips and narrows retrieval to those episodes. The Sermons pane header shows the count and an Ask about these → link. Empty selection keeps today’s whole-feed Ask behavior — no functional change for embeds that don’t touch the Sermons pane.

Backend contract: POST /feeds/{feedId}/chat, /chat/stream, and /search now accept episodeIds: string[] alongside the existing singular episodeId (retained for backward compat).

No change to the widget’s public attribute API — the multi-select is internal runtime state.

v1.18.0 — 2026-08-10

Cited-only reference panel — the widget now shows only the reference cards the answer actually cites, with the rest tucked behind a “More related moments (N)” disclosure. Response to the D. Grice Q&A audit which found that 89 of 90 responses were returning exactly 8 cards, 76.8% of which were displayed but never inline-cited.

  • Consumes the new citedIndices field on the chat response (requires backend deploy).
  • Option B fallback: if the API returns citations but the answer text uses none of them (5/109 of the auditor traffic, typically abstentions on out-of-corpus questions), the widget renders zero cards + an italicized “I couldn’t ground this answer in the transcript” message. The audit specifically praised abstentions — silently surfacing cards to an ungrounded answer would undo that.
  • Older backends that don’t send citedIndices are treated as ungrounded (safe default). Once every AskPod.API instance is on the new build, this becomes a no-op.

Expected impact per the Layer 1 shape query: mean cards displayed drops from 7.97 → 2.18, median 8 → 2. Reference-selection grade should move from 0/60 Good toward ≥40/60 on re-grade.

Backend contract: POST /feeds/{feedId}/chat and POST /feeds/{feedId}/chat/stream both now return citedIndices: number[] — 0-indexed positions into citations that the answer references via [N] markers.

v1.17.0 — 2026-08-09

Historical mode — a new session-payload attribute lets a host render a frozen Q&A transcript instead of running the widget live. When set:

  • Chat history hydrates from the payload — no fetches
  • Input row hidden entirely (no textarea, no send button)
  • Non-Chat tabs hidden (Search / Episodes / Targets would live-fetch, off-brand for a frozen viewer)
  • “Read-only historical view” banner rendered at the top of the chat pane
  • Cite-chip play buttons still work (audio playback is still consumption of historical data, no writes)

Used internally by the operator admin’s /qa-history detail view to replay past visitor conversations. Not intended for public embed use.

v1.16.0 — 2026-08-08

Chat retrieval knobs — two optional attributes let a host tune the widget’s chat behavior:

  • min-score (number 0-1) — cosine-similarity floor for chat retrieval. Chunks scoring below the floor are filtered before the LLM sees them. Overrides the server’s defaults when set. Higher = stricter.
  • no-results-message (string) — custom copy shown when retrieval falls below the confidence gate. Overrides the default (server’s feed-name-substituted “not enough matching content” message). Use for branded voice.

See Customization → Chat tuning (advanced) for guidance on when to use these.

Both are additive and default-preserving — existing embeds that don’t set these attributes get exactly the previous behavior.

v1.15.9 — 2026-08-08

Bug fix + polish — full-page overlay removed while waiting for a chat response. The prior behavior attached a semi-transparent overlay to the host site’s <body> whenever the widget was searching or chatting, which broke the embed contract by dimming the customer’s whole site during every question.

The in-widget shimmer bars were also expanded (from 1-3 to 5-15) so the answer pane clearly signals “answer is coming” without the full-page dim.

Older versions

Pre-1.15.9 releases lived in the archived standalone podsaid-widget repository (consolidated into the workspace in Phase F, 2026-08-08). If you need release notes for an older version, ask us on support.