Přeskočit obsah

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

  1. Reporty bez chunks (D7 soft-fail) → fallback na full-report dump, ale show user "bez RAG, basic mode"
  2. Multi-report chat — aktuálně 1 conversation = 1 report. Phase D nebo E může umožnit cross-report queries
  3. 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_events table) — 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 queries
  • GET /admin/retrieval/by-tenant/{id} — per-tenant analytics
  • GET /admin/retrieval/variants — A/B variant comparison
  • GET /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:

  1. Stripe integration — billing + token mint
  2. tenants.token_balance column (signed int)
  3. Cost tracking rewrite z halířů na "tokens spent"
  4. Per-operation pricing:
  5. Upload report: ~50 tokens
  6. Chat turn: ~10 tokens
  7. Embed (background): hidden cost
  8. Frontend UI — balance display, top-up flow
  9. 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.