From 0ecbeca01c028b3562f16a3501ac10c61a742ba8 Mon Sep 17 00:00:00 2001 From: TheMeinerLP Date: Sun, 23 Aug 2026 16:06:48 +0200 Subject: [PATCH] feat(console): give one recording the room to be several things MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The recording page was one long scroll: a metadata card, a tag editor, a transport, an administrator's panel, and then one player and one spectrogram per speaker. Every part of it was worth having and no two of them answered the same question, which is the shape a tab bar is for. Four tabs. `meeting` is the transport, the protocol link, what was written about the meeting and who was in the room; `tracks` is one player and one spectrogram per speaker with the file's own measurements beside the audio they describe; `transcript` is the words from the new endpoint; `details` is the title, the description, the reader's tags and — for an administrator — the re-queue panel. There is no metadata tab. The session's own facts sit above the bar, because every tab is about that meeting and somebody reading the transcript should not have to leave it to find out when the meeting was. The audio measurements went the other way, into the row of the track they describe: a sample rate is the answer to "why does this one sound wrong", and that is asked while listening to that track. `meeting` is first, so a bare address opens it and `uiTabs` keeps the plain URL plain. The transcript is one query parameter away, which is the point of a tab having an address. Editing a title and a description is one control for two fields, because `PUT /sessions/{id}/name` replaces: a form with a Save beside the title would delete the description whenever somebody fixed a typo in the name. `~/utils/sessionNaming` is arranged so no half body can be built. Three empty states are told apart rather than collapsed: audio erased by retention with the transcript surviving it, a transcript still decoding, and a meeting in which nobody said anything the engine could hear. A session nobody consented to reports no available audio too, and says so in its own words rather than claiming a deletion that never happened. --- console/app/components/RecordingName.vue | 216 ++++++++ console/app/components/RecordingTrackList.vue | 156 ++++++ .../app/components/RecordingTranscript.vue | 141 +++++ console/app/pages/recordings/[id].vue | 512 +++++++++++------- console/app/utils/recordingTabs.ts | 121 +++++ console/app/utils/recordings.ts | 121 +++++ console/app/utils/sessionNaming.ts | 172 ++++++ console/app/utils/transcript.ts | 228 ++++++++ console/i18n/locales/de.json | 57 +- console/i18n/locales/en.json | 57 +- console/test/recordingName.spec.ts | 227 ++++++++ console/test/recordingRow.spec.ts | 5 + console/test/recordingTabs.spec.ts | 135 +++++ console/test/recordingTrackList.spec.ts | 148 +++++ console/test/recordingTranscript.spec.ts | 176 ++++++ console/test/recordings.spec.ts | 123 +++++ console/test/sessionNaming.spec.ts | 215 ++++++++ console/test/transcript.spec.ts | 229 ++++++++ 18 files changed, 2849 insertions(+), 190 deletions(-) create mode 100644 console/app/components/RecordingName.vue create mode 100644 console/app/components/RecordingTrackList.vue create mode 100644 console/app/components/RecordingTranscript.vue create mode 100644 console/app/utils/recordingTabs.ts create mode 100644 console/app/utils/sessionNaming.ts create mode 100644 console/app/utils/transcript.ts create mode 100644 console/test/recordingName.spec.ts create mode 100644 console/test/recordingTabs.spec.ts create mode 100644 console/test/recordingTrackList.spec.ts create mode 100644 console/test/recordingTranscript.spec.ts create mode 100644 console/test/sessionNaming.spec.ts create mode 100644 console/test/transcript.spec.ts diff --git a/console/app/components/RecordingName.vue b/console/app/components/RecordingName.vue new file mode 100644 index 0000000..a3cf762 --- /dev/null +++ b/console/app/components/RecordingName.vue @@ -0,0 +1,216 @@ + + +