Release notes

v0.66.0· 2026-10-20

Added

  • Catalogue board. The catalogue is now three side-by-side columns — Masterclasses, MAMs and Other videos — each scrolling on its own with its header pinned, so every series is visible at once and the page itself never scrolls on a desktop screen. Older recordings load as you scroll; there are no more "Show older" buttons. On narrower screens the columns become tabs.
  • "New" badges. Recordings published since you started using the portal that you haven't opened yet are marked New, and each column header counts them (e.g. "MAMs 25 · 2 new"). Opening a recording clears its badge.
  • Per-column filters. Each column has its own filter box that matches on the recording's title, highlights the match, and only affects that column.
  • One search bar. Ask, Transcripts and Attendees are now modes of a single search bar above the board instead of three separate panels. The Attendees mode (who attended which meetings) is available to admins only — it is hidden from, and refused to, everyone else.
  • Masterclass rows show Day 1 / Day 2 links that open the player at that day's recording.
  • Player page tidy-up. Transcript search now highlights every match, shows "3 of 12" with previous/next arrows (Enter jumps to the next match) and a clear button; the speaker filter is a type-to-filter list ordered by how much each person spoke, with "Audio shared by …" entries grouped at the bottom. Guests and Topics sit in two tabs with counts; topic cards show the title only and expand on click to list where each topic is discussed. If the video fails to load, the player says so and offers a Retry instead of a black box. The browser tab is titled with the event name.
  • Real chapter titles. Chapters now get short, descriptive headings written during facts extraction, instead of the first few words of a transcript line. Recordings whose chapters haven't been titled yet (run Extract facts) don't show a chapter row; when they do, chapters appear in a single scrollable row.

Changed

  • Times on the player page are per day: the status line reads "Day 2 · Part 1 of 2 · 1:05:12 / 5:44:52" with the overall position secondary, part chips read "Part 1 · 3:13:03", and every transcript line is stamped with its own day and time — fixing Day 2 lines that were labelled Day 1.
  • The transcript loads one day at a time and only renders the lines on screen, so a two-day masterclass no longer downloads its whole transcript up front.
  • "Delete event" has moved into a ⋮ menu (admins only) and asks you to type the event name to confirm. The "Incomplete data" banner is now a small warning chip beside the title (admins only) that opens the repair action.
  • The session overview is shortened at a sentence boundary — never mid-word — and doubled punctuation is tidied.
  • Rows are compact: a series/month title card, the date (or date range) as the headline for Masterclass and MAM rows, the attendee count labelled as such, and the total duration in the thumbnail corner. The series tag only appears in the Other videos column, where it names the kind of recording (Webinar, Digital REM, …). A recording is only annotated when it has no transcript.
  • All dates on the catalogue are written as `17 Oct 2026`, never numerically, since the audience spans Australia and the US.
  • The catalogue loads much faster: it no longer fetches every recording's full attendee list just to draw the page.

Fixed

  • A stray horizontal scrollbar on pages with a vertical scrollbar.
  • Admins now see a warning on a playlist whose recording count doesn't match its listed days (e.g. two recordings but only Day 1), so missing days are easy to spot.

v0.65.0· 2026-10-15

Added

  • Live events. A new Events area (`/admin/events`) lets you set up an in-person event — Live REM or any custom event type — with its dates, speakers and notes, then upload the media team's recordings for each day. Every recording becomes its own catalogue entry with a transcript, summary, chapters and speaker/topic analysis, and the whole event plays as one playlist with Day markers and a chapter per session.
  • Uploads that survive real life. Recordings go straight from your browser to storage in resumable chunks: pick all of a day's files at once and they upload in the background while you keep working in the admin area. A dropped connection only costs the chunk in flight, going offline pauses and resumes automatically, your laptop is kept awake, and an upload interrupted by a reload or crash can be resumed later by re-picking the same file.
  • Automatic transcripts for non-Zoom video. Uploaded recordings are transcribed by Gumlet, so search, Ask and the watch-page transcript work for event footage just as they do for Zoom sessions. The event's speaker list is used to spell presenters' names correctly and classify their roles. A Fetch/↻ control on the event page re-runs the transcript for a recording.
  • Event Publisher role. The new `Portal.EventPublisher` Entra app role can create events and upload recordings without having the rest of the admin area; publishing to the external tier still needs an admin.
  • Event recordings can be renamed, reordered within a day, and (for admins) permanently deleted — including the uploaded master file.

Changed

  • Catalogue tiles for a playlist now show the number of recordings, and playlists with several recordings on one day show that day once rather than once per recording.
  • Uploaded masters now wait for Gumlet to finish processing before they are published, so their duration, poster and transcript are ready when they first appear.

v0.64.0· 2026-07-30

Added

  • A "Recent" section now tops the catalogue. It gathers every recording from the last couple of months regardless of program, so the newest sessions are always front and centre (they still appear in their own program section too). The program sections below are now headed "All masterclasses", "All MAMs" and "All other videos".

Fixed

  • The backfill picker's default date range no longer misses last night's recording. The end date defaulted to "today" in UTC, which — for admins in Australia checking before mid-morning — was still yesterday, so a recording from the previous evening silently fell outside the search window. The default end date is now padded a day ahead.

v0.63.1· 2026-07-26

Fixed

  • The watch-page health banner no longer cries "no transcript" for events whose transcripts clearly display. Some recordings carry a full, displayable transcript but an out-of-date "transcript available" flag; the admin banner and the one-click Repair keyed off that flag, so they wrongly reported missing transcripts and then found "nothing to repair." Both now judge transcript presence from the actual stored data, and Repair quietly corrects the stale flag when it finds one.

v0.63.0· 2026-07-26

Added

  • Ask can break down how long each person spoke in an event. A new speaking-time tool sums each speaker's transcript-cue durations, so the assistant can answer "how long did each presenter speak, in total and as a % of the session" with exact figures — per speaker, as a share of their talk time and of the whole event — instead of declining for lack of data. Works across both days of a Masterclass.

v0.62.1· 2026-07-26

Fixed

  • "Reload transcript from Zoom" now tells you what happened. It used to queue the job and always say "re-fetching…", even when Zoom had no transcript to give (so nothing ever appeared and it looked broken). The button now does the reload on the spot and reports the real outcome — the transcript restored (with a line count), that Zoom simply has no transcript for that recording, or the actual error if one occurs.

v0.62.0· 2026-07-25

Added

  • Admin data-health indicator + one-click repair on the watch page. When an admin opens a recording (or a playlist event) that's missing data, a banner now spells out exactly what's incomplete — no transcript, a transcript that isn't speaker-attributed, or AI facts (guests/topics/summary) not yet extracted — and a single Repair transcript & facts button queues only the jobs needed to fix it. Previously the page could only re-extract facts; it now also rebuilds the speaker-attributed transcript, which is what lets per-speaker counts (e.g. "how many times did G swear") cover that recording. The banner is admin-only and disappears once the event is complete.
  • Reload a missing transcript straight from Zoom. When a day of a multi-day event has no transcript, the transcript panel now says so honestly ("Transcript not available for this recording") instead of silently leaving another day's lines on screen, and admins get a Reload transcript from Zoom button that re-fetches the recording's transcript. If Zoom generated the transcript after the original import (so it was never stored), the reload now rebuilds the full transcript — searchable text, speaker-attributed cues and AI facts — not just the readable cues. The one-click event repair uses the same recovery, so a no-transcript day is fixed by it too, and it now says plainly when a recording genuinely can't be repaired (e.g. an upload with no Zoom source).

Fixed

  • Watch page no longer shows the wrong day's transcript. Playing a day that has no transcript used to leave the previous day's lines up as if they belonged to it; it now shows a clear "not available for this recording" notice.

v0.61.0· 2026-07-25

