| 01-foundation |
04 |
ui |
| nextjs |
| next-auth |
| tanstack-query |
| react-hook-form |
| zod |
| shadcn |
| fastapi |
| bcrypt |
| tailwind |
|
| phase |
provides |
| 01-foundation plan 01 |
PostgreSQL schema with Tenant, Agent, PortalUser ORM models and RLS infrastructure |
|
|
| FastAPI portal API router at /api/portal (tenant CRUD, agent CRUD, auth verify/register) |
| Next.js 16 admin portal at localhost:3000 with login, tenant management, and Agent Designer |
| Auth.js v5 Credentials provider validating against FastAPI /auth/verify endpoint |
| proxy.ts (Next.js 16 auth proxy) protecting all routes except /login and /api/auth/* |
| Integration tests for all portal API CRUD operations (38 tests) |
|
| 02-channel-expansion |
| 03-polish-launch |
| operator-workflow |
|
| added |
patterns |
| bcrypt>=4.0.0 (password hashing in shared package) |
| next-auth@5.0.0-beta.30 (Auth.js v5 with Credentials provider) |
| @tanstack/react-query@^5 (server state and cache management) |
| react-hook-form@^7 (form management) |
| zod@^4 (schema validation) |
| @hookform/resolvers@^5 (standard-schema resolver for zod v4 compat) |
| shadcn/ui (button, card, input, textarea, select, badge, table, dialog, separator, label) |
| lucide-react (icons) |
|
| FastAPI APIRouter with prefix /api/portal for portal-specific endpoints |
| Portal API sets RLS current_tenant_id context for agent endpoints (admin bypasses but still scopes correctly) |
| Auth.js v5 JWT strategy — no DB session table, stateless tokens |
| Next.js 16 route groups: (auth) for login, (dashboard) for protected routes with shared layout |
| TanStack Query hooks in lib/queries.ts with standardized query key hierarchy |
| standardSchemaResolver from @hookform/resolvers/standard-schema for zod v4 + hookform v5 compat |
| proxy.ts instead of middleware.ts — Next.js 16 renamed middleware to proxy |
|
|
| created |
modified |
| packages/shared/shared/api/__init__.py — portal_router export |
| packages/shared/shared/api/portal.py — FastAPI portal router with all CRUD endpoints |
| tests/integration/test_portal_tenants.py — 23 tenant CRUD integration tests |
| tests/integration/test_portal_agents.py — 15 agent CRUD + Agent Designer field tests |
| packages/portal/proxy.ts — auth proxy protecting dashboard routes |
| packages/portal/lib/auth.ts — Auth.js v5 config with Credentials provider |
| packages/portal/lib/api.ts — typed fetch wrapper + API type definitions |
| packages/portal/lib/queries.ts — TanStack Query hooks for tenants and agents |
| packages/portal/components/agent-designer.tsx — Agent Designer form (Identity/Personality/Config/Capabilities/Escalation/Status) |
| packages/portal/components/tenant-form.tsx — reusable tenant create/edit form |
| packages/portal/components/nav.tsx — sidebar navigation (Dashboard/Tenants/Employees) |
| packages/portal/app/(dashboard)/layout.tsx — shared dashboard layout with QueryClientProvider |
| packages/portal/app/(dashboard)/dashboard/page.tsx — dashboard landing with tenant count |
| packages/portal/app/(dashboard)/tenants/page.tsx — tenant list with table UI |
| packages/portal/app/(dashboard)/tenants/new/page.tsx — tenant creation |
| packages/portal/app/(dashboard)/tenants/[id]/page.tsx — tenant detail/edit/delete |
| packages/portal/app/(dashboard)/agents/page.tsx — AI employees card grid |
| packages/portal/app/(dashboard)/agents/new/page.tsx — Agent Designer create |
| packages/portal/app/(dashboard)/agents/[id]/page.tsx — Agent Designer edit |
| packages/portal/app/(auth)/login/page.tsx — email/password login form |
| packages/portal/app/api/auth/[...nextauth]/route.ts — Auth.js route handler |
|
| packages/shared/pyproject.toml — added bcrypt>=4.0.0 dependency |
| docker-compose.yml — added portal service on port 3000 |
| packages/portal/app/layout.tsx — updated metadata title to 'Konstruct Portal' |
| packages/portal/app/page.tsx — redirect to /dashboard or /login based on auth state |
|
|
| proxy.ts used instead of middleware.ts — Next.js 16 renamed middleware to proxy (deprecated warning) |
| standardSchemaResolver from @hookform/resolvers/standard-schema used instead of zodResolver — @hookform/resolvers v5 removed dedicated zod subpackage in favor of Standard Schema protocol; zod v4 implements Standard Schema |
| Route group (dashboard) used to share QueryClientProvider layout across /dashboard, /tenants, /agents routes without nesting them under a path prefix |
| Portal agent endpoints set RLS current_tenant_id context before DB operations — platform admin API still operates within tenant scope per RLS policy |
| Auth.js v5 JWT session strategy — no portal_sessions table needed for Phase 1; stateless tokens sufficient until enterprise SSO requirements |
| Agent Designer uses employee-centric labels: Employee Name, Job Title, Job Description (persona), Statement of Work (system_prompt) |
|
| Pattern 1: FastAPI portal router sets RLS tenant context via current_tenant_id ContextVar for all agent CRUD operations |
| Pattern 2: Integration tests use make_app(session) factory to override get_session dependency with test DB session |
| Pattern 3: Next.js 16 uses proxy.ts for edge-layer auth protection; Auth.js v5 auth() called directly in proxy |
| Pattern 4: TanStack Query key hierarchy [resource, ...params] enables targeted cache invalidation on mutations |
| Pattern 5: Zod v4 + @hookform/resolvers v5 via standardSchemaResolver (not zodResolver) |
|
|
19min |
2026-03-23 |