LLM Data Kit: Architecture Overview
LLM Data Kit: Architecture Overview
This is the primary onboarding doc. It is written to let a new agent make safe refactors without needing to scan the whole codebase.
Stack (Source Of Truth)
- Backend: Django (
backend/) with Django Ninja OpenAPI (backend/config/api.py) - Auth:
django-allauth+allauth.headless(backend/config/urls.py,frontend/hooks/use-auth.ts) - Frontend: Next.js App Router (
frontend/app/) - API client: Orval-generated React Query hooks (
frontend/generated/) using Axios mutator (frontend/lib/api-client.ts) - DB: PostgreSQL + pgvector (
compose.yml, memory models underbackend/apps/ai/models/) - Queue: Celery + Redis (
backend/config/celery.py,compose.yml) - Payments: Stripe + dj-stripe (
backend/apps/payments/,backend/config/settings.py)
How Requests Flow (End To End)
sequenceDiagram
participant UI as Next.js UI (browser)
participant Auth as allauth headless (/_allauth)
participant API as Ninja API (/api/v1)
participant MW as Tenant middleware
participant DB as Postgres
participant Stripe as Stripe
UI->>Auth: POST /_allauth/browser/v1/auth/login (email/password)
Auth-->>UI: session cookie + X-Session-Token (stored in localStorage)
UI->>API: GET /api/v1/users/profile/ (cookies + X-Session-Token + CSRF)
API->>MW: Resolve active tenant (session -> thread-local)
MW->>DB: Tenant-scoped queries via `.objects`
DB-->>API: Data
API-->>UI: JSON (camelCase)
UI->>API: POST /api/v1/billing/checkout-session/ (create embedded checkout)
API->>Stripe: Create checkout session
Stripe-->>API: session id + client_secret
API-->>UI: Checkout session details
URL Layout (Two API Surfaces)
There are two API surfaces the frontend talks to:
- Business API (OpenAPI, Orval):
/api/v1/...- Implemented by Django Ninja in
backend/config/api.py. - OpenAPI schema at
/api/v1/openapi.json(used to generatefrontend/generated/).
- Implemented by Django Ninja in
- Authentication API (allauth headless):
/_allauth/browser/v1/...- Implemented by
allauth.headless(mounted inbackend/config/urls.py). - Used manually by
frontend/hooks/use-auth.tsviaauthClient(frontend/lib/api-client.ts).
- Implemented by
There is also a small public Ninja endpoint at /api/v1/auth/enabled-providers/ (backend/apps/accounts/api/__init__.py) which the login UI uses to decide which social buttons to show.
Backend Mental Model
Start points:
- Settings:
backend/config/settings.py - URL routing:
backend/config/urls.py - Ninja API (routers + auth):
backend/config/api.py - Tenant context:
- thread-local store:
backend/apps/tenants/utils.py - request enforcement:
backend/apps/tenants/middleware.py - tenant-aware managers:
backend/apps/tenants/models/mixins.py
- thread-local store:
- Billing/Stripe:
- endpoints:
backend/apps/payments/api/billing.py - plan definitions:
backend/apps/payments/constants.py - entitlement logic:
backend/apps/payments/models/mixins.py
- endpoints:
What to change:
- Add a new API surface: add a router and mount it in
backend/config/api.py. - Change JSON casing behavior:
backend/config/api.py(parser/renderer) and schema configs. - Change tenant enforcement rules:
backend/apps/tenants/middleware.py.
Frontend Mental Model
Start points:
- Next.js routes:
frontend/app/ - API client glue:
- Orval hooks:
frontend/generated/(generated) - Axios instances and interceptors:
frontend/lib/api-client.ts
- Orval hooks:
- Auth state machine:
frontend/hooks/use-auth.ts - Billing UI:
frontend/app/(app)/billing/andfrontend/generated/api/billing/
What to change:
- Change how the app authenticates:
frontend/hooks/use-auth.tsandfrontend/lib/api-client.ts. - Add a new backend endpoint usage: regenerate Orval (
make create_spec) then use the new hook fromfrontend/generated/.
Docs Map
Backend:
docs/backend/index.mddocs/backend/settings.mddocs/backend/api.mddocs/backend/auth.mddocs/backend/multitenancy.mddocs/backend/payments.mddocs/backend/tasks.mddocs/backend/database.md
Frontend:
docs/frontend/index.mddocs/frontend/overview.mddocs/frontend/api.mddocs/frontend/auth.mddocs/frontend/payments.mddocs/frontend/testing.md
Ops:
docs/development.mdDEPLOYMENT.mdSEED.mddocs/memory-system.md
Last updated June 21, 2026