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.
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 (defaultcitation-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 tofeed.websiteUrl + citation.sectionUrlon 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 nosectionUrlor the feed has nowebsiteUrlso 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:
Clearbutton 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
citedIndicesfield 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
citedIndicesare 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.