Rozwój Produktu

Release Notes — 26 kwietnia 2026

Release Notes — 26 kwietnia 2026

19 dni temu wydaliśmy duży release z modułem diagnostycznym i analizą prozodii. Od tamtej pory zespół wypchnął kolejne 295 zmian — i to nie są drobiazgi. W tym wydaniu sesje ad-hoc nagrasz zanim pacjent w ogóle przyjdzie, twoje notatki łączą się z pracą AI i transkrypcją w trzech kolumnach, profil publiczny terapeuty wraca w pełnej formie, a aplikacja mobilna dostała dark theme. Pod maską przeszliśmy hardening pod SOC 2 / HIPAA, audit DDD i pełną pseudonimizację danych pacjentów po stronie modeli AI.

💚 Podziękowania dla zespołu, który napędził ten release — zgłoszeniami, testami, kodem i cierpliwością:

  • Bohdan — sesje ad-hoc, limity pakietu i karencja, audit DDD, faktury KSeF, dziesiątki bugfixów (SCRUM-756, 815, 1267, 1268, 1276, 1280-1290, 1293, 1309-1316, 1353-1357, 1366, 1388, 1391, 1392)
  • Bartek — 3-way merge, 9 osobnych analiz CBT, zniekształcenia poznawcze, limit sesji w pakiecie (SCRUM-1266, 1320, 1338, 1368-1375, 1385, 1386)
  • Ewa Cylwik / Ewa — PDF konceptualizacji, druga sesja AITS dla tego samego pacjenta, dark theme i pusty stan w mobile, mailing wielojęzyczny, kolory w UI, unikalność emaila pacjenta (SCRUM-883, 898, 902, 1089, 1094, 1297, 1304, 1307, 1319)
  • Joanna — kalendarz cykliczny, ukrycie Zoom, sesja odwołana na czas, autorefleksja zamiast oceny jakości (SCRUM-789, 874, 918, 919, 1005)
  • Plus Bartłomiej za zniekształcenia poznawcze i licznik sesji, który stał się fundamentem nowego modelu subskrypcji

1. ⚡ Sesje ad-hoc — nagraj zanim przyjdzie pacjent

Jeśli kiedyś musiałeś szybko włączyć dyktafon — bo pacjent przyszedł nieumówiony, bo to konsultacja jednorazowa, bo to spotkanie z pacjentem, którego nie ma jeszcze w kartotece — nowy moduł sesji ad-hoc rozwiązuje cały ten ból.

  • Quick Record Button w pulpicie web, w PWA na telefonie i w aplikacji MAUI — jedno kliknięcie startuje nagrywanie zanim w ogóle uzupełnisz dane pacjenta
  • AdHoc Inbox — osobna skrzynka, w której lądują nagrania nieprzypisane do nikogo, dopóki nie zdecydujesz czemu
  • AssignPatientModal — przypisz nagranie do istniejącego pacjenta lub utwórz nowego z poziomu skrzynki
  • Wznów / Wejdź ponownie do pokoju — możesz dokończyć nagrywanie sesji, którą zaczęłaś wcześniej
  • Retencja orphan + auto-complete — sesje nieprzypisane przez X dni automatycznie się zamykają, żeby skrzynka nie puchła
  • Wideo “Start bez pacjenta” — w pokoju LiveKit możesz rozpocząć sesję bez kolizji z istniejącym pacjentem, AdHoc trafia do inboxa po zakończeniu

Sekcja jest schowana za kodem PromptyAI w Settings — domyślnie wyłączona, dla osób, które chcą najpierw zobaczyć resztę. Cały moduł zaprojektował i dowiózł Bohdan.

2. 📊 Limity pakietu i karencja — przejrzysta subskrypcja

