Repository navigation
Conversation
Ticket 01 of the Svelte migration (.scratch/svelte-web-ui-migration/). Adds web/ (Svelte 5 + TypeScript + Vite + Tailwind v4), building into frontend/, which is now generated output instead of committed source. WaveSurfer, marked, and Inter become bundled npm deps, replacing frontend/vendor/'s manual pinning. RevalidatingStaticFiles is replaced with a narrower no-cache-on-index.html-only static mount, since Vite's build empties frontend/ on every run and a heuristically-cached index.html could otherwise outlive the hashed assets it references. CI (tests.yml, release.yml) and both Dockerfiles now build the Web UI via Node before packaging; package.py refuses to run without a prior asset build. tests/test_frontend_assets.py and two watcher-latency assertions are adapted off the deleted frontend/js/* source, with their guarantees either ported forward (web/src/lib/time.test.ts) or flagged for re-coverage in the tickets that rebuild those features. Landing on a dedicated branch rather than main: the big-bang rewrite (ADR-0001) means frontend/ has no full UI again until tickets 02 and 03 also land.
Ticket 02 of the Svelte migration (.scratch/svelte-web-ui-migration/). Adds the login gate, tab bar, hamburger drawer, and full Transcribe tab (drop zone, URL import, batch queue) as Svelte components, plus every Transcribe-sidebar setting: model/language, diarization, Cloud Power, LLM provider setup and model browser, benchmark, security (password) and backup panels, and meeting auto-capture with its onboarding/update banners. Also ports the floating recording-chip and job-queue widgets, the release update banner, the command palette (fuzzy-ranked commands + live recording search) with its keyboard shortcuts, and client console logging. State lives in per-domain `*.svelte.ts` rune modules under web/src/lib/ (auth, session, jobs, watcher, llm, ...) rather than one shared object, so each area's reactive state and its module-level helpers stay next to each other. The Transcript and Library tabs are left as placeholders — ticket 03 builds those out — but the job/watcher state they'll need (recordingId, transcriptEnabled) is already threaded through. Fixes a few bugs surfaced by /code-review along the way: batch-item upload percentage missing its ×100, the changelog modal popping up after its own "open GitHub in a new tab" fallback, a dropped save-settings-back-to-server call on restore, and an SSE reconnect counter that was shared across unrelated jobs instead of tracked per job.
Transcript tab: synced waveform playback, speaker legend and reassignment, in-transcript search, bulk speaker-assign/translate, live SSE segment streaming, AI hub (summary/actions/custom analyses), export (JSON/SRT/VTT/TXT/MD/CSV), and folder/tag editing from the sidebar. Library tab: recording cards with folder/tag filter sidebar, FTS5 full-text search, bulk move/tag/export/delete, and folder/tag create/rename/delete.
Ticket specs and scratch notes under .scratch/ are local working notes, not project source — untrack and gitignore them.
Replace TabBar with NavRail + TopBar, dock the AI Assistant panel and job queue into the layout (fixes the overlay overlap), consolidate the sidebar settings accordions into a SettingsModal, stream transcript segments live while a job runs, and apply a dark theme with IBM Plex Mono for technical text.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
frontend/index.html+ ES modules with a Svelte 5 + TypeScript + Vite app inweb/, built intofrontend/(generated, gitignored). Seedocs/adr/0001-big-bang-web-ui-rewrite.md.docs/adr/0003).release.ymland the PyPI wheel job now runnpm ci && npm run build --prefix webbefore packaging;package.pyrefuses to run without a builtfrontend/.Breaking for contributors: Node.js 22+ is now required to build the Web UI (
docs/adr/0002). Backend and TUI stay pure Python.Test plan
npm run build --prefix webnpm test --prefix web(12/12) andnpm run check(0 errors)pytest -q: 551 passed, 1 env-dependent failure (test_runtime_pack.py::test_a_missing_stack_with_no_manifest_says_sofails when pyannote is installed locally; unrelated to this branch). Run stopped at that failure with-x, so CI covers the remainder.python package.py(macOS): build succeeds; packaged app withAMICOSCRIPT_UI=noneserves the new bundle and/api/models,/api/settingsrespond.Known, not from this branch
/api/versionreturns""in the PyInstaller bundle:get_version()looks forVERSIONatparents[3], but the bundle places it in_internal/. Same onmain.🤖 Generated with Claude Code