Oportunități Soft de Îmbunătățire
Lucruri care ar face produsul mai bun fără refactoring major. Ordonate după impact × efort. Nici una nu e blocantă pre-2026-05-20. Sursa: blindspot analysis + sesiunea 2026-05-16
🟢 Impact mare, efort mic (<2h)
S1. Bell sound feedback la +1 manual filler
Ce: Beep audio la click buton +1 în UI Numărător›.
De ce: Numărătorul tradițional TM folosea clopoțel fizic. Fără feedback sonor, riști să apeși de două ori sau să ratezi.
Implementare: Web Audio API, 5 linii JS.
const ctx = new AudioContext();
function beep(freq=880, ms=60) {
const o = ctx.createOscillator(), g = ctx.createGain();
o.frequency.value = freq; o.connect(g); g.connect(ctx.destination);
g.gain.setValueAtTime(0.15, ctx.currentTime);
g.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + ms/1000);
o.start(); o.stop(ctx.currentTime + ms/1000);
}
Locație: packages/ai-service/app/static/app.js lângă +1 manual handler.
S2. Speech type detection automată (Speech / TT / Eval)
Ce: La n <name>, CLI întreabă sau detectează dacă speakerul face Prepared Speech / Table Topics› / Evaluare. Afectează: Cronometror› praguri corecte + Grammar analysis calibrat pe durată.
De ce: Cronometrul avertizează la 2:30 pentru ORICE speaker — greșit pentru un speech de 7 min.
Implementare: Prompt opțional în CLI + fallback auto (sub 3 min = TT›), sau YAML pre-ședință.
Efort: 1.5-2h. Risc: zero.
S3. Word of the Day — derivate morfologice
Ce: Dacă WoD› e „perspicace”, detectează și „perspicacitate”, „perspicaces” etc.
De ce: Oficial TM — derivatele contează! Cineva care folosește „perspicacitate” a folosit corect WoD.
Implementare: La cuv <wod> în CLI, Claude generează 3-5 derivate → stocate în session state → transmise în promptul de grammar.
Efort: 1h.
S4. YAML tic pre-config per speaker
Ce: Înainte de ședință, declari: cornel: ["în fine", "să zic așa"]. Tool-ul adaugă regex-uri custom pentru Cornel în filler_detector.
De ce: TM Sibiu are vorbitori regulari cu tic-uri cunoscute. Prima ședință cu un set nou pierzi primul meeting de calibrare.
Implementare: templates/known_tics.yaml + filler_detector.detect_text_fillers(extra_patterns=...).
Efort: 1.5h.
🟡 Impact mare, efort mediu (2-5h)
S5. Filler categories în raport (4 buckets oficial TM)
Ce: Grupează filler-ele în raportul Numărătorului după categoriile oficiale:
- 🔊 Sunete vocale (ăă, hmm, ah)
- 💬 Cuvinte umplutură (deci, adică, gen)
- 🔁 Expresii repetitive (să zic așa, eu eu)
- 📢 Sunete non-verbale (plescăieli)
De ce: Raportul oficial TM Sibiu ar trebui să urmeze format standard.
Implementare: Adaugă bucket câmp în FillerEvent + grouping în _render_fisa_numarator.
Efort: 1.5-2h.
S6. Pre-flight verification script
Ce: scripts/preflight.sh — verifică înainte de fiecare ședință:
- AudioCapture binary prezent + permisiuni
- ai-service health OK
- venv-uri intacte
- Disk space ≥1GB
- Whisper model warm
- Zoom process detectabil
De ce: Elimini verificările manuale pre-ședință. Anti-panic concret.
Implementare: Bash script + integrare în start.sh.
Efort: 1.5h.
S7. Pathways tracking per speaker
Ce: La n <name>, tool-ul știe: „Cornel e pe Presentation Mastery L2, Proiect 3 — Effective Body Language (5-7 min)”. Evaluatorul vede ce criterii să urmărească.
De ce: Context valoros pentru evaluare + motivație pentru vorbitor.
Implementare: YAML pre-ședință + render în fișa Gramatician›/Evaluator›.
Efort: 2h.
S8. Discoverability sesiuni trecute (FTS5)
Ce: SQLite FTS5 index pe toate sesiunile din sessions/ → poți căuta: „când a mai spus «în fine» Cornel” sau „toate speech-urile cu WoD «perspicace»”.
De ce: Pavel a menționat „Silviu căutabil” — paradigma sesiunilor căutabile.
Implementare: Index SQLite la iesi + CLI command cauta <query>.
Efort: 3-4h.
🔵 Impact mediu, efort mic (nice-to-have)
S9. Indicator vizual când pipeline e mort
Ce: Când MicPipeline abandonează (50× WS fail), UI să afișeze 💀 „Pipeline mort — audio restart în CLI” în loc de 🔴 silențios.
De ce: Situația din 2026-05-16 ora 20:47 — nu era clar de ce nu se vede semnal.
Implementare: Event pipeline_dead emis din run_with_auto_restart la abandon definitiv → banner UI.
Efort: 45 min.
S10. Anti-blocking pattern formalizat (decorator)
Ce: Un decorator Python @anti_blocking(skip_on=..., timeout_sec=...) pe care orice handler de role-module îl aplică.
De ce: Faza 2 va adăuga 5+ module — fiecare trebuie să fie fail-silent. Standardizare previne reinventarea roții.
Implementare: packages/ai-service/app/utils/anti_blocking.py.
Efort: 1h.
S11. Volume auto-save/restore mai robust
Ce: audio_device_manager.py deja face save/restore. Dar dacă Zoom schimbă device-ul în mijlocul sesiunii, se pierde contextul.
De ce: Incident practic — Zoom poate reseta device-ul output dacă intri în breakout room.
Implementare: Watchdog periodic (la fiecare 30s) care verifică dacă device-ul curent e cel așteptat.
Efort: 30 min.
⚪ Long-term (Faza 3+)
- Accessibility: screen reader support, WCAG AA contrast, keyboard nav
- GDPR compliance doc: pentru lansare în cluburi externe
- Multi-club session isolation: configurație per club
- Mobile PWA: browser MediaStream adapter + UI responsive
- Evaluator support module: transcript + metrics per speech pentru evaluatorii individuali