Subskrypcje przeszły pełną przebudowę. Stare plany Starter/Standard zostały dezaktywowane, a w ich miejsce weszły Start / Praktyka / Pro — dopasowane do faktycznej liczby sesji w miesiącu.

  • Licznik sesji w pulpicie — widzisz, ile sesji wykorzystałaś w bieżącym miesiącu i ile jeszcze masz w pakiecie
  • Maile o limicie — automatyczne powiadomienia przy 80% i 100% wykorzystania
  • Upgrade prompt — jeśli osiągniesz limit, dostaniesz delikatne podpowiedź zmiany planu zamiast twardej blokady
  • Cena ze Stripe + rabaty — cena, którą widzisz w aplikacji, idzie wprost ze Stripe wraz z aktywnymi rabatami (kod betatestera nie wygasa)
  • Natywny anuluj subskrypcji — możesz anulować subskrypcję bezpośrednio w aplikacji, bez kontaktu z supportem
  • 14-dniowy okres karencji — jeśli płatność się nie uda, dostajesz 14 dni z dostępem tylko do swojego konta (bez podglądu pacjentów), z mailami T+0 i T+13. Pełna utrata danych grozi dopiero po dwóch tygodniach
  • Banner subskrypcji — czysty komunikat na górze aplikacji bez pustego paska między menu a alertem
  • Symulator limitu sesji — w panelu PromptyAI jest tryb testowy, w którym możesz zobaczyć, jak zachowuje się aplikacja przy pełnym pakiecie

To wspólna praca Bartłomieja (licznik i limity, SCRUM-1266) i Bohdana (subskrypcja, karencja, upgrade prompt, SCRUM-756, SCRUM-1366, SCRUM-1391, SCRUM-1392).

3. 📝 3-way merge notatek — terapeuta, AI i transkrypcja w jednym widoku

To jedna z największych zmian architektonicznych pod maską, ale efekt jest bardzo widoczny w pracy: każde pole notatek (Notes, SessionSummary, sekcje konceptualizacji) pamięta osobno, co wpisał terapeuta, co wygenerowało AI i co przyszło z dyktafonu / transkrypcji.

  • Notes 3-way — w widoku notatek widzisz trzy źródła obok siebie: twój zapis, sugestie AI i automatyczną transkrypcję, możesz wybrać, co bierzesz a co odrzucasz
  • SessionSummary 2-way + JSON merge — w podsumowaniu sesji łączysz pracę swoją z analizą AI w jeden spójny dokument
  • Separator z timestampem — gdy edytujesz pole AI ręcznie, system zostawia widoczny ślad, kiedy i czyj to fragment
  • Marker [AI] od pierwszej generacji — twoje pola się nie mieszają z generowanymi
  • SourceBadge — kolorowa pigułka z ikonką pokazująca, skąd pochodzi dany fragment, zamiast UPPERCASE tekstów
  • Wymiana sekcji AI zamiast dopisywania — gdy poprosisz o ponowne wygenerowanie podsumowania, AI podmienia sekcję, nie dokleja kolejnej kopii pod spodem

Zaprojektował i dowiózł Bartek (SCRUM-1320, SCRUM-1368-1375). Pod tym jest też pełna i18n na 8 języków i nowe konteksty DDD.

4. 🔍 Analizy CBT — 9 osobnych raportów na żądanie

Stary monolit “wygeneruj analizę CBT” rozbiliśmy na 9 osobnych itemów, które terapeuta uruchamia, kiedy faktycznie ich potrzebuje. Mniej czekania, więcej kontroli.

  • 9 niezależnych analiz — każda generowana osobno, na żądanie
  • Zębatka edycji promptu — przy każdej analizie kliknij ikonkę i podejrzyj/zmodyfikuj prompt, którego użyje AI
  • Sekcja ANALIZY CBT za kodem PromptyAI — sekcja dostępna po wpisaniu kodu w Settings, dla osób testujących nowości

Zniekształcenia poznawcze dostały osobny widok (na zgłoszenie Bartłomieja, SCRUM-1385):

  • Widok danych zamiast AI raportu — patrzysz na konkretne cytaty z transkrypcji oznaczone przez AI, nie na narrację wygenerowaną z nich
  • Wszystkie cytaty po expand — bez filtra zakresu dat, expanda widzisz wszystko
  • Dostępne z menu głównego — pod Konceptualizacją v2

Stary prompt COGNITIVE_DISTORTIONS_INVENTORY został usunięty (SCRUM-1386).

5. 🌐 Profil publiczny terapeuty — pełny revamp z drawerami edycji

Profil publiczny pod brand aitherapy.support przeszedł pełną przebudowę.

  • 3 nowe drawery edycji — bio, specjalizacje, dane kontaktowe edytujesz w eleganckich panelach bocznych
  • Tryb edycji właściciela — gdy oglądasz swój profil będąc zalogowanym, widzisz przyciski edycji od razu pod ręką
  • Lata doświadczenia — nowe pole YearsOfExperience widoczne na profilu publicznym
  • Rebrand kolorystyczny — paleta sage/lavender pod brand aitherapy.support
  • Sekcja “Twoja prywatność” usunięta — była zbędna, RODO mamy w stopce
  • Ikony lucide — nowoczesna, czysta typografia ikon

