rohitsar567 Claude Opus 4.7 (1M context) commited on
Commit
65ba46c
·
1 Parent(s): 4ae5278

fix(voice): KI-029 — make push-to-talk button visibly findable

Browse files

User report: screenshot of the live toolbar with Voice off (red dot) →
"no push to talk button". Root cause: the mic was a 40×40 icon-only
button immediately adjacent to the also-icon-only upload button. With
Grammarly's browser-extension icons overlapping the input area, the user
genuinely couldn't tell which button was which.

Changes:
• Mic button now shows the icon AND a "Push-to-talk" label (visible
on sm+ breakpoints; icon-only on mobile to save horizontal space).
• When Voice is OFF (red pill), the mic button is highlighted in
emerald with a soft outer ring and shadow — eye-catching call to
action that says "use this instead". When Voice is ON, the mic
stays neutral grey (since Live is the primary path).
• While recording, the button turns rose/red with a "Stop" label.
• Tooltips updated to spell out the consequence of each state — in
particular, "Voice will stay off until you click the red dot"
when PTT is used while Voice is off, so the user knows their
earlier off-toggle is preserved.

No behavioral changes; pure findability + clarity fix.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Files changed (1) hide show
  1. frontend/src/app/page.tsx +18 -4
frontend/src/app/page.tsx CHANGED
@@ -740,18 +740,32 @@ export default function Page() {
740
  >
741
  <UploadIcon />
742
  </button>
 
 
 
 
 
743
  <button
744
  type="button"
745
  onClick={recording ? stopRecording : startRecording}
746
  disabled={busy && !recording}
747
- className={`shrink-0 w-11 h-11 rounded-xl flex items-center justify-center transition-all ${
748
- recording ? "bg-[var(--error)] text-white animate-record-pulse" : "bg-[var(--muted)] hover:bg-[var(--border)]"
 
 
 
 
749
  } disabled:opacity-40`}
750
  title={recording
751
- ? "Push-to-talk: recording… click to stop or stay silent for 2s"
752
- : "Push-to-talk (pauses always-on listening for one turn)"}
 
 
753
  >
754
  {recording ? <StopIcon /> : <MicIcon />}
 
 
 
755
  </button>
756
  <button
757
  type="button"
 
740
  >
741
  <UploadIcon />
742
  </button>
743
+ {/* KI-029 (2026-05-14) — push-to-talk button is now LABELED and
744
+ visually highlighted when Voice is OFF, so the user can find
745
+ it. Was just a 40px icon indistinguishable from the upload
746
+ icon; user reported "no push to talk button" despite it
747
+ technically existing. */}
748
  <button
749
  type="button"
750
  onClick={recording ? stopRecording : startRecording}
751
  disabled={busy && !recording}
752
+ className={`shrink-0 h-11 px-3 rounded-xl flex items-center gap-1.5 transition-all text-sm font-medium ${
753
+ recording
754
+ ? "bg-[var(--error)] text-white animate-record-pulse"
755
+ : userPrefersLive
756
+ ? "bg-[var(--muted)] hover:bg-[var(--border)] text-[var(--foreground)]"
757
+ : "bg-emerald-600 hover:bg-emerald-700 text-white shadow-md ring-2 ring-emerald-300 dark:ring-emerald-700"
758
  } disabled:opacity-40`}
759
  title={recording
760
+ ? "Recording… click to stop, or stay silent for 2s"
761
+ : userPrefersLive
762
+ ? "Push-to-talk (one turn — Live resumes after)"
763
+ : "Push-to-talk — click and speak; Voice will stay off until you click the red dot"}
764
  >
765
  {recording ? <StopIcon /> : <MicIcon />}
766
+ <span className="hidden sm:inline">
767
+ {recording ? "Stop" : "Push-to-talk"}
768
+ </span>
769
  </button>
770
  <button
771
  type="button"