Added

  • Ask can answer questions about a specific event. The assistant has three new abilities backed directly by the database, not by fuzzy search: it can list every recording/event that exists (an authoritative catalogue answer to "what masterclasses are available"), summarise one event — its stored summary, guests and topics — and count exactly how many times a word or phrase is spoken in a chosen event, with example timestamps you can click. The counting works both for topics ("how many times was refinancing mentioned in the April Masterclass") and for language ("count the swearing in that session"), and — because the transcript is speaker-attributed — it can be scoped to a single person ("how many times did G swear"). Multi-day Masterclasses are treated as a single event.
  • Choose the Ask chat's model and reasoning effort at runtime. The Admin AI assistant tab now has a *Model & reasoning* card (clearly marked as affecting the "Ask the masterclasses" chat only — not transcript embeddings, search or fact extraction). A Check availability button confirms a typed model name is online and responding before you save it, so a mistyped model can't silently break Ask. Falls back to the configured defaults when unset.

Changed

  • More reliable Ask answers on reasoning models. The assistant now talks to the language model through its newer response API, so tool use and reasoning effort work together correctly — questions that previously failed on some models now answer normally.

v0.60.0· 2026-07-24

Added

  • Tune the AI assistant at runtime. Admins with the new `admin.settings` permission get an AI assistant tab in the Admin area to edit the assistant's guidance and business knowledge (facts, people, terminology, extra rules). Changes take effect immediately for new questions — no redeploy needed. The fixed structural core of the prompt (tool usage, citation and follow-up rules) is shown read-only for reference and remains managed in code for now.

v0.59.0· 2026-07-24

Added

  • Activity audit log. The portal now records who does what — sign-ins and sign-outs (with the client IP), video and playlist views, transcript searches and "Ask the masterclasses" questions, alongside the administrative and ingestion events already tracked. A new Audit page (in the top navigation) lets you search and filter this history by user, activity type, action, free text and date range, with paging through the results.
  • New `Portal.Auditor` app role. The Audit page is restricted to users with the `audit.view` permission, granted by either the existing `Portal.Admin` role or the new `Portal.Auditor` role. Assign `Portal.Auditor` in the Entra app registration to give someone read-only access to the activity log without full admin rights. (Requires adding the app role in Entra — see the roles reference in the code.)

Changed

  • Admin actions are now attributed to the person who ran them. Batch and maintenance operations (uploads, share links, library regroup/reclassify, queue retries, Gumlet health/repair, facts/summary/transcript backfills, orphan cleanup, and more) are recorded against the signed-in admin's email instead of a generic `admin` label, so the audit log shows exactly who did what. People/attendee searches are now logged too.

v0.58.0· 2026-07-24

Added

  • "Extract facts" and "Regenerate summary" buttons on the playback page. Admins now get two per-event actions in the header of any recording or playlist: *Extract facts* runs the full AI analysis (speakers, guests, topics and a fresh summary), and *Regenerate summary* re-writes just the overview from the already-extracted facts. No need to go to the admin queue tab to backfill a single event.

Fixed

  • Recordings that had a transcript but no speakers/topics/summary are now picked up by "Extract facts". The facts backfill previously keyed off a flag that some older imports never had set, so recordings with a perfectly good transcript were silently skipped. It now targets any published recording that actually has transcript text, so those gaps fill in.

v0.57.0· 2026-07-24

Added

  • AI meeting summaries. Each recording now carries a short one-to-two paragraph overview — naming the main presenter(s), the overall subject and the key topics discussed — written automatically from its transcript when facts are extracted. It appears on the watch/playlist overview, and on the catalogue an ⓘ button in the bottom-right corner of each tile opens a pop-over with the summary, so you can preview what a meeting covers without opening it. New imports get a summary automatically.
  • “Re-generate summaries” admin action. A new button in the admin queue tab re-writes just the meeting overview for every recording that already has extracted facts — reusing the existing speakers and topics rather than re-analysing the whole transcript, so it's much cheaper than a full re-extract. Use it to give existing recordings a summary, or to refresh the wording after a prompt improvement.

Fixed

  • Summaries for long meetings now cover the whole session. Previously a long recording's overview only reflected the first portion of its transcript; the summary is now synthesised from the complete set of extracted speakers and topics.

v0.56.1· 2026-07-24

Fixed

  • Staff without an assigned role could sign in but saw no videos and couldn't search. Any authenticated staff member now gets browse, search and watch access by default — signing in with your company account is enough. Download and admin abilities still require the matching role. The fix applies to everyone already signed in on their next page load; no need to log in again.

v0.56.0· 2026-07-24

Added

  • Filter the transcript by speaker. When watching a recording, a new *speaker* dropdown next to the transcript search lets you show just one person's lines. It works alongside the keyword search, and while a filter is active the transcript stays put instead of auto-scrolling to the playing line.

Changed

  • Refreshed home-page tools. The *Ask the masterclasses*, *Search transcripts* and *Find attendees* panels now sit together on a single row, each with its own colour, icon and a short one-line description so it's clearer at a glance what each one does.

v0.55.0· 2026-07-24

Added

  • Attendee list inside meeting playback. The watch and playlist pages now have an *Attendees* button that opens a searchable popup listing everyone who attended, sorted by time present. Each row expands to reveal that person's individual join/leave times (handy for spotting who dropped in and out), and clicking a name shows every other meeting they've attended — with a badge flagging people who've been to more than one.

Changed

  • Clearer attendee count chip. The attendee-count chip on catalogue tiles now has stronger contrast (darker pill, brighter border) so it stands out against busy thumbnails.

v0.54.0· 2026-07-24

Added

  • Attendee count on catalogue tiles. Each meeting tile now shows a chip on its thumbnail with the number of people who attended, so you can see turnout at a glance without opening the meeting. (Appears once attendees have been imported.)

v0.53.0· 2026-07-24

Changed

  • Transcript search results now stick around. Searching transcripts from the home page opens a results panel that stays put as you work through the matches: click a result to jump straight into that moment of the meeting, and when you come back the full list is still there. Results are now ordered most-recent meeting first (instead of an opaque relevance order) and show the meeting date, the one you’re currently viewing is highlighted, and up/down arrows step you through the list without losing your place. You can refine the search from inside the panel too.
  • The transcript is now readable. The transcript panel on the watch and playlist pages previously showed the raw passages used for search — long, overlapping blocks of text with the speaker names buried inline. It now shows a clean, speaker-by-speaker transcript: each speaker’s name is labelled above what they said, and their words are grouped into tidy paragraphs. Clicking a line still jumps the video to that moment.

Added

  • Meeting attendees. The portal now imports the list of people who attended each Zoom meeting — including when they joined and left, and their total time present. Attendees appear on the watch and playlist pages (in the side panel alongside guests and topics), the catalogue tiles show a total attendee count, and a new *Find attendees* search on the home page lets you look up a person by name or email to see every meeting they attended. Newly imported recordings pick up their attendee list automatically. (Zoom-sourced recordings only; requires the Zoom participant-list permission on the connected account and a Pro+ plan — attendee data is available for meetings held in the last 15 months.)
  • Admin: import attendees. A new pair of buttons on the admin *Queue* tab imports meeting attendees from Zoom. *Fill gaps* processes recordings that don’t have an attendee list yet; *Re-import all* redoes every recording.
  • Admin: rebuild readable transcripts. A new pair of buttons on the admin *Queue* tab re-fetches each recording’s captions from Zoom and rebuilds the new readable transcript. *Fill gaps* processes recordings that don’t have one yet; *Rebuild all* redoes every recording. Newly imported recordings get the readable transcript automatically. (Zoom-sourced recordings only.)

v0.52.0· 2026-07-23

