Skip to content

Voice Search — Krótki plan

Pełny plan: context/changes/voice-search/plan.md

Co i dlaczego

Dodajemy ikonę mikrofonu do pola wyszukiwania przepisów. Użytkownicy (zwłaszcza starsi, obsługujący aplikację na mobile) mogą powiedzieć nazwę przepisu zamiast go wpisywać — rozpoznana fraza trafia do Exa i wyniki pojawiają się automatycznie.

Punkt wyjścia

AddRecipeForm ma już tab “Wyszukaj przepis” z wyszukiwaniem przez Exa. Input ma ikonę Search po lewej — prawa strona jest wolna. SpeechRecognition (Web Speech API) dostępne w Chrome i Safari, nieobecne w Firefox.

Pożądany stan końcowy

Użytkownik widzi ikonę mikrofonu w polu wyszukiwania. Jedno tapnięcie → przeglądarka prosi o mikrofon → rozpoznaje mowę po polsku → wyniki Exa pojawiają się bez dodatkowego kliknięcia. W Firefoksie ikona jest niewidoczna (graceful degradation).

Kluczowe podjęte decyzje

DecyzjaWybórDlaczego (1 zdanie)
Zachowanie po STTAuto-submitJeden krok dla użytkownika, naturalne mobile UX
Pozycja micWewnątrz inputa, prawa stronaCzysty, znany wzorzec (jak Google Search)
Obsługa błędówCzerwony komunikatSpójny z istniejącą obsługą błędów Exa
Nieobsługiwane przeglądarkiUkryj przyciskGraceful degradation, brak mylącego UI

Zakres

W zakresie: Mic button w search tabie, Web Speech API, auto-submit do Exa, błąd przy braku uprawnień, ukrycie w Firefoksie.

Poza zakresem: Interim results, wake-word, animacje waveform, zmiany backendu.

Architektura / Podejście

Czysto kliencka zmiana w jednym pliku. startVoiceSearch() wywołuje SpeechRecognition, na wynik bezpośrednio wywołuje searchViaExa(transcript) (pomijając formularz). Dwa nowe stany: 'recording' i 'mic_error'.

Fazy w skrócie

FazaCo dostarczaKluczowe ryzyko
1. Mic button + voice recognitionDziałający voice search w Chrome/SafariSSR crash jeśli window sprawdzone poza guardem

Wymagania wstępne: Brak (Web Speech API wbudowane w przeglądarkę, nie wymaga kluczy API). Szacowany nakład pracy: ~1 sesja, ~30 linii kodu.

Otwarte ryzyka i założenia

  • Safari iOS wymaga webkitSpeechRecognition (prefix) — obsłużone przez window.SpeechRecognition || window.webkitSpeechRecognition.
  • Rozpoznawanie jakości polskiego STT zależy od przeglądarki/systemu — brak kontroli po stronie aplikacji.

Kryteria sukcesu (podsumowanie)

  • Kliknięcie mic w Chrome → wyniki Exa bez ręcznego wpisywania.
  • Odmowa mikrofonu → czytelny komunikat po polsku.
  • Firefox / nieobsługiwane przeglądarki → brak przycisku mic, wyszukiwanie tekstowe bez regresji.