JobSim splits into four layers:
LayerRole
Web clientNext.js 14 app in frontend/ for learners and administrators.
APIFastAPI app (src/main.py): REST and WebSockets under /api/v1.
AgentsAutoGen-style agents and orchestration in src/core/autogen/.
DataMongoDB for primary state; Qdrant for vectors; optional mem0 integration where configured.

Multi-tenant model

Each organization has isolated data and simulation settings. Authentication and route dependencies attach organization context to requests. Administrative capabilities are split between organization admins (one tenant) and platform (super) admins (cross-org), as implemented per route.

End-to-end request flow (simplified)

  1. A browser or API client calls FastAPI with valid authenticated credentials.
  2. Routers authenticate the caller and resolve organization_id when the route requires it.
  3. Services and repositories read or write data: messages, tasks, simulation settings, and related state.
  4. Agents run on user-driven actions or background work (scheduler, heartbeat, channel chatter), depending on the feature.

Role boundaries

RoleAccess pattern
LearnerData and actions scoped to their organization only.
Org adminConfiguration for one organization (settings, policies, and product-exposed assets such as characters).
Super adminCross-org operations where the API allows (support, health, restricted fixes).