Skip to main content

Service Topology

All four services run on a single Docker bridge network (nil-net). The frontend proxies /api/* requests to the backend via Vite’s dev server proxy.

Request Flow

  1. Browser hits localhost:3000 → Vite serves the Vue SPA
  2. API calls from the SPA go to /api/v1/* → Vite proxies to backend:8000
  3. Backend validates JWT from Authorization: Bearer header
  4. Database queries run via SQLAlchemy async sessions over asyncpg
  5. File operations (contract upload/download) go through MinIO’s S3 API with presigned URLs

Authentication Flow

Roles: admin, agreement_manager, read_only Tiers: standard, premium (gates benchmark grid, peer group features)

Key Design Decisions

File Structure