Pod spodem powstał też publiczny endpoint GET /api/public/therapists zwracający listę terapeutów z aktywnym profilem — fundament pod katalog terapeutów.

6. 🎥 Sesje wideo — PiP, swap kamer i naprawiony blur tła

Wideo dostało zestaw poprawek, które zauważy każda terapeutka prowadząca sesje przez aplikację.

  • PiP / minimalizacja — możesz zminimalizować pokój wideo do floating mini-playera i sprawdzić notatki w innej zakładce bez zrywania połączenia. Mikrofon i kamera dalej działają
  • Swap kamer — przełączysz, kto jest w głównym widoku, kto w mini, jednym kliknięciem
  • Resume z PiP — gdy wracasz z minimalizacji, pomijasz ekran lobby (PreJoinLobby) i wskakujesz prosto do rozmowy
  • Per-participant audio dla diaryzacji — transkrypcja oddziela mówców nawet w PiP
  • Background blur naprawiony — CSP blokował MediaPipe WASM, teraz blur działa po jednym kliknięciu
  • Czystszy UI sesji AITS — zniknął asystent AI z toolbar’a, mniej wizualnego szumu
  • PiP overlay klikalne — usunięcie pointerEvents:none i overflow:hidden, przyciski w PiP odpowiadają na kliknięcia
  • Przycisk “Dołącz do sesji” — był ukryty przez CSS override, teraz widoczny
  • Stale closure w handleMaximize — naprawione, maksymalizacja PiP nie krzyczy już błędem

7. 📐 Konceptualizacja Beck v2 i ABC — PDF, toggle wersji, edycja promptów

  • PDF konceptualizacji Becka i ABC v2 — naprawione formatowanie i automatyczne zamieszczanie w materiałach sesji (na zgłoszenie Ewy, SCRUM-1297)
  • Beck PDF — border-only sections, kolorowe specjalizacje, czyste inicjały, SVG strzałka między sekcjami
  • Toggle ABC v1/v2 w Konceptualizacji v2 — wybierasz, którą wersję ABC widzieć w widoku konceptualizacji
  • Zębatka edycji promptu w ABC v2 — modyfikujesz prompt AI w zakładce ABC v2
  • PDF export dla analiz AI i ABC per-sesja — pojedyncze analizy eksportujesz osobno
  • Pluralizacja etykiet ABC w 8 językach — tabelka konceptualizacji ma poprawne formy mnogie
  • Puste kolumny ABC fix — backend zwraca poprawne plural property names

8. 🧾 Faktury i KSeF — wybór płatności + state machine

System fakturowy przeszedł refactor pod kątem zgodności z KSeF (Krajowy System e-Faktur).

  • Faktura z wybranych płatności — zaznaczasz płatności i system tworzy z nich pojedynczą fakturę (snapshot + Payment FK)
  • Entry point “Wystaw fakturę” w widoku finansów terapeuty — szybki dostęp z dashboardu
  • Usuwanie pozycji w modalu wystawiania faktury — pomyłki naprawiasz w locie
  • KSeF dev/prod separation — sandbox i produkcja pracują na osobnych poświadczeniach
  • Invoice state machine (SCRUM-1357 Bohdan) — Draft → Issued → Sent → Cancelled, z DB constraintem na nielegalne przejścia
  • AE KsefToken — token KSeF szyfrowany Always Encrypted

To wspólna praca Bohdana (SCRUM-1357, SCRUM-1388).

9. 📅 Kalendarz, sesje cykliczne i lokalizacje