Added

  • “Ask the masterclasses” now holds a conversation. Instead of a one-shot question and answer, you can keep the thread going — ask a follow-up in the *Ask a follow-up…* box, or click one of the suggested related questions, and the assistant answers in context of what you’ve already discussed. Each conversation is saved to your history, so you can reopen an earlier thread and pick up where you left off.
  • A redesigned, roomier Ask panel. The panel is wider and the question history is pinned to the header: your questions appear as a numbered list you can click to jump straight to the matching answer without scrolling, with related follow-up suggestions listed alongside. New answers scroll into view automatically.

Changed

  • Keyword search now runs on a dedicated Atlas Search index. Behind the scenes, the transcript keyword search moved from MongoDB’s built-in text search to an Atlas Search index, which improves relevance and stops keyword lookups from competing with the rest of the database for resources. Combined with the move to a dedicated database tier, this makes the “Ask” and search results noticeably faster.

v0.51.0· 2026-07-23

Added

  • The catalogue now shows how many recordings are still importing, and what stage each is at. A small summary next to the *Catalogue* heading counts the recordings in progress and breaks them down by stage (e.g. *“2 importing · 1 transferring · 1 encoding”*), so you can see at a glance whether new recordings are on their way. Each in-progress tile now names its current stage — *Transferring* (pulling the source across), *Encoding* (Gumlet transcoding), *Queued*, or *Import error* — together with the part number where relevant and a live progress bar and percentage when one is available, instead of a plain “Importing…” label.

Changed

  • The page footer now shows an Infinity Group Coaching copyright line in place of the previous internal/external governance note.

v0.50.0· 2026-07-23

Added

  • “Re-chunk & re-embed” for existing recordings. The admin queue tab has a new action that re-splits already-imported transcripts using the current passage-size and overlap settings (`LLM_CHUNK_TOKENS` / `LLM_CHUNK_OVERLAP_RATIO`) and re-embeds them, so recordings imported before those settings changed can adopt the new ‘~400-token, 30%-overlap’ sizing without a full re-import. It runs one background job per recording and replaces that recording’s stored search passages; the Atlas vector index only needs rebuilding if the embedding dimension also changed. The existing “Re-embed transcripts” action (same vectors, new model) is unchanged.

v0.49.0· 2026-07-23

Changed

  • Transcript search now indexes larger, overlapping passages for better answers. The text that powers “Ask the masterclasses” and transcript search is now split into ~400-token passages that overlap their neighbours by ~30%, instead of smaller, hard-cut segments. Overlap means a point that’s made across a natural break is still captured whole in at least one passage, so relevant moments are less likely to be missed and answers cite better context. The passage size and overlap are configurable via `LLM_CHUNK_TOKENS` (default 400) and `LLM_CHUNK_OVERLAP_RATIO` (default 0.3); both default sensibly when unset. Existing recordings keep their current index until re-embedded (admin → queue → “Re-embed transcripts”); newly imported recordings use the new sizing automatically.

v0.48.4· 2026-07-22

Security

  • Resolved all 6 Dependabot advisories (1 critical, 1 high, 3 moderate, 1 low). Upgraded the test tooling (`vitest` 2 → 3) which removed the critical Vitest UI file-read/exec advisory and the high/moderate Vite dev-server issues bundled beneath it, bumped `esbuild` to 0.25.x for the worker build, and pinned `cookie` to 0.7.x (the only advisory reaching the production runtime, via SvelteKit) through an `overrides` entry. `npm audit` now reports 0 vulnerabilities. No application code or runtime behaviour changed.

v0.48.3· 2026-07-22

