Logo Lanfrica

Arkaiver-Tech-Ghana/adaptive-llm-agent-admin

Domain:

natural language processing

Record type:

software
Creator:
Ark
Host:
Admin UI for adaptive-llm-agent — business owner/staff console (config + data CRUD, roles, RLS-equivalent access control). See Arkaiver-Tech-Ghana/adaptive-llm-agent#17. # Qantonic Business Admin / onboarding frontend for adaptive-llm-agent — issue #17. Any business owner can sign themselves up (creating a whole new Business end-to-end) and then manages their own AI agent's config and data — no staff/multi-user accounts, and nothing here is primed for any one business type. See that repo's `docs/adr/0007-*`, `docs/adr/0008-*`, and `CONTEXT.md`'s `Business Admin UI`/`Custom Table` glossary entries for the design this implements. React + TypeScript + Vite. The backend is a separate FastAPI service (one Render deploy, `adaptive-llm-agent`'s `interfaces/admin/router.py` + `entities_router.py`) — this app is a pure API client with no server of its own. ## Local dev ```sh cp .env.example .env # point VITE_API_BASE_URL at your local backend npm install npm run dev ``` Needs the backend running locally (`uv run uvicorn adaptive_agent.interfaces.whatsapp.app:app` in `adaptive-llm-agent`) with `ADMIN_CORS_ORIGINS` including `localhost` (the default if unset). Either sign up a fresh Business through the app itself, or seed one of the two flagship demo owner accounts (`scripts/seed_admin_owner.py`). ## Structure - `src/lib/api.ts` — typed client for `/admin/api/v1/*`. - `src/lib/auth.tsx` — JWT bearer token in `localStorage`; decodes role/business_id client-side for routing only (the backend re-verifies on every request). - `src/components/layout/AppShell.tsx` / `SidebarNav.tsx` — vertical sidebar nav (desktop-fixed + mobile Sheet drawer, same content in both). Nav items, user info, and logout live there only, never in a top bar. - `src/components/EntityCrudPage.tsx` — generic list/create/edit/delete table, driven by a column config rather than duplicated per resource; powers the Database section against each table's own dynamic columns. - `src/components/TableBuilderDialog.tsx` — lets an owner define a new Custom Table (name + typed columns) through the UI. - `src/components/ConfirmDeleteDialog.tsx` — the two-step `confirm …