Dokumentace
Centrum nápovědyArchitekturaPřehled systému
docs/cs/01-architecture/system-overview.md

Přehled systému

Co je OPORA

OPORA je multi-tenant B2B SaaS platforma pro výpočty lešení. Poskytuje projektové workflow pro vytvoření/úpravu výpočetních vstupů, deterministický výpočet výsledků a tvorbu auditovatelných výstupů.

Technologický základ

  • Frontend / server rendering: Next.js (App Router)
  • Autentizace + primární databáze: Supabase (Auth + Postgres)
  • ORM: Prisma
  • Doménová logika: čistá TypeScript doménová vrstva (deterministická, bez vedlejších efektů)
  • Nasazení: Vercel (web), Supabase (managed Postgres/auth)

High-level architektura

  • Client/UI: stránky a komponenty pod /app/* pro autentizované produktové workflow; marketing na /….
  • Aplikační vrstva: orchestruje use-cases (vytvořit projekt, spočítat, exportovat) a vynucuje guard logiku (auth/org/RBAC/subscription).
  • Doménová vrstva: implementuje pravidla výpočtu lešení jako čisté funkce s explicitními vstupy/výstupy.
  • Infrastrukturní vrstva: Supabase klienti, Prisma přístup k datům, externí integrace (billing, exporty).

Klíčové invarianty (musí platit)

  • Izolace tenantů: veškerý přístup k datům je scoped na Organizaci (tenant). Žádné cross-tenant čtení/zápisy.
  • Projekt je kanonický: stav výpočtu je perzistován jako Projekt; výpočty nejsou “standalone”.
  • Determinismus: identické normalizované vstupy dávají identické výsledky (v rámci definované verze enginu).
  • Auditovatelnost: každý výsledek je dohledatelný ke vstupům a verzi enginu, která ho vytvořila.
  • Least privilege: RBAC gateuje akce (zápis, export, správa členů) na úrovni funkcí.

Primární uživatelské flow (na úrovni systému)

  • Marketing → Auth → Post-auth routing → Org onboarding/selection → Projekty → Úprava projektu → Výsledky → Export.

Nefunkční požadavky (B2B SaaS)

  • Bezpečnostní posture odpovídající multi-tenant zátěži.
  • Predikovatelné výkonové chování pro typické velikosti projektů.
  • Jasná rollback/mitigace strategie pro migrace a změny enginu.