Fixed

  • Finished recordings sometimes had no thumbnail on the catalogue, showing the plain coloured cover even though the video had fully processed. Every import now captures its poster from Gumlet the moment it publishes, instead of relying on the processing-complete webhook (which didn't always land), so a thumbnail appears as soon as the recording goes live. Existing recordings that were missing a thumbnail have been backfilled.

v0.48.2· 2026-07-22

Fixed

  • "Importing…" catalogue tiles never showed a thumbnail, even once Gumlet had already generated one for a segment that finished transcoding. In-progress recordings now show a real thumbnail as soon as one's available, instead of always falling back to the plain coloured cover until the whole import finishes.

Changed

  • Reduced import job-queue churn. While a segment is genuinely still transferring/transcoding, the background poll now backs off (up to every 3 minutes) once nothing has changed between checks, instead of unconditionally re-checking every 20 seconds for the entire multi-hour import. Polling snaps back to the fast 20s rate the moment real progress resumes, so nothing gets noticed later than before — it just stops generating thousands of no-op job records for long, genuinely idle stretches.

v0.48.1· 2026-07-21

Fixed

  • Misleading import-progress label for a validated segment. The importing- recording panel labelled a segment "Fetching from staging…" once Gumlet reported it as `validated` — but that status actually means Gumlet has *already* fetched and checked the source file and is just waiting its turn to start encoding, a later stage than "Queued". The label now says "Validated — waiting to transcode…" so it doesn't look like an earlier segment is further behind than it really is.

v0.48.0· 2026-07-21

Changed

  • New recordings now transcode to plain MP4 instead of adaptive HLS. This matches the Gumlet workspace's updated processing settings, cuts transcode work roughly 8x per import (one rendition instead of eight resolution variants), and fixes video playback on non-Safari browsers, which couldn't play the previous HLS stream natively. Download links keep working unchanged for both new MP4-native recordings and existing HLS recordings.

v0.47.1· 2026-07-21

Fixed

  • Download links now work for recordings that have MP4 downloads enabled. The Download panel was reporting every segment as “unavailable (download not enabled)” even for recordings whose MP4 renditions had already been generated, because it looked for the download link in the wrong place. It now reads Gumlet’s actual download URL, so recordings with downloads enabled offer their highest-resolution MP4 as expected. Recordings that genuinely predate the download feature still correctly show as unavailable (use *Regenerate MP4 downloads*). No re-processing is needed for recordings already regenerated — their links simply appear now.

v0.47.0· 2026-07-20

Added

  • The catalogue now remembers where you were when you come back to it. When you open a recording and return — via the browser back button, the *Back to catalogue* link, or the top navigation — the page restores exactly what you had: your filter text, which sections were expanded, and the recording you last opened. That recording's tile is scrolled back into view, briefly highlighted, and keeps a subtle selected border so you can immediately pick up where you left off instead of scrolling from the top again.

v0.46.1· 2026-07-20

Fixed

  • Stopped re-running (and re-billing) AI transcript analysis on recordings that already have it. The structured "facts" extraction that identifies speakers and guests was being re-triggered every time a recording's video was re-pulled — including the routine repair passes and, most costly, the new library-wide *Regenerate MP4 downloads* retrofit, which re-analysed the entire library in one sweep. Because the transcript never changes when only the video is re-transcoded, this repeatedly charged for identical results and burned through OpenAI credits. Extraction now runs only when a recording has no facts yet; deliberate re-analysis is still available via the Admin Backfill facts action.

v0.46.0· 2026-07-20

Added

  • Library-wide *Regenerate MP4 downloads* action on the Admin dashboard. Rather than opening each recording's Download panel one at a time, admins can now trigger a single sweep that walks every published Zoom-sourced recording, preflights the Zoom source, and queues a re-pull for each part that doesn't yet have an MP4 rendition. Recordings whose Zoom source has expired are skipped so their currently-playable copy stays intact. Reports back how many recordings were scanned, queued, skipped and errored.

v0.45.1· 2026-07-20

Added

  • Retrofit MP4 downloads onto older recordings. Recordings imported before v0.45.0 didn't have MP4 renditions generated. The Download panel now shows a Regenerate MP4 downloads button (for admins with the queue permission) that re-pulls each affected segment from the Zoom source with MP4 output enabled. The re-pull is preflighted against Zoom — if the source recording is no longer available (Zoom retains ≈120 days), the segment is skipped so we never destroy a currently-playable copy without a replacement. Progress appears on the watch page as usual and the fresh MP4 download link becomes available once Gumlet finishes transcoding.

Note for administrators

  • Zoom source availability is required for the retrofit; older recordings where Zoom has expired the source cannot be regenerated (they'll show the reason in the skipped list). Individual segments can also be re-uploaded via the existing Split & replace flow if the Zoom source is gone but you have an MP4 copy elsewhere.

v0.45.0· 2026-07-20

Added

  • Download the source MP4 for a recording. A new Download button on the watch page (single or grouped playlist) reveals a per-segment link list — each entry names the segment, shows its size, and links straight to the highest-resolution MP4. Right-click *Save link as…* if your browser opens video inline.
  • New app role `Portal.Downloader`. Grants exactly the download capability (plus the existing view/watch permissions) so you can hand out downloads without giving out admin. Portal.Admin still gets the download permission by default.

Changed

  • Segment sizes appear on progress bars from the start. Each in-progress segment now shows its total size (e.g. *Segment 1 of 2 · 1.4 GB*) as soon as the import starts, rather than only once the upload begins.

Note for administrators

  • Add the new Portal.Downloader app role to the Entra app registration (Value: `Portal.Downloader`) and assign it to users who should be able to download.
  • Downloads are only available for recordings imported on or after v0.45.0 — earlier imports were transcoded without MP4 renditions. Existing recordings will show *download not enabled* in the panel; ping if you need a retro-fit admin action to enable MP4 output on older assets.

v0.44.0· 2026-07-20

Changed

  • Recording segments now import in parallel with Gumlet's transcoding. Up to three segments of the same recording can be in flight at once — while an earlier segment sits in Gumlet's encoding queue, the next segments upload themselves into staging in the background instead of waiting their turn. On a multi-segment recording that means the last segment often lands on Gumlet by the time Gumlet is done with the first, cutting total wall time significantly. Everything still checks in with Gumlet every 20 seconds so the progress panel updates as each segment moves along.

v0.43.1· 2026-07-20

Fixed

  • Progress bars now keep ticking during the Gumlet phase. After a segment finished uploading to staging, the bar sat on the moving stripe with no numeric progress — not helpful when transcoding an hours-long recording. It now reads Gumlet's own encode percentage (0–100), and when Gumlet has validated the source but hasn't started encoding yet the panel says so explicitly ("Waiting in Gumlet's encoding queue…") instead of just spinning.

v0.43.0· 2026-07-20

Added

  • Live progress bars for a recording that's still importing. Opening an *Importing…* recording now shows every segment with its current phase and a live progress bar while it's uploading to the staging bucket (with GB transferred out of the total), then flips to the Gumlet phase label (*Preparing on Gumlet*, *Fetching from staging*, *Transcoding*) once the file has been handed off. The panel auto-refreshes every few seconds so you can actually see it move, and the existing Retry / Delete buttons stay right there if it does get stuck.

v0.42.1· 2026-07-20

Fixed

  • Recordings that never finished importing now open to a usable page. Before, clicking an *Importing…* tile (or any recording that hadn't reached the published state) landed on a bare *Recording not found* screen — with no way to reach the delete or retry controls, forcing a database poke to clean it up. Those pages now show what state the recording is in, the last error (if any), and, for admins, buttons to Retry import or Delete recording so you can either kick it along or bin it and start over.

v0.42.0· 2026-07-20

Added

  • Guest pills now jump straight to where the guest actually speaks. Just like topic pills have since v0.41, clicking a guest in the sidebar now lists every discussion band where they are speaking on the recording (with an *N appearances* count on the sidebar tile) instead of scanning the transcript for their name. This ends stray matches like *Kerry Stevenson* lighting up on every mention of *Kerry Packer*.

Note for administrators

  • Videos extracted before this version don't yet carry per-speaker time bands. Run Backfill facts (fill gaps) once — the default sweep now also picks up videos whose speakers have no bands, so no need to force a full re-run. While you wait, older videos still fall back to the name-matching used in v0.41.4.

v0.41.4· 2026-07-20

Fixed

  • Guest and topic pills no longer include unrelated mentions. Clicking a guest like *Kerry Stevenson* was matching every line that mentioned any "Kerry" (e.g. Kerry Packer), because the mentions panel also searched for bare first names. It now looks for the full name, and only falls back to a bare surname when it's unique among the playlist's guests. Multi-word topics (legacy videos that haven't been re-extracted yet) also stop matching every line that shares a single word.

Note for administrators

  • Videos imported before v0.41.0 still carry plain-text topics without discussion timestamps; run Backfill facts to give them precise time bands, which is the real fix for topic accuracy. The change above only reduces the false positives while a video is waiting to be upgraded.

v0.41.3· 2026-07-20

Fixed

  • Repair queue no longer stalls after a big batch. Once a segment finished repairing (or the retry gave up), its slot on the repair queue wasn't being released, so newly-queued repairs could sit waiting behind work that had actually finished. Slots are now returned to the queue the moment a video reaches Ready or Failed, so a bulk Repair all keeps flowing steadily rather than appearing frozen after the first few items.

v0.41.2· 2026-07-19

Fixed

  • Repaired recordings now stick instead of failing to load again. When a segment was re-pulled, the portal was clearing its temporary staged copy the moment the video host started working on it — but the host was sometimes still downloading that copy, so it failed with a "couldn't find the file" error and the segment stayed broken on every health check. The staged copy is now kept until the host has fully finished, so re-pulled segments complete reliably.

Note for administrators

  • After this update, use Repair all (or Reload on an individual video) to re-pull the handful of segments that were stuck in this loop; they should now complete rather than re-report as broken.

v0.41.1· 2026-07-19

Changed

  • Clarified the admin Extract facts (fill gaps) button: it now also refreshes older videos whose topics predate discussion timestamps, so the button text no longer implies it only touches videos with no facts at all.

v0.41.0· 2026-07-19

Changed

  • Clicking a topic now jumps to where it was actually discussed. Fact extraction records the real time-bands where each topic is covered (a topic can have several), so the watch page's topic list links straight to those moments instead of guessing from keywords. This fixes topics like “Property flipping and joint-venture risk” previously matching every line that merely contained a common word such as “property”. Each topic in the left rail shows how many separate discussions it has.

Note for administrators

  • Existing videos keep their old keyword behaviour until their facts are re-extracted. Run Backfill facts in Admin to upgrade the catalogue — the default run now automatically re-processes any video whose topics predate this change, so no “force all” is required.

v0.40.0· 2026-07-19

Changed

  • Watch page redesigned around the video. The session facts no longer crowd out the player. The layout is now: a compact full-width Overview (with a “Show more” toggle) and a single-row Chapters strip across the top, then a three-column stage — a slim, filterable Guests & Topics rail on the left, the video taking the hero centre column at roughly two-thirds of the width, and the transcript / mentions panel on the right. Type in the rail's filter box to quickly find a guest or topic, then click it to jump through their mentions as before. On narrow screens the three columns stack.

v0.39.1· 2026-07-19

Fixed

  • “Check Gumlet health” no longer raises false alarms. Gumlet's live status flaps — it can briefly report a recording as broken during its own background re-processing and then recover a minute or two later. The scan now waits for a second confirmation before flagging anything: a recording that looks broken on one pass is held as “re-checking” rather than reported as a fault, and is only listed as broken if the next scan still finds it broken (a scan that finds it healthy clears it). This stops the “12 broken → rescan → all fine” whiplash and keeps the catalogue from showing phantom “segments unavailable” warnings.

v0.39.0· 2026-07-19

Added

  • Jump to where a guest or topic appears. On a recording's Session details panel, click any guest or topic — the transcript side panel switches to a list of every moment they're mentioned, each with a short snippet and a timestamp you can click to jump straight to that point in the video. Close it to return to the full transcript.

Changed

  • Tidier Session details panel. Overview, Guests and Topics now stack vertically with clearer headings and spacing, and the guest/topic pills are interactive (hover and click) instead of static labels.

v0.38.0· 2026-07-19

Changed

  • "Ask the masterclasses" is clearer while thinking and easier to read. While an answer is being generated the pop-up now shows your question with a spinner, and the finished result puts your question (in bold italics) above a divider, then the answer below it, so the two are clearly separated.
  • Re-running a saved question no longer duplicates it. Asking a question you already have in "Your questions" now just refreshes that entry and moves it to the top, instead of adding a second copy — so repeatedly re-running the same question can't push your other questions off the list.

v0.37.0· 2026-07-19

Added

  • Per-segment playback is now logged. When a viewer starts playing a segment of a recording, the server logs who watched which segment of which recording/group (viewer, recording label, day and segment number). It records once per segment as playback begins — pausing and resuming the same segment doesn't repeat the entry — so the logs show exactly which parts of an event each person actually watched.

v0.36.0· 2026-07-19

Added

  • Sign-in, sign-out, playback and AI-query activity is now logged. The server records who signs in and out, each internal watch/playlist request (which recording, which viewer, and whether it was ready), embed-player play/end events, and the full text of questions sent to the "Ask the masterclasses" assistant and other AI calls. Like the existing background logging, these lines are structured and controlled by `LOG_LEVEL` and `LOG_FORMAT`, so the portal's real usage can be followed and, later, fed into a log aggregator or analytics tool. High-frequency player heartbeats and bulk transcript processing stay at the `debug` level to keep normal logs readable.

v0.35.0· 2026-07-19

Added

  • Structured, verbose server logging for imports, transfers, health checks and repairs. Background processing now emits consistent machine-parseable log lines (component, event, asset/job id, timings, byte counts) instead of ad-hoc text. This makes it far easier to follow a recording through transfer, diagnose why a repair stalled, and — later — plug the logs straight into a log aggregator or alerting tool. Verbosity is controlled by `LOG_LEVEL` (debug/info/warn/error) and the format by `LOG_FORMAT` (logfmt or json).

v0.34.2· 2026-07-19

Fixed

  • The repair queue no longer freezes behind a stuck fact-extraction. A knowledge-extraction request that stalled with no response could hang the background worker indefinitely, leaving every remaining repair "pending" with nothing happening. Those requests now time out and retry instead of hanging.
  • Repairs and transfers now run ahead of fact-extraction. Making broken recordings playable is prioritised over background knowledge extraction, so a batch of repairs completes promptly and fact-extraction backfills afterwards rather than blocking the queue.

v0.34.1· 2026-07-19

Fixed

  • Failed transfers to cloud staging now report the real reason. A rejected upload previously logged a generic "UnknownError"; it now shows the actual cause (for example, an invalid storage access key) in both the server log and the segment's error detail, so misconfiguration is obvious at a glance.

v0.34.0· 2026-07-19

Changed

  • Very large recordings now transfer reliably, without getting the portal stuck. Each recording is now copied to durable cloud storage first, and the video service then fetches the finished file from there using a link that stays valid for a full day. Previously the portal streamed recordings straight into the video service, which could be interrupted part-way on the biggest events (25 GB and up) and leave a corrupt, unrecoverable upload that showed a processing error no matter how many times it was repaired. The new staging step means the video service only ever receives a complete file, and an interrupted copy simply retries cleanly. "Repair all broken segments" uses this same method, so previously stuck events can now be recovered.

Fixed

  • The portal no longer restarts itself during long imports. A background error while transferring a multi-hour recording could previously crash the whole service and interrupt every job in flight, which is what made large imports appear to loop. The service now stays up through these errors and retries just the affected segment, and it records clear progress messages for each transfer so long-running imports can be followed and diagnosed.

v0.33.0· 2026-07-18

Added

  • Repair queue can no longer be restarted mid-run. The "Repair all broken segments" button is now disabled while a repair batch is still working, and triggering a repair while one is in flight is a no-op that tells you how many are still running. This prevents accidentally re-queuing everything from scratch, which was the churn behind repairs appearing to loop.

Changed

  • Very large recordings now transfer to the video host reliably. The portal now streams each recording to the video service itself, one bounded chunk at a time, instead of handing the video service a time-limited link to fetch on its own. Previously the biggest events (25 GB and up) could not finish downloading before that link expired, so they got stuck showing a processing error no matter how many times they were repaired. "Repair all broken segments" now uses this same streaming method, so those stuck events can finally be recovered.
  • "Monthly Accountability Session" now counts as MAM. Recordings titled "Monthly Accountability Session" are treated as the same program as "Monthly Accountability Meeting" — they're kept on import and listed under the MAM category instead of falling into Other. A new admin "Reclassify categories" action re-derives every existing recording's category from its title and re-groups, so already-imported recordings can be moved into the right category without re-importing.

v0.32.0· 2026-07-17

Fixed

  • Recordings stop "repairing then breaking again". A recurring loop where a batch of recordings would report healthy right after a repair and then show as broken again an hour or two later has been fixed at three points:
  • Re-fetching a recording's source now hands the video service a freshly minted access credential with plenty of remaining life, so the large multi-gigabyte downloads can no longer outlive it mid-transfer (the actual cause of the "input file could not be downloaded" errors).
  • The health check no longer reports a segment as healthy while it is still being processed. A part only counts as good once processing has genuinely finished, so a scan can't show "all clear" moments before those parts fail.
  • A repair will never re-pull a segment that is still playable, so a working copy can't be wiped and replaced by a failed re-fetch.

v0.31.0· 2026-07-17

Fixed

  • "Ask" now recognises everyone who appeared, not just the opening hour. When building the who-appeared record for a session, the portal was only reading the first portion of long recordings, so anyone introduced later — most often recurring guests across a multi-hour masterclass — was left out. Questions like "how many sessions has [guest] been on?" then came back far too low. The portal now reads across the whole recording, so recurring speakers are counted properly. (Re-run Extract facts on existing recordings to refresh their records with the fuller analysis.)

v0.30.0· 2026-07-17

Fixed

  • A live recording can no longer spontaneously break itself. Previously, a recording that had been repaired and was playing fine could later flip back to a processing error "for no reason": a late or stray signal from the video service would trigger an automatic re-fetch of the original meeting source, which by then has usually expired — quietly wiping out the good copy. The portal now leaves already-published recordings untouched on those signals and simply flags them for review, so a healthy recording stays healthy. (An admin can still choose to reload a recording manually.)

Changed

  • Unavailable segments are now clearly marked. In the segment picker on the watch page, any part that's still processing shows a warning "!" badge and is greyed out, so it's obvious which piece is temporarily missing.
  • Catalogue rows fill up evenly. Each category now reveals whole rows of tiles that fit the width of your screen, instead of stopping partway through a row and leaving empty space — so you see more recordings at a glance before needing "Show older".

v0.29.0· 2026-07-17

Added

  • A pinned, contrasting title bar. The top navigation bar now stays put at the top of the page as you scroll and stands out from the page behind it, so the brand, catalogue/admin links and your account menu are always within reach.

Changed

  • Wider, roomier layout. The portal now makes better use of large screens — the catalogue and tools spread across more of the page, showing more recordings per row.

Fixed

  • A single still-processing segment no longer blocks a whole recording. If one part of a multi-segment recording is being repaired or is still transcoding, the recording now plays every segment that is ready and clearly marks the unavailable one, instead of showing a blanket "processing error" for the entire event. This is why a freshly-repaired Masterclass could still look broken even though most of it was watchable.

v0.28.0· 2026-07-17

Added

  • Recording tiles now show real thumbnails. Instead of a plain coloured cover, each catalogue tile displays the recording's own poster image, so the catalogue is much easier to scan at a glance. Existing recordings pick up their thumbnails the next time an admin runs Check gumlet health (top of the admin queue), and new recordings get theirs automatically once processing finishes. Anything without a thumbnail yet still shows the tidy coloured cover.

v0.27.0· 2026-07-17

Added

  • Your account menu now lives under your name, top-right. Your Microsoft profile photo appears as an avatar (with your initials as a fallback if you don't have one), and clicking it opens a tidy menu with your details, the new appearance switcher, and Sign out — instead of the name and button sitting loose in the header.
  • Light, Dark and Auto appearance modes. Pick the look you prefer from the account menu. Auto follows your device's system setting, and your choice is remembered on this browser.

Changed

  • The catalogue is now organised into sections — Masterclass, MAM and Other. Each section shows the newest recordings first and keeps older ones tucked behind a Show older button, so you can find recent sessions at a glance without scrolling past everything. The filter box still searches across all of them.
  • Refreshed recording tiles. Tiles now have a colourful cover with a play button and the recording's length, a clearer title, and a subtle lift when you hover — and the catalogue makes better use of wide screens while still working well on a phone.

v0.26.2· 2026-07-16

Fixed

  • Healthy recordings no longer get repeatedly flagged as damaged. After repairing broken segments, running Check gumlet health could re-flag a batch of videos that were actually playing fine, forcing another repair — an endless loop. The cause was an automated background process that kept re-pulling segments that were already working: it re-pulled a whole multi-part recording whenever a single segment briefly reported an error, and never marked finished imports as playback-ready so they were re-checked forever. Now a finished import is marked ready immediately, and the background process only re-pulls the specific segments that are genuinely broken, leaving working ones untouched. Stale "damaged" flags clear themselves on the next health check.

v0.26.1· 2026-07-16

Fixed

  • Split & replace no longer fails on large parts with "413 Payload Too Large". Split pieces were being sent through the portal on their way to Gumlet, so anything bigger than the CDN's request limit (~100 MB) was rejected before the upload could finish. Each part now uploads straight to Gumlet from your browser, so parts of any size go through, with the same live per-part progress. If a part's upload fails partway, its half-created Gumlet asset is cleaned up automatically.

v0.26.0· 2026-07-16

Changed

  • Split & replace now uploads the pieces directly — no external hosting. When you split an over-long recording, you no longer need to host the pieces anywhere. The Split & replace panel now takes a file for each part and streams it straight to Gumlet through the portal, with a live upload percentage per part. Enter each part's length in minutes (so the transcript and chapters stay in sync), pick the files, and hit Upload & replace — the portal handles the rest, one part at a time.

v0.25.0· 2026-07-16

Added

  • Split & replace an over-long recording (admin → queue → health scan). Zoom recordings longer than 600 minutes can't be pulled into Gumlet whole, so they show up flagged after a health scan. Each broken segment now offers a Split & replace action: it gives you a fresh download link for the source, and a small form to paste in the URLs and durations of the parts once you've split the file locally into pieces under 600 minutes each. The portal then pulls the replacement parts in, keeps the rest of the event untouched, and clears the error — the combined transcript and chapters stay in sync.

Changed

  • A single broken segment no longer marks a whole event as errored on the home page. When only part of a multi-part recording has a problem, the tile now reads “N of M segments unavailable” in a softer amber instead of a blanket red “Playback error”, so events that mostly play fine are no longer made to look completely broken.

v0.24.0· 2026-07-16

Changed

  • “Repair all broken segments” now runs as a throttled, visible queue. Instead of kicking off every broken event's re-download at once (which could swamp Zoom and cause fresh failures), repairs are queued and processed only one or two at a time. A new Repair queue panel on the admin queue tab shows each recording as pending, in progress, done, or failed, with live progress — so you can watch the batch work through the backlog and see exactly which events succeeded.

v0.23.1· 2026-07-16

Changed

  • The admin page now remembers which tab you're on. Selecting a tab (Approvals, Backfill picker, Upload master, Share links, Import queue) updates the URL, so refreshing or sharing the link keeps you on that tab instead of bouncing back to Approvals.

v0.23.0· 2026-07-16

Added

  • “Repair all broken segments” button (admin → queue). Instead of reloading each failed event one at a time — which re-downloads the entire recording — this scans every event and re-pulls only the individual segments that are actually broken (errored or missing), leaving the good segments untouched. Multi-part events re-fetch just their failed parts with a fresh Zoom token; single-file recordings are re-pulled whole. Reports how many events and segments it re-queued.

v0.22.4· 2026-07-16

Fixed

  • Recordings stuck showing a stale “error” now heal themselves. A transient hiccup during a multi-part import (e.g. the Zoom download token expiring mid-transfer) could leave an event marked failed even after every segment had since transcoded and become playable — so a perfectly good recording kept showing a red “error” in the admin transfers list and was never re-evaluated. The Gumlet health check now detects these fully-playable-but-flagged events and restores them to a clean published state (clearing the stale error markers), reporting how many it repaired (“N restored”).

v0.22.3· 2026-07-15

Fixed

  • Reloading a recording that plays fine no longer breaks it. The reconcile / “Reload” path treated any segment Gumlet marked `errored` as needing a re-pull, even when that segment still had a working playback URL. On an older recording whose Zoom source has since expired, re-pulling fetched a dead source and clobbered the good video — so a recording that played before Reload stopped playing after it. Reload/reconcile now leaves any still-playable segment untouched (marking it ready) and only re-pulls segments that are genuinely not playable.

v0.22.2· 2026-07-15

Fixed

  • A recording that plays fine is no longer flagged with a “Playback error”. The health scan treated any segment Gumlet reported as `errored` as broken, even when that segment still had a working playback URL (Gumlet can mark an asset `errored` when a single encode profile fails while the main video plays perfectly). A segment is now only counted as a fault when it is both errored and genuinely not playable, so healthy recordings stop showing a false error on the catalogue.

v0.22.1· 2026-07-15

Fixed

  • Gumlet health check is now deterministic. A transient Gumlet API blip (rate-limit / 5xx / network) during a scan was being treated as a missing video, so the “issues” list changed on every click and briefly flagged healthy recordings as broken on the catalogue. Segment lookups now retry transient failures, only a genuine 404 counts as missing, and an inconclusive lookup is reported as a benign “unknown” (never flagged as a fault).
  • “Ask the masterclasses” works again on GPT-5-class models. Function tools on `/chat/completions` are rejected unless `reasoning_effort` is `'none'`, so tool-driven answers 400'd. The tool-calling request now sets that for reasoning-class models.

v0.22.0· 2026-07-15

Changed

  • Single recordings now use the same wide layout as multi-session playlists. Previously an ungrouped recording (e.g. a one-off MAM) opened in a narrow column with the transcript hidden below, while grouped events got the wide video-left / live-synced-transcript-right view. Both pages now render one shared `WatchStage` component fed a “playlist of one”, so every recording looks and behaves identically (segment nav, chapters, session details, time-synced transcript).

v0.21.3· 2026-07-15

Changed

  • “Ask the masterclasses” now shows the real failure reason instead of a generic “Unable to answer right now.” The underlying error is returned as data (and logged server-side) so failures can actually be diagnosed.

v0.21.2· 2026-07-15

Fixed

  • Segment-transfer errors now show the real Gumlet failure reason instead of `[object Object]`. When Gumlet returned its error as a structured object (rather than a plain string), the reason was stored and displayed verbatim. It is now coerced to readable text.

v0.21.1· 2026-07-15

Fixed

  • “Ask the masterclasses”, auto-summaries and facts extraction work again on the new model. Newer models (e.g. GPT-5 / o-series) only accept the default sampling temperature, and the app was still requesting a custom one — causing every chat/extraction call to fail with a 400 error. The temperature is now omitted for those models.

v0.21.0· 2026-07-15

Changed

  • Smarter transcript search. Recording search and “Ask the masterclasses” now use a higher-fidelity embedding model (`text-embedding-3-large`, 3072 dimensions), improving how well the right moments in a recording are found.

Added

  • Re-embed transcripts (admin). A new “Re-embed transcripts” action in the Import queue tab regenerates every recording’s search vectors with the current embedding model — needed after an embedding-model change. It runs as background jobs, one per recording.

v0.20.0· 2026-07-15

Added

  • Broken recordings are now flagged on the home page. When the Gumlet health scan finds a recording with an errored or missing video, that result is saved, so the fault stays flagged without having to re-run the scan. Affected recordings show a red “Playback error/unavailable” marker on their catalogue tile.
  • Right-click a flagged recording to reload it. Admins can right-click any recording marked with a playback problem and choose “Reload recording” to re-run the fix (re-queuing a fresh transfer where possible). The flag clears once the reload is triggered and is re-confirmed by the next health scan.

v0.19.0· 2026-07-15

Added

  • Check every recording's health on Gumlet in one click. The Import queue tab has a new “Check Gumlet health” button that live-checks every recording's video segments against Gumlet and flags any that are errored or missing. Problem recordings appear in a red-highlighted list where you can expand them to see each segment's status and either reload or delete the recording on the spot.
  • “Ask the masterclasses” answers now link straight to the source video. Each numbered reference in an answer is now a clickable link that jumps to the exact moment in the recording it came from, alongside a full list of sources.
  • Your past questions are remembered. Answers now open in a pop-up, and every question you ask is saved to a personal history (your most recent 50). You can revisit a saved answer, re-run an old question to get a fresh answer, delete individual questions, or clear the whole list.

Changed

  • “Ask the masterclasses” and “Search transcripts” now open in a pop-up. Results appear in a focused modal window instead of expanding the card inline, keeping the home page tidy.

v0.18.0· 2026-07-15

Changed

  • Long, multi-part recordings now import reliably. Previously a recording split into several segments (for example a full-day, 8-part event) was handed to Gumlet all at once using a single Zoom download pass. On long events that pass could outlive Zoom's ~1-hour download window, so the later segments failed to download and the recording never finished importing. Segments are now transferred one at a time, each with a freshly issued Zoom link, so even very long events come across in full.

Added

  • See import progress as it happens. Recordings that are still transferring now show up right away — on the home catalogue as an “Importing… part X of N” tile, and on the watch page with the same live progress — so it's clear a recording is on its way rather than missing.
  • Fix or remove a single bad segment. The Import queue tab has a new “Segment transfers” panel where each in-progress or failed multi-part recording can be expanded to see its individual segments and their status. You can retry just the one segment that failed (with a fresh Zoom link) or delete a single segment — without having to delete and re-import the whole event.

v0.17.0· 2026-07-15

Added

  • Admins can now delete a failed import from the queue. When a recording is imported but the import fails part-way (for example a transcript step errors out), it doesn't appear on any playlist — so there was no way to remove it and it also kept that Zoom recording from showing up as a fresh candidate to try again. The Import queue tab's “Failed transcodes” list now has a Delete button (admins only, with a confirmation) that fully removes the failed record and any partial media from Gumlet. Once deleted, the recording reappears in the backfill picker so it can be re-imported cleanly.

v0.16.0· 2026-07-15

Added

  • Admins can permanently delete a broken event. The watch page now has a “Delete event” button (admins only) that completely removes the selected event and every video in it — transcripts, chapters, share links and engagement — from the portal, and also deletes the underlying media from Gumlet. It's guarded by a clear confirmation because it can't be undone. This is for the occasional recording that transcodes badly and simply won't play: nuke it and re-import cleanly from Zoom.

v0.15.3· 2026-07-14

Changed

  • Chapter markers stay visible when the details panel is collapsed. Chapters now sit in their own slim, always-on strip beneath the collapsible session details, so you can still jump between moments even with the facts folded away.

v0.15.2· 2026-07-14

Changed

  • The session details panel is now collapsible. The extracted facts bar can be folded away to a single “Session details” line (showing the guest/topic/ chapter counts) so the video gets more room, and your choice is remembered between sessions. The watch page also tightens up to sit fully within the browser window without a lingering scrollbar.

v0.15.1· 2026-07-14

Fixed

  • The session facts are now readable and the watch page fits your screen. The extracted intelligence (summary, guests, topics, chapters) was squeezed into a cramped, unreadable box in the corner. It now sits in a full-width bar above the player where each part has room to breathe, and chapters are clickable chips. The page also pins cleanly to the height of your browser window so it no longer runs slightly past the bottom edge.

v0.15.0· 2026-07-14

Added

  • The playback page now shows what each session is about. When you open a session to watch it, a new panel surfaces the intelligence we extract from the recording: a short summary, the guests who appeared (colour-coded for clients and partners, with their profession and organisation where known), the key topics covered, and clickable chapters that jump straight to that moment. No need to scrub through the video to find out who's in it or what's discussed.

Changed

  • The watch page now fits your screen and uses the full width. The video and transcript previously stretched far below the fold, leaving lots of empty space on either side. The page is now constrained to the height of your browser window — the video sits alongside the facts panel and a scrollable transcript — and it spreads across the full width of the screen instead of a narrow central column.

v0.14.1· 2026-07-14

Fixed

  • Program-specific "Ask" questions now stay in that program. Asking something like "which Masterclass sessions had clients appear?" previously returned MAM and other program sessions too. The assistant now filters strictly by the named program — and knows that "Masterclass" means the Masterclass program only, not MAM or Digital REM.

v0.14.0· 2026-07-14

Changed

  • "Ask the masterclasses" now answers who-and-how-many questions too. The assistant used to only search what was *said* in the recordings. It now also draws on the structured facts index behind the scenes, so a single question box handles both kinds of question — "what did the coach say about lead qualification?" and "which sessions had a guest client speaker?" or "how many masterclasses has Mark the accountant been in, and which ones?" — and can combine them. It automatically counts and lists sessions from the database (rather than guessing), and every answer still links straight to the relevant recording. Users don't need to know or care where each part of the answer comes from; they just ask in plain language.

v0.13.0· 2026-07-14

Added

  • The portal now understands who's in each recording. When a session is imported (and for your existing library, on demand from the Admin page), it reads the transcript and records structured facts about it: who spoke, which speakers were external guests, and — for guests who are partner professionals such as accountants, lawyers, financial advisors, mortgage brokers or buyers' agents — what they do and which firm they're from, plus the key topics covered. Recurring people are recognised across the whole library, so the same partner is counted as one person even when their name is spelled slightly differently. This turns questions the old search couldn't reliably answer — "show me every video with a guest client speaker", or "how many masterclasses has Mark the accountant been in, and which ones" — into exact, countable lookups. Admins can run a one-click backfill to extract facts across the existing catalogue.

v0.12.0· 2026-07-14

Added

  • Catalogue tidies itself when a recording is deleted at the video host. If a video (or one segment of a multi-part recording) is deleted in Gumlet, the portal now hears about it instantly and cleans up: it removes just that segment and re-stitches the timeline when other segments remain, or removes the whole entry — along with its transcript, share links and view analytics — when nothing is left. No more dead tiles pointing at videos that no longer exist.

Fixed

  • More reliable "recording is ready" detection. The video-host webhook now recognises every flavour of Gumlet's completion signal, so a recovered recording is marked playable the moment it finishes rather than waiting for the next background sweep.

v0.11.0· 2026-07-14

Added

  • Failed recordings now recover on their own. When a backfill imported a large batch of Zoom recordings, some would finish processing while others got stuck showing "Processing (errored)" because the download link had expired before the video host finished pulling the file. The portal now automatically re-fetches those recordings with a fresh link, retrying a few times before giving up, so the catalogue fills in without anyone having to intervene.
  • See why a recording failed. The watch page and catalogue now surface the actual reason a recording failed to process instead of a generic message.
  • Retry stuck recordings from Admin. The Import queue tab has a new "Failed transcodes" list showing recordings that failed to process, each with a Retry button to re-run it on demand.
  • Faster recovery via video-host notifications. A new webhook lets the video host tell the portal the instant a recording becomes ready or fails, so recovery happens in seconds rather than waiting for the next background sweep.

v0.10.0· 2026-07-13

Added

  • Synced, searchable transcript beside the playlist player. Playlists now use the full width of the screen: the video sits on the left and the complete transcript (both days combined) runs down the right. The transcript scrolls and highlights in time with the overall playback position, and you can click any line to jump there. A search box lets you find a phrase across the whole event and jump straight to the moment it was said.

v0.9.0· 2026-07-13

Added

  • Segment navigator on playlists. Multi-segment playlists (e.g. a two-day Masterclass split into several parts) now show a row of numbered segment buttons above the player, grouped by day, with the segment you're watching highlighted. Click any segment to jump straight to it. The player also shows your overall position across the whole event (e.g. "Overall 1:45:32 / 12:15:37") rather than only the time within the current segment.

v0.8.0· 2026-07-13

Added

  • Retire broken recordings from Admin. A new "Retire broken assets" button in the Import queue tab finds catalogue entries whose video-host source was deleted or never created — the ones that showed up as unplayable tiles — and hides them from the catalogue. Nothing is deleted; the records are just marked so they stop appearing, and can be restored if needed.

v0.7.0· 2026-07-13

Added

  • Filter the catalogue by title. A quick filter box on the catalogue lets you narrow the tiles as you type — e.g. type "MAM" to see only the Monthly Accountability Meetings.
  • Two-day events show each day's date and length. Masterclass playlist tiles now list Day 1 and Day 2 with their individual dates and durations, instead of a single combined line.

Fixed

  • Recordings now play as soon as they're available. Videos were showing "Processing…" and refusing to play even though they were watchable, because we waited for the video host's final "ready" flag. Playback now starts as soon as a stream URL exists, so recently imported sessions play immediately.

v0.6.0· 2026-07-13

Added

  • Sessions are now grouped into named playlists. Recordings for MAM, Masterclass and Digital REM are grouped by month — e.g. "MAM Dec 2025" — and the two days of a Masterclass are paired into a single event named for the first day ("Masterclass Jan 2025", covering Day 1 and Day 2 even when they straddle a month boundary like Jan 31 / Feb 1). The catalogue shows one tile per group; opening it plays every day and segment back-to-back in order, with "Day 1 / Day 2" chapter markers. Grouped assets are renamed to match in Gumlet ("Masterclass Jan 2025 Day 1", etc.). Search results and "Ask the masterclasses" answers now cite these group names and deep-link into the combined playlist (e.g. "In Day 2 of the Mar 2025 Masterclass…"). Admins can re-pair and rename the existing library at any time from the Import queue tab ("Regroup & rename").
  • The backfill picker now hides unrelated recordings by default. The candidate list is filtered to titles mentioning one of our programs (Masterclass, MAM, Accountability, REM, Real Estate Mastery), so the list isn't cluttered with unrelated Zoom meetings. A checkbox lets admins turn the filter off to see every candidate, and the count shows how many are hidden.

v0.5.0· 2026-07-13

Added

  • Import queue visibility in Admin. A new "Import queue" tab shows how ingestion is running: live counts (pending / processing / done / failed), a worker health indicator (active / idle / no-activity), and the most recent jobs with their attempts and any error. Failed or stuck jobs can be requeued with one click. The view auto-refreshes while open.

v0.4.0· 2026-07-13

Changed

  • The background import worker now runs inside the main app by default, so queued recordings are picked up and processed automatically without a separate service to provision or keep alive. This removes a class of "imports queued but nothing happens" incidents. Advanced deployments can still run a dedicated worker by setting `RUN_WORKER_IN_WEB=false`.

Fixed

  • Imports no longer fail when Gumlet collections are configured by name. The `GUMLET_COLLECTION_*` settings can now be either a collection's id or its human-friendly name (e.g. `Internal`); the portal looks the name up against the Gumlet account and caches the result. Previously a name was sent straight to Gumlet as an id, so every import failed with "collection not found". If a configured name can't be matched, the error now lists the available collections.

v0.3.0· 2026-07-13

Added

  • Long, multi-part sessions now play as a single continuous video. Zoom splits all-day recordings (e.g. a full Masterclass day) into several segments, and our video host can't stitch them back together. The portal now imports each segment and plays them back-to-back automatically, so a three-part day plays straight through as one video — including in externally shared embeds. A "Part X of N" indicator shows where you are, and chapters/transcript search jump to the right moment across the whole session.
  • Transcripts now come from Zoom and cover the entire session. We use Zoom's own transcripts (which are more accurate than auto-generated captions) and merge the per-segment transcripts into one, so search and chapter markers line up with the combined recording rather than restarting at each segment.

v0.2.0· 2026-07-13

Added

  • Connect a single Zoom account without account-owner setup. When the Zoom account owner isn't available to create a Server-to-Server app, an admin can now switch to "user" mode and have one Zoom user (e.g. the host whose sessions we want) sign in and approve access once from the Admin page. The portal then keeps that connection alive automatically. The Admin page shows whether Zoom is connected and by whom.
  • See the current version and what's new. The version number now appears in the header; clicking it opens a panel with the release notes.

Fixed

  • Connecting Zoom no longer fails with a "Redirect URL is required" error. When the Zoom redirect address was left blank in configuration, the portal now falls back to the correct address automatically instead of sending Zoom an empty value.
  • The backfill picker now shows candidates as soon as you build them. After scanning Zoom for historical recordings, the matching sessions appear immediately instead of requiring a page refresh. Approving quarantined imports updates the list right away too.
  • Recording durations are now accurate for long, multi-part sessions. Recordings that Zoom splits into several files (e.g. an all-day Masterclass) previously showed only the length of the first part — a 9-hour session might have read as 4h46m. Durations now reflect the full recording.

v0.1.0· 2026-07-13

Added

  • Automatic recording intake. Eligible Zoom recordings are picked up on their own, matched against the programs we care about (Masterclass, MAM, Digital REM), and short or unrelated calls are filtered out before they ever reach the catalogue.
  • Approve-by-text workflow. New recordings trigger an SMS to the reviewer, who can approve, reject, or reclassify a recording with a single reply — no need to log in to triage.
  • Searchable video catalogue. Every approved session is transcribed, chaptered, and made searchable. You can jump straight to the moment in a video where a topic was discussed.
  • Ask the masterclasses. A natural-language "ask" box answers questions using the actual content of the recordings and links you back to the source moments.
  • Secure internal viewing. Staff sign in with their existing company (Microsoft Entra) account. What each person can see and do is controlled by their assigned role.
  • Governed external sharing. Selected sessions can be shared with prospects through time-limited, domain-locked embeds — links stop working when they expire or are revoked.
  • Engagement insight. External viewing is tracked (who watched, how much, how often) so the sales team gets meaningful signals about prospect interest.
  • Admin dashboard. A single place to review and approve incoming recordings, backfill older ones, upload masters, manage share links, and see engagement.

Security

  • Company sign-in via Microsoft Entra SSO with role-based access control.
  • External embeds are signed and domain-locked, with expiry and revocation.
  • Secrets are supplied through environment variables and are never committed to the repository.

Masterclass Review Portal

Secure, searchable access to recorded Masterclass, MAM and Digital REM sessions. Sign in with your organisation account to continue.

Sign in with Microsoft
© 2026 Infinity Group Coaching. All rights reserved.