Kalendarz tygodniowy i cykliczny dostały dziesiątki drobnych, ale zauważalnych poprawek — większość zgłoszona przez Joannę i Ewę.

  • Sesje od 22:00 — były niewidoczne na siatce tygodniowej, teraz widać je do końca dnia
  • Wszystkie godziny w siatce stałych terminów (SCRUM-874, Joanna)
  • Sesja odwołana na czas — nie pokazuje się jako “Nieopłacona” (SCRUM-918, Joanna)
  • Etykieta częstotliwości obok stałego terminu (SCRUM-919, Joanna) — widzisz “co tydzień”, “co dwa tygodnie” przy każdej powtarzającej się sesji
  • Ukrycie integracji Zoom z UI (SCRUM-789, Joanna) — Zoom nie jest już wspierany jako kanał wideo
  • Session popover w kalendarzu — nie chowa się już poza ekran
  • TherapistAvailability — auto-save po każdej zmianie (debounce 800 ms), nie musisz klikać “zapisz”
  • AddSessionModal — opcja “utwórz sesję poza godzinami dostępności” — w wyjątkach możesz wymusić termin
  • Status “Nie odbyta” (NoShow=5) — nowy status, możesz go ustawić nawet z sesji już zakończonej lub odwołanej
  • RecurringSessionsCalendar — kafelki podsumowania nad legendą i siatką

Lokalizacje terapeuty dostały kanały spotkania online per lokalizacja:

  • Tryb Onsite — pola adresu i miasta dla lokalizacji stacjonarnej
  • Switch onsite/online zamiast checkboxa — czytelniejszy wybór trybu
  • Kanał online per lokalizacja — różne lokalizacje mogą mieć różne kanały (AITS, Google Meet, link zewnętrzny), które auto-propagują się do sesji
  • Per-patient permanent meeting rooms — każdy pacjent ma stały link do pokoju AITS i osobny link zewnętrzny widoczne w ustawieniach pacjenta
  • Usuwanie lokalizacji — naprawione (znikało z bazy, ale zostawało na liście w UI)

I na koniec typ spotkania w sesjach cyklicznych — naprawione propagowanie MeetingType i MeetingLink z konfiguracji serii cyklicznej do każdej generowanej sesji oraz do maili z przypomnieniami (SCRUM-902, Ewa).

10. 📱 Aplikacja mobilna — dark theme, AdHoc Inbox, dopracowanie

Mobile przeszło do wersji 1.5.0 (build 18) z masą zmian widocznych dla użytkownika i kilkoma podpisaniami pod kątem App Store / Play Store.

  • Dark theme — pełen ciemny motyw z czytelnymi nagłówkami grup (SCRUM-1089, Ewa + SCRUM-815)
  • Konfigurowalne przypomnienia — wybierasz, kiedy chcesz dostać powiadomienie o sesji
  • Mobile reminder 15 min — przypomnienie 15 minut przed sesją + warning gdy notyfikacje systemowe są wyłączone (SCRUM-815, Bohdan)
  • Pusty stan listy sesji — zamiast pustego ekranu rozbudowany onboarding (SCRUM-1094, Ewa)
  • Auto-refresh banner — gdy aplikacja wykryje aktualizację, pokazuje banner z zapraszającym refreshem
  • AdHoc Inbox + AssignPatient + quick-start w MAUI (SCRUM-1289, Bohdan)
  • PWA mobile quick-start dla sesji ad-hoc (SCRUM-1286, Bohdan)
  • Responsywny widok web dla telefonu — desktop bez zmian, na telefonie układ dopasowany do wąskiego ekranu
  • Deep-link handler w iOS — używa BindingContext, rejestracja URL scheme
  • iOS NSLocation purpose strings — naprawienie ITMS-90683 (App Store odrzucał build bez tego)
  • Android AAB — explicit jarsigner step
  • Materiały do App Store Connect i Google Play — pełen pakiet plus audyt WCAG 2.2

11. 🔐 Bezpieczeństwo: SOC 2 / HIPAA, MFA, pełna pseudonimizacja AI

Pod warstwą produktu zrobiliśmy pełen hardening pod SOC 2 i HIPAA plus audit DDD z pięcioma konkretnymi wdrożeniami.

  • MFA re-verification dla operacji krytycznych — przy wrażliwych akcjach (zmiana hasła, eksport danych) potwierdzasz tożsamość MFA
  • Backup codes dla MFA — kody awaryjne na wypadek utraty telefonu
  • IAnonymizedLlmGateway (SCRUM-1353, Bohdan) — wszystkie wywołania modeli AI idą przez bramkę pseudonimizującą dane pacjenta. Imiona, daty, miejsca są podmieniane na pseudonimy zanim opuszczą aplikację, AI dostaje tylko anonimową wersję
  • Pseudonimizacja powiadomień email/SMS (SCRUM-1354) — szablony wiadomości też nie wynoszą danych pacjenta przed wysyłką
  • OAuth tokens Google/Zoom szyfrowane Always Encrypted (SCRUM-1355) — tokeny dostępowe do integracji są szyfrowane na poziomie kolumny
  • Patient.PendingConsent flag (SCRUM-1356) — pacjent bez aktywnej zgody dostaje wymuszenie i frontend badge
  • Invoice state machine (SCRUM-1357) — niezmienność statusów faktury z DB constraintem
  • Audit immutability + user snapshot w 3 tabelach audytowych — log działań nie da się zmodyfikować po fakcie
  • DeanonymizationAuditLog — każde użycie danych pacjenta po deanonimizacji jest logowane wraz ze snapshotem email + displayName użytkownika, który tej deanonimizacji dokonał
  • Hardcoded secrets removed — wszystkie klucze i hasła z appsettings.json przeniesione do Azure Key Vault
  • Always Encrypted dla wszystkich danych tekstowych użytkownika (ADR-0018) — kierunek architektoniczny zatwierdzony, dalsze tabele migrują w kolejnym release
  • ISO/IEC compliance gap analysis — 95 luk w 9 standardach zmapowanych, z planem naprawy

W tle jest pełen DDD audit (Sesje 1-8, fazy 1-6) — przebudowa kontekstów dziedzinowych, dokumentacja architektury, ADRs, mermaid + testy, playbooki, integracja z Confluence.

12. 👤 Portal pacjenta — analizy w Celach, materiały, lepszy podgląd

  • Konceptualizacja Becka w zakładce “Cele” pacjenta — gdy opublikujesz konceptualizację, pacjent widzi ją w swoim portalu
  • Publikacja analiz na portal pacjenta + preferencje powiadomień (SCRUM-1338, Bartłomiej) — kontrolujesz, co i kiedy pacjent dostaje
  • Podgląd PDF w portaluiframe zamiast embed, CSP zezwala na blob: (PDFy się ładują)
  • Preview portalu pacjenta z perspektywy terapeuty — widzisz, co widzi pacjent (chrome w wrapper, dashboard 1:1)
  • Materiały sesji w Azure Blob Storage — SessionMaterial jako blob, bez lokalnego filesystem
  • Sekcja zgód/dokumentów + źródła rejestracji w ustawieniach pacjenta
  • Globalna unikalność emaila pacjenta (SCRUM-898) — drugi pacjent z tym samym emailem dostaje 409 + zamknięty modal (SCRUM-898, Ewa)
  • Seeder szablonów powiadomień dla SK, CA, RU, UK, LT (SCRUM-883, Joanna) — pełen mailing wielojęzyczny
  • Resolver fallback do platform default — gdy terapeuta nie nadpisał szablonu, leci domyślny wielojęzyczny (SCRUM-883)

13. 🎙️ Transkrypcja — niezawodne nagrywanie, dogrywanie i real-time z diaryzacją

  • Dogrywaj do istniejącej transkrypcji — możesz kontynuować nagrywanie do tej samej sesji, segmenty się dopisują (intent przeżywa reload strony)
  • Per-participant audio dla diaryzacji — transkrypcja video oddziela mówców osobno, nie zlewa wszystkich w jeden tor audio
  • Transkrypcja przeżywa PiP — minimalizacja pokoju nie zrywa nagrywania
  • Język transkrypcji z ustawień sesji — STT używa języka, który ustawiłeś dla pacjenta
  • Auto-refresh transkrypcji po focus / visibilitychange / powrocie z video
  • Confirm przy stop nagrywania < 2s — zabezpieczenie przed pustym WAV-em z pomyłki
  • Badge “Wysyłanie” na liście sesji — widzisz, że nagranie jest w trakcie uploadu
  • Real-time z diaryzacją w sesji video — wcześniej nie startowała, teraz działa
  • OPFS backup + 48 kbps Opus — nagranie zapisuje się lokalnie do OPFS jako fallback, parametry audio ujednolicone
  • SAS direct upload audio (SCRUM-1276, Bohdan) — audio leci bezpośrednio do Azure z SAS URL, bez przechodzenia przez backend
  • m4a native do Azure Speech — m4a obsługiwane natywnie, nie konwertujemy
  • Detekcja formatu po magic bytes (SCRUM-1311, Bohdan) — gdy Content-Type=application/octet-stream, wykrywamy format z zawartości pliku
  • Hub bez DB text — SignalR realtime hub nie persystuje już tekstu w bazie, finishPending na multipart POST jak MAUI
  • SignalR 1006 fix — zdjęcie skipNegotiation żeby Azure SignalR działał + tuning keep-alive
  • Marker [AI] od pierwszej generacji + niezawodne wyszukiwanie markera

