Skip to content

feat(AUD-69/73/74/75): app shell, recording view, idle screen, session detail#14

Merged
yoonwaiyan merged 12 commits into
mainfrom
waiyanyoon/aud-69-72-73-74-app-shell-screens
Mar 15, 2026
Merged

feat(AUD-69/73/74/75): app shell, recording view, idle screen, session detail#14
yoonwaiyan merged 12 commits into
mainfrom
waiyanyoon/aud-69-72-73-74-app-shell-screens

Conversation

@yoonwaiyan

Copy link
Copy Markdown
Owner

Summary

  • AUD-69: AppShell with 265px sidebar (session list + "New Recording" button), RecorderContext to share recorder state, SessionList/SessionListItem with real-time reload on IPC events
  • AUD-73: SessionListPage refactored to idle-only screen (mic button, template dropdown, static waveform)
  • AUD-74: RecordingPage with elapsed timer, stop button, live waveform; conditionally rendered by AppShell during recording
  • AUD-75: SessionDetail with session header, status badges, Summary/Transcript tab bar, react-markdown summary, timestamped transcript with accent-coloured timestamps

Architecture notes

  • Router updated to use AppShell instead of MainLayout; /sessions/:id added as child route
  • RecorderContext wraps AppShell so recorder state persists across content swaps without navigation
  • audist:transcript:read IPC handler added (reads transcript.txt from session dir); exposed via preload

Test plan

  • Start a recording — sidebar shows "Recording…" item, main area shows RecordingPage
  • Stop recording — transitions back to idle, new session appears in sidebar
  • Click a session — SessionDetail loads with correct header/badges
  • Summary tab shows rendered markdown; Transcript tab shows timestamped lines
  • Folder icon opens session folder; copy icon copies summary to clipboard
  • Status badges update live when transcription/summary complete

🤖 Generated with Claude Code

yoonwaiyan and others added 12 commits March 14, 2026 22:17
…n detail

- RecorderContext: share recorder state across AppShell without route changes
- AppShell: sidebar (265px) with session list + "New Recording" button; main
  area swaps between RecordingPage (while recording) and Outlet (idle)
- SessionList/SessionListItem: real-time reload on transcription/summary events
- SessionListPage: refactored to idle-only screen with template dropdown and
  mic button
- RecordingPage: elapsed timer, stop button, live waveform
- SessionDetail: session header, status badges, Summary/Transcript tab bar,
  react-markdown summary, timestamped transcript; reloads on IPC events
- router: replace MainLayout with AppShell; add /sessions/:id child route
- IPC: add audist:transcript:read handler; expose via preload

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…le screen

- Remove TemplateDropdown from SessionListPage until AUD-52 backend is ready
- New Recording button navigates to / instead of starting recording directly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AppLogo: match Figma SVG exactly (5 centred bars, flat accent fill, no gradient)
- RecordingPage: replace animate-pulse dot with animate-ping RecordingPulse pattern
- AppShell: resizable sidebar (180–380px drag handle), updated logo area with border-b,
  recording indicator uses animate-ping, New Recording button changed to ghost/accent
  outline style, toolbar uses lucide Settings icon with border-b
- SessionListItem: rewritten to Figma sidebar style — name + time on row 1,
  monospace duration on row 2, accent left-bar active indicator, transcribing
  progress bar
- SessionList: recording in-progress item updated to animate-ping dot pattern
- SessionDetail: add audio player bar (play/pause, scrubber, speed selector),
  inline meta badges for transcription/summarisation status, tabs use bottom-border
  active indicator, transcript renders speaker names with accent colour
- Fix session detail bug: component was keeping stale session state when navigating
  between sessions; now resets and reloads whenever route id changes
- tokens.css: add --color-text-tertiary, --color-accent-secondary
- main.css: add --color-surface / --color-surface-raised aliases + new token mappings
- Add lucide-react dependency

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add data-testid="session-item" to SessionListItem for reliable test selection
- session-history: update empty state text, swap li→[data-testid] locators,
  update duration format (1m 30s → 01:30), replace status badge assertions with
  dot/progress-bar checks; error message now verified via SessionDetail navigation
- summarisation: rewrite 4 inline-expand tests to use the new SessionDetail flow
  (click session → verify summary/buttons in detail view)
- permissions/prefs-window/save-directory: replace broken <header> locator with
  sidebar complementary role selector for the audist wordmark

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a centralised keybinding system so shortcuts can be registered and
changed in one place, then wires up ArrowUp/ArrowDown to cycle through
complete sessions with wraparound. E2E tests cover next, prev, wrap,
and input-focus guard.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes the simulated timer-based player UI from SessionDetail.
Real playback will be wired up in AUD-80 once the custom protocol
and preload API are in place.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Type KEYBINDINGS as Record<string, KeyBinding> (satisfies was
  narrowing optional modifier fields away, causing TS2339 errors)
- Remove stale setCurrentTime/setIsPlaying reset calls left over
  from the playback bar removal

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Tooltip component (CSS group-hover, no lib dependency)
- Wrap Reveal in Finder and Copy summary buttons with hover labels
- Copy button icon swaps to Check (green) on copy
- "Summary copied to clipboard" popover appears above the button on copy

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces the inline CSS group-hover tooltip with a createPortal
implementation that renders at document.body, escaping overflow-hidden
parents and toolbar stacking contexts. The copy button drives the
"Summary copied to clipboard" confirmation via Tooltip's open prop.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ary buttons

title attributes were removed when switching to the portal Tooltip component.
Added aria-label to both buttons and updated the e2e test to match.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename tooltip from "Summary copied to clipboard" to "Copy summary to clipboard"
- Remove MoreHorizontal button with no action from session detail header
- Clamp tooltip x-position to viewport edges so it doesn't overflow on the right

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@yoonwaiyan yoonwaiyan merged commit 2885b7d into main Mar 15, 2026
3 checks passed
@yoonwaiyan yoonwaiyan deleted the waiyanyoon/aud-69-72-73-74-app-shell-screens branch March 22, 2026 11:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant