Console eventy nesou celé argumenty console.error — u axios chyb tedy
i config s hlavičkami a request body (Bolt token, Gotify/NTFY klíče).
beforeSend nově rekurzivně rediguje citlivé klíče a tokeny v řetězcích
napříč extra/breadcrumbs/contexts/request/exception.
Naše self-hosted instance nemá zapnuté Sentry Logs — console.error/warn
se nově hlásí jako eventy (captureConsoleIntegration), console.log se
k chybám přikládá jako breadcrumbs.
- integrace Sentry na serveru (@sentry/node) i klientu (@sentry/react):
chyby 5xx, pády a console logy se hlásí do self-hosted Sentry
- nový veřejný endpoint GET /api/config — klient si z něj za běhu
vyzvedne Sentry DSN (SENTRY_DSN / SENTRY_CLIENT_DSN v env)
- ErrorBoundary na klientu a sourcemapy pro čitelné stack traces
- oprava mapování stavu waiting_acceptance (zobrazoval se jako Příprava)
- mapování stavů kurýra matched/accepted, logování přechodů stavů
Bolt objednávek pro postupné zmapování nedokumentovaného API
- simulátor Bolt ve vývoji nově prochází celou reálnou sekvenci stavů
- vypnuté logování connect/disconnect websocket klientů
Krok se aktivuje, když je kurýr u podniku a jídlo je zároveň označené
jako hotové k vyzvednutí — samotný arrived_to_provider stupínek
nezvedá, aby se neopakovala chyba Bolt UI, které „vyzvedávání" hlásí
i během přípravy.
Stav waiting_delivery znamená "jídlo čeká v podniku na vyzvednutí",
heuristika ho ale kvůli slovu "delivery" mapovala na krok "Na cestě".
- waiting_delivery (a obecně waiting_*) se nyní mapuje na "Příprava"
- server nově ukládá i stav kurýra (boltCourierState z courier.state);
krok "Na cestě" se aktivuje až když kurýr objednávku skutečně veze
(picked_up, heading_to_client, ...), kurýr u podniku zůstává v "Příprava"
- tooltip stepperu zobrazuje oba raw stavy pro snadnější diagnostiku
- regresní test s reálnou odpovědí Bolt API
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Jak to funguje:
- OrderGroup má nové pole boltOrderState (raw order_state z Bolt API).
Polling scheduler ho ukládá při každé změně a rozesílá přes Socket.io,
takže stepper se posouvá živě všem uživatelům.
- Komponenta BoltOrderProgress vykresluje čtyři kroky
(Přijato → Příprava → Na cestě → Doručeno) pod časy skupiny.
Známé stavy se mapují explicitně, neznámé heuristikou podle
klíčových slov, zrušená objednávka se zobrazí červeně.
Tooltip ukazuje raw stav, aktivní krok pulzuje, dokud sledování běží.
- Po doručení (nebo zmizení objednávky z API) se token smaže,
ale boltOrderState zůstává "delivered" — dokončený stepper je vidět
po zbytek dne. Vynuluje se při změně/zrušení odkazu nebo návratu
skupiny do stavu uzamčeno.
- Nastavení odkazu nově spustí okamžitý poll, stepper se tak objeví
do vteřiny místo čekání na další tik scheduleru.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Zakladatel skupiny může na stránce objednání vložit sdílecí odkaz
Bolt Food. Server pak každou minutu dotazuje veřejné Bolt API
a automaticky aktualizuje čas doručení skupiny (deliveryAt).
Sledování se samo ukončí po doručení, zrušení objednávky nebo
opakovaných chybách. Leader lease vytažena do znovupoužitelného
modulu leaderLease.ts.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Typy PendingQr, NotificationSettings a nové endpointy
(dismissQr, notifications/settings) byly přidány přímo
do YAML specifikace místo ručních úprav generovaných souborů.
QR kódy pro platbu za pizza day jsou nyní zobrazeny persistentně
i po následující dny, dokud uživatel nepotvrdí platbu tlačítkem
"Zaplatil jsem". Nevyřízené QR kódy jsou uloženy per-user v storage
a zobrazeny v sekci "Nevyřízené platby".
Uživatelé mohou v nastavení konfigurovat vlastní webhook URL/topic
pro Discord, MS Teams a ntfy, a zvolit události k odběru.
Notifikace jsou odesílány pouze uživatelům se stejnou zvolenou lokalitou.
Na víkendu se nyní zobrazuje páteční menu s možností procházet celý týden.
Editační ovládací prvky jsou automaticky skryté díky existující logice canChangeChoice.
- #21: Add missing await in removeChoiceIfPresent() to prevent user appearing in two restaurants
- #15: Add 1-hour TTL for menu refetching to avoid scraping on every page load
- #9: Block stats API and UI navigation for future dates
- #14: Add restaurant warnings (missing soup/prices, stale data) with warning icon
- #12: Pre-fill restaurant/departure dropdowns from existing choices on page refresh
- #10: Add voting statistics endpoint and table on stats page