14. 💬 Powiadomienia, ustawienia pacjenta i drobne UX

  • NotificationTemplatesAdmin — przełącznik HTML/Tekst w edytorze emaila
  • NotificationSettings — podgląd email renderuje HTML z fallbackiem
  • PromptEditModal — przebudowa: zakładki, model selector, wymagane nazwy wersji
  • Hide_dev_ui flag reset on logout — flagi developerskie nie pamiętają się między sesjami
  • Test patient Ann Fauler — angielski 1:1 polskiej Anny Pełnialskiej do prezentacji EN-only
  • Dev UI presentation mode toggle — szybkie przełączanie do trybu prezentacji
  • Bug report — załączniki w Jirze + etykieta ze zgłaszającym + wyśrodkowany przycisk “Zgłoś”
  • Auth-refresh loop naprawiony — przerywamy requesty i wracamy do loginu po 401
  • Banner “Serwer się uruchamia” — przy zimnym starcie (scale-to-zero) pokazujemy informację zamiast pustej strony
  • Skala oceny sesji — autorefleksja zamiast oceny jakości + disclaimer (SCRUM-1005, Joanna)
  • Kolor buttona “Minimalizuj” zmieniony na kobaltowy fiolet (SCRUM-1307, Ewa)
  • Kolor napisu “Transkrypcja” z czerwonego na zielony (SCRUM-1304, Ewa)
  • “Nagraj teraz” → “Nagraj sesję AdHoc” — dokładniejsza nazwa przycisku
  • Sandbox z zieloną wstążką w lewym górnym rogu + prefix [SANDBOX] w title — żeby nie pomylić środowiska, plus powtarzalny klon PROD → Sandbox (Azure IaC + skrypty)

✅ QA Checklist — co warto sprawdzić po deploy

FunkcjaSprawdź
Sesja ad-hoc — Quick RecordKliknij Quick Record na pulpicie lub w PWA — nagrywanie startuje od razu, sesja ląduje w AdHoc Inbox
AssignPatient w AdHoc InboxOtwórz nagranie ad-hoc — możesz przypisać do istniejącego pacjenta lub utworzyć nowego
Limit pakietuPulpit pokazuje licznik sesji w bieżącym miesiącu i ile zostało do limitu pakietu
Karencja po nieudanej płatnościSymulator subskrypcji w PromptyAI — wymuś nieudaną płatność, dostajesz dostęp tylko do swojego konta przez 14 dni
3-way merge notatekW szczegółach sesji pole Notes ma trzy źródła obok siebie (terapeuta / AI / transkrypcja), możesz wybrać co bierzesz
9 analiz CBTW zakładce analiz CBT widzisz 9 osobnych itemów, każdy generujesz na żądanie, każdy ma zębatkę edycji promptu
Profil publiczny — draweryOtwórz swój profil publiczny będąc zalogowanym — widzisz drawery edycji bio, specjalizacji, kontaktu
Wideo PiPW trakcie sesji video kliknij minimalizuj — okno chowa się do mini-playera, mikrofon dalej działa, wracasz bez ekranu lobby
Background blurW lobby video włącz blur tła — działa od razu, bez błędów CSP
Konceptualizacja Becka PDFWygeneruj PDF konceptualizacji — pojawia się też w materiałach sesji
Toggle ABC v1/v2W konceptualizacji v2 możesz przełączyć źródło ABC między wersją 1 a 2
Faktura z wybranych płatnościZaznacz kilka płatności i kliknij “Wystaw fakturę” — powstaje pojedyncza faktura ze snapshotem
Sesja cykliczna z Google MeetDruga i trzecia sesja z serii ma poprawnie ustawiony Google Meet i email zawiera właściwy link
Sesje od 22:00W kalendarzu tygodniowym widzisz sesje umówione na 22:00 i później
Status “Nie odbyta”W zakończonej / odwołanej sesji możesz zmienić status na “Nie odbyta”
Mobile dark themeW aplikacji mobilnej przełącz motyw na ciemny — nagłówki grup są czytelne
AdHoc Inbox w mobileMobile pokazuje skrzynkę nagrań ad-hoc i pozwala przypisać pacjenta
MFA re-verificationPrzy zmianie hasła aplikacja prosi o ponowne MFA
Pseudonimizacja AIW logach widzisz, że dane pacjenta idą do AI w postaci pseudonimów
Materiały sesji jako blobWgraj plik do materiałów sesji — ląduje w Azure Blob Storage, nie na lokalnym dysku
Globalna unikalność emaila pacjentaDodaj drugiego pacjenta z tym samym emailem — dostajesz 409 i modal się zamyka
Banner “Serwer się uruchamia”Po dłuższej nieaktywności wejście do aplikacji pokazuje banner zamiast pustej strony

