01 Problém
Během vícedenní akce neměli dispečeři koordinující desítky vozů s řidiči jeden přehled o tom, kde který vůz je, kdo ho řídí, jestli je volný a kdy dorazí. Všechno se řešilo telefonem.
02 Co aplikace dělá
- Mapa flotily z GPS jednotek a poloh telefonů; každý vůz zůstává v seznamu i bez GPS.
- Pohled řidiče: zvolit cíl, změnit ho, nahlásit se jako volný, čekající, nabíjející nebo na pauze, ukončit směnu.
- Pohled dispečera: stavy s časovači, cíle, uložené trasy a ETA se zdržením proti prvnímu odhadu.
- TV kiosek pro dispečink: párování osmimístným kódem, přístup jen pro čtení, který vyprší a jde okamžitě odvolat; rozložení pro Full HD, 4K i mobil.
03 Architektura
- 01 FrontendSamostatná aplikace v Next.js; vykreslování mapy sdílené s ReadyOps jako balíček
- 02 BackendJediným backendem, přihlášením i příjmem GPS je NestJS API ReadyOps
- 03 RealtimeAutentizované SSE invalidace, pětisekundové checkpointy, polling jako záloha
- 04 ConsistencyZámky řádků, očekávané verze a částečné unikátní indexy: vůz ani řidič nikdy nemají dvě aktivní jízdy
- 05 MapsMapbox GL, trasování a popisky bez kolizí i při vysoké hustotě značek
04 Technologie
Next.jsTypeScriptNestJSPostgreSQLSSEMapbox GLWialon GPSDocker
05 Jak jsem pracoval s AI
Vznikal rychle před ostrým termínem, takže rizikové části byly specifikované jako první: stavový model, kdo smí řídit který vůz a co se nikdy nesmí stát souběžně. Tato pravidla jsou v omezeních PostgreSQL a v integračních testech, takže je UI napsané agenty nemůže rozbít.
06 Co je ověřené
- Použito v ostrém provozu na Dnech NATO 2026 s 25 vozy a řidiči; dispečeři sledovali celou flotilu živě.
- Běží na serveru spolu s ReadyOps (ověřeno v říjnu 2026).
- Vlastní integrační testy pro dispečerské příkazy a pravidla souběhu.
07 Upřímné poznámky
- Název klienta neuvádím. Screenshoty pocházejí z izolované kopie s fiktivní demo akcí.