Roadmap¶
Plán dalšího vývoje. Fáze D + E + production readiness.
Stav 30.4.2026
Phase A + B + C jsou dokončené a běží v produkci. 21 reportů s chunks, 290 chunks, 2.81 Kč total ingestion cost. Spine + expand + observability hotové.
Phase D — Chat s RAG injection¶
Estimated: 1-2 dny implementace + 1 den testing Priority: HIGHEST (klíčový value-add)
Cíl¶
Přepsat /chat endpoint aby používal /retrieve interně místo plného textu reportu.
Aktuální stav¶
/chat načte parsed_markdown (~10-40K tokens) a celý ho strčí do LLM system promptu. Drahé + "needle in haystack" pro velké reporty.
Nový flow¶
User → POST /chat { message, conversation_id }
→ Backend retrieve interně přes /retrieve {query=message, scope=folder, top_k=8}
→ Top-K chunks z /retrieve API
→ Build system prompt:
"Jsi asistent pro hodnocení nemovitostí. Odpovídej z následujícího kontextu:
[1] Sekce 'Riziko povodní': Pozemek je v zóně Q100...
[2] Příloha 'Vyjádření ČEZ' (str. 2): Nad parcelou nejsou nadzemní vedení...
[3] Figura 'map_zoning' v sekci Územní plán: Mapa ukazuje...
...
V odpovědi cituj source per chunk (např. 'Z přílohy Vyjádření ČEZ vyplývá...')."
→ Pydantic AI Agent stream response (gemini-3-flash-preview)
→ SSE chunks → Frontend
Změny per komponenta¶
Backend:
- app/routers/chat.py rewrite — volat /retrieve interně, build chunks prompt
- app/retrieval/rewrite.py — implement rewrite_standalone(query, history) s LLM (currently no-op)
- app/chat_context.py (nový) — assemble system prompt z chunks
- messages table — možná přidat cited_chunk_ids uuid[] pro UI render
Frontend:
- ChatWindow.tsx — minor changes (response shape stejný)
- Možná zobrazit cited chunks v UI ("Z těchto pasáží:" + linky na sekce)
- Nová Citation komponenta s expandable preview
Open questions¶
- Reporty bez chunks (D7 soft-fail) → fallback na full-report dump, ale show user "bez RAG, basic mode"
- Multi-report chat — aktuálně 1 conversation = 1 report. Phase D nebo E může umožnit cross-report queries
- Streaming + chunks injection — Pydantic AI patterns pro streamovaný response s pre-built context
Eval gate¶
Před deploy Phase D: - Golden set v1 (40-60 anotovaných queries) - Quality gate: faithfulness ≥ 0.9 (Ragas), recall@8 ≥ 0.85 - Latency: p95 ≤ 3s pro chat turn (1s retrieve + 2s LLM streaming)
Phase E — Nette integration¶
Estimated: 1 týden implementace + integration testing Priority: HIGH (gate Nette tým ready) Dependencies: Nette tým musí poskytnout RS256 JWT signing infra
Cíl¶
Embed chat do Nette aplikace přes iframe + JWT bridge.
Plánovaný flow¶
Nette user logged in
→ Nette signs RS256 JWT { sub, email, aud="nemoreport-ai", iss="nemoreport.cz", exp=15min }
→ postMessage { type: "nemoreport-ai:init", authToken: "<JWT>" } pro iframe
↓
Chat iframe (https://review.algaweb.cz/chat?id=...)
→ POST /auth/nette-exchange { jwt }
↓
Backend
→ verify_nette_jwt(token) — RS256 přes NETTE_JWT_PUBLIC_KEY
→ lookup nebo create Supabase user via auth.identities(provider='nette')
→ generate Supabase session přes admin API → return { access_token, refresh_token }
↓
Frontend uses Supabase session, chatuje bez druhého loginu
Komponenty TBD¶
Backend:
- POST /auth/nette-exchange endpoint
- ENV NETTE_JWT_PUBLIC_KEY, NETTE_AUDIENCE, NETTE_ISSUER
- auth.identities linkage (Supabase native multi-provider support)
Frontend:
- iframe child listener pro postMessage event
- apiFetch Nette JWT exchange pri prvním requestu
- CORS / origins update pro Nette domain
Infra:
- DNS cutover NemoReport AI → review.algaweb.cz (custom doména)
- CF Workers route bind
- auth.algaweb.cz Resend domain verification
Pre-requirement¶
Nette tým musí dodat: 1. RS256 private key pro JWT signing (na jejich straně) 2. RS256 public key (pro NETTE_JWT_PUBLIC_KEY env) 3. Nette user_id pro lookup/create v Supabase 4. Test environment pro integration testing
Production readiness¶
Před production rollout (mimo individual phases):
Infrastructure¶
- Supabase Pro upgrade ($25/mo) — PITR essential
- Cohere production key (mimo trial 1000/mo)
- Resend domain verification (
auth.algaweb.cz) - Vertex AI tier místo Gemini Developer API (data privacy)
- Custom doména
app.nemoreport.cz(mimo workers.dev) - Monitoring + alerts (Sentry pro error tracking, Datadog/Grafana pro metrics)
- Backup strategy týdenní DB dump → CF R2 (offsite)
- Cost alerts (Stripe / billing thresholds)
Quality gates¶
- Phase C.12 — Golden set v1 + eval harness (recall@10 ≥ 0.85)
- Pen test od third-party
- Load test — 100 concurrent uploads, 1000 retrievals/min
- Component tests Frontend (RTL)
- E2E tests Playwright pro klíčové flows
- CI/CD (GitHub Actions) — auto pgTAP + pytest + Vitest
Compliance¶
- GDPR review — data retention policy, right to erasure flow
- Terms of Service + Privacy Policy hosted
- Cookie consent banner (EU)
- AI disclosure UI — user vidí "tato odpověď je AI-generovaná"
- Audit log rozšířit (
user_eventstable) — login/logout, admin ops, exports
Optimalizace (post-pilot)¶
Phase C.9 — Multimodal image resize¶
Aktuálně raw figure bytes → multimodal embed. Pro produkci optimalizace:
- Pillow + 1568 long-edge resize + JPEG q=88 (per Google Gemini-2 doc)
- Sníží payload size, faster Gemini call
- Plánovaný overhead: ~20 řádek + Pillow dep
Phase C.12 — Formal eval harness¶
- Golden set v1 (40-60 anotovaných queries nad 13 MHTML reportů)
- Eval metrics: recall@10, MRR, faithfulness (Ragas), p95 latency
- A/B testing infrastructure pro variant comparison
- CI gate: blok PR pokud regresí
Multi-report scope retrieval¶
Aktuálně scope.type='folder' jen. Plánované:
scope.type='multi_report', report_ids=[...]- HNSW with
WHERE report_id IN (...)— pgvector iterative_scan='relaxed_order' - Use case: "porovnej tyto 3 nemovitosti"
Per-section scope¶
scope.type='section', report_id, section_slug- Use case: "co je v sekci povodně tohoto reportu"
- Nutí semantic search na úzký context
/admin/retrieval/* endpointy¶
retrieval_log (Phase C.11) data je ready, jen chybí UI:
GET /admin/retrieval/recent?days=N— recent queriesGET /admin/retrieval/by-tenant/{id}— per-tenant analyticsGET /admin/retrieval/variants— A/B variant comparisonGET /admin/retrieval/feedback— thumbs up/down breakdown (Phase D)
Token credit system (přeprodej, future)¶
User explicit (29.4): "tokeny jako platební systém — uživatelé kupují kredity, utrácejí na platformě".
Plánovaný redesign:
- Stripe integration — billing + token mint
tenants.token_balancecolumn (signed int)- Cost tracking rewrite z halířů na "tokens spent"
- Per-operation pricing:
- Upload report: ~50 tokens
- Chat turn: ~10 tokens
- Embed (background): hidden cost
- Frontend UI — balance display, top-up flow
- Admin section — token mint/refund, transaction log
Multi-tenant team workspaces¶
Aktuálně každý user má jen personal_tenant. Plánované:
- Team tenants (multi-user)
- Invite flow
- Per-tenant role (owner / member / viewer)
- Resource sharing (reports visible to team members)
tenant_members table už existuje, jen ne UI flow.
Mobile / PWA¶
Aktuálně desktop-first responsive. Pro mobile:
- PWA manifest + service worker (offline caching)
- Touch-optimized UI (drag-and-drop fallback na file picker)
- Push notifications pro async ingestion completion
Internationalization¶
Aktuálně CZ-only. Pro EU expansion:
- i18n framework (next-intl)
- Embedding model přejmenování (Gemini-2 multilingual už OK)
- Mistral OCR — multilingual support per language
- BM25 czech_unaccent → per-language tsvector configs
Long-term vision¶
AI-driven report generation¶
Aktuálně AI čte reporty. Future: AI píše reporty:
- Vstup: katastr data + adresa
- AI fetchne data z N veřejných zdrojů
- Generuje sections (povodně, územní plán, IS)
- Output: NemoReport-formátovaný PDF
To by konkurovalo Nette aplikaci, takže business decision.
Marketplace pro custom prompty¶
User-customizable prompts pro různé use cases: - Hypotéka risk assessment - Investment opportunity analyzer - Environmental compliance check - Insurance underwriting
Plugin / SDK pro real estate platforms¶
API pro 3rd-party integrace: - Zillow / Realo / etc. — embed report widget - ČSOB / KB hypotéka — analyzed properties stream - Realtors CRM — pre-evaluated leads
Sledování pokroku¶
Roadmap je living document. Update kdykoliv major decision/pivot.
CLAUDE.md (root level) má vždy aktuální stav "kde navázat" pro AI agent kontinuita. Tato dokumentace zachycuje historický kontext + plánovaný future.