🛠️ Co naprawiliśmy — drobnym drukiem

Oprócz dużych funkcji wyszło ~80 zgłoszeń od testerów i użytkowników. Najważniejsze:

  • PiP overlay był nieklikalny — naprawione
  • Stale closure w handleMaximize — maksymalizacja PiP nie krzyczy już błędem
  • PiP utrzymuje połączenie — wcześniej room.disconnect() wywalał się przy przejściu fullscreen↔PiP
  • Przycisk “Dołącz do sesji” był ukryty przez CSS override — odkryty
  • Druga sesja AITS dla tego samego pacjenta (SCRUM-1319, Ewa) — drop UNIQUE INDEX na Session.VideoInviteToken
  • Numeracja sesji w konceptualizacji pomija odwołane (SCRUM-1267, Bohdan)
  • Null-safe Payment access w GetSessionDetailsAsync (SCRUM-1268, Bohdan)
  • Kolizja sesji testowych Anny Pełnialskiej z Janem o 14:00 — naprawione w seederze
  • Dashboard slowdown — null-safe mapping w GetTodaySessionsAsync i GetSessionDetailsAsync
  • Auto-refresh po zakończeniu nagrywania z mikrofonu — działa
  • Batch fallback nie nadpisuje tekstu z poprzednich nagrań ani nie blokuje UI statusem Processing
  • Język transkrypcji z ustawień sesji — STT respektuje preferencję pacjenta
  • CSP — zezwolenie na *.clarity.ms, blob: w connect-src, analytics w script-src
  • Auth-refresh loop — przerywanie requestów po 401 i powrót do loginu
  • CSP MediaPipe WASM — background blur działa
  • DEV/SANDBOX wstążka też na Azure FQDN, nie tylko custom domain
  • Fałszywy toast “Transkrypcja nie powiodła się” przy wejściu na sesję — usunięty
  • Toast zamiast czerwonego banera przy failed transkrypcji + usunięcie przycisku “Ponów próbkowanie”
  • Realtime z diaryzacją w sesji video — startuje poprawnie
  • AI streaming — per-handler AbortController zamiast wspólnego (BodyStreamBuffer was aborted)
  • Nginx non-root + Azure Container Apps — kilka iteracji żeby działało
  • Distributed lock (sp_getapplock) — startup migracje nie konfliktują przy równoległych deployach
  • DbUpdateConcurrencyException w batch transcription pollerze (SCRUM-1313, Bohdan)
  • BlobNotFound jako spodziewany stan (SCRUM-1314, Bohdan)
  • Stripe webhook nie-JSON payloads (skanery / boty) — cicha obsługa (SCRUM-1315, Bohdan)
  • Detekcja formatu audio po magic bytes (SCRUM-1311, Bohdan)
  • Resilient audio upload + defensive Content-Type (SCRUM-1293, Bohdan)
  • Migracja FK ActiveEmbeddingModelId → ON DELETE NO ACTION
  • Dev client deploy — CACHE_BUST=github.sha wymusza rebuild frontendu

To największy, najgęstszy release tej wiosny. Jeśli któraś z funkcji wydaje ci się znajoma — to dlatego, że to była twoja prośba albo twój ticket. Dziękujemy za każde zgłoszenie i każdy screen.

Artykuł przygotowany przez zespół Therapy Support

Beta testy · Dołącz teraz

Odzyskaj czas dla siebie
i swoich pacjentów

Jesteś terapeutą / terapeutką CBT?
Sprawdź, jak platforma wspiera Twoją codzienną pracę.
Podsumowania sesji, które porządkują materiał kliniczny. Administracja, która nie przeszkadza.