srpen 2026
Trader
Obchodní terminál s vymyšlenými penězi: ceny přitékají dvakrát za sekundu a asistent si umí přečíst vaše portfolio a zadat obchody za vás.

- Role
- Sólo projekt — frontend, backend, infrastruktura
- Stack
- Next.js, FastAPI, Postgres, SSE, OpenRouter, Docker, Vercel
Co to přináší
- Asistent zadává obchody přes stejné API jako samotné UI a každé plnění ukazuje rovnou v konverzaci. Živé demo odpovídá ze skriptovaného klienta, ne z modelu, takže jeho provoz nic nestojí.
- Jedna kódová báze, dva tvary nasazení. Serverless nemá úlohu běžící na pozadí, takže se z ceny stává funkce času v uzavřeném tvaru — Brownův pohyb Lévyho konstrukcí, 22 kroků hashovaným stromem místo 172 800 sečtených půlsekundových přírůstků — a mezi ní a simulátorem se rozhoduje na jediném místě při startu. Routy, služby ani frontend se nemění.
- Tržní data jdou ve výchozím stavu ze simulátoru geometrického Brownova pohybu — volatilita zvlášť pro každý ticker, korelované pohyby sektorů, žádný API klíč. Reálné kurzy se musí zapnout a mezi oběma režimy záměrně není žádný tichý fallback.
- 846 testů napříč stackem: 591 na backendu, 228 na frontendu a k tomu 27 Playwright testů proti sestavenému kontejneru.
Technický návrh
SSE /api/market/streamlitellm (container build)
Klient
Next.js 15 (static export)
Zustand
lightweight-charts
Server
FastAPI
Jedna serverless funkce, api/index.py.
app/market
Deterministické ceny, dva ticky za sekundu.
app/llm
Data
Postgres
Přes asyncpg.
Externí služby
OpenRouter
Jen v kontejnerovém buildu.
GET /api/*
asyncpg
- Jedna aplikace ve FastAPI, dvě nasazení. Kontejnerový build simuluje ceny přes numpy a odpovídá skutečným modelem; funkce na Vercelu je počítá uzavřeným vzorcem a běží s LLM_MOCK=true. Obě varianty mluví se stejným Postgresem a routy jsou stejné, takže frontend nepozná, ke které z nich se dostal.
- SSE, ne WebSockety. Ceny tečou jen jedním směrem. STREAM_MAX_SECONDS je 55, takže se stream vejde do šedesátisekundového limitu funkce na Vercelu.
- Frontend je statický export na CDN. Jediné, co vercel.json přepisuje na funkci v Pythonu, jsou cesty /api/*, takže vykreslení stránky nikdy neprochází funkcí.
Demo běží v serverless variantě bez připojené databáze, takže portfolio startuje na 10 000 $ a resetuje se pokaždé, když se instance recykluje.