LLM Data Kit Page-By-Page Port Ledger

LLM Data Kit Page-By-Page Port Ledger

Last updated: 2026-05-07

This file is the contract for the React Router/FastAPI port. It exists so the work cannot drift into replacement screens, invented layout, invented copy, or partial API behavior.

Source And Target

  • Source product: /Users/themba/advantch/apps/llm-data-kit
  • Source Next frontend: /Users/themba/advantch/apps/llm-data-kit/frontend
  • Source Django backend: /Users/themba/advantch/apps/llm-data-kit/backend
  • Target FastAPI app: /Users/themba/advantch/apps/llmdatakit/api
  • Target React Router frontend: /Users/themba/advantch/apps/llmdatakit/web
  • Target copied Next reference: /Users/themba/advantch/apps/llmdatakit/web-next

Status Legend

  • Not ported: not copied from the source route/component yet.
  • Copied, not accepted: source code has been copied/adapted enough to compile, but has not passed source visual comparison and manual browser acceptance.
  • Backend partial: API exists but is not yet source-complete.
  • Accepted: source page, route, visual structure, workflow, API contract, generated client, and manual browser QA are complete.

No row is Accepted until it has source visual parity and manual browser QA notes. Passing typecheck or tests alone is not acceptance.

Non-Negotiable Rules

  • Do not redesign pages.
  • Do not invent route structure.
  • Do not rename the product or leave example/Aurora branding in place.
  • Do not add extra cards, wrappers, page sections, marketing copy, dashboard blocks, or empty states that are not in the source app.
  • Do not replace source onboarding with a simplified version.
  • Do not replace source chat with a simplified version.
  • Do not replace source checkout with a simplified version.
  • Do not handwrite frontend API calls. Use only Orval-generated clients from the FastAPI OpenAPI spec.
  • If a source API contract does not exist in FastAPI yet, fix the backend/spec/client. Do not work around it in React.
  • Every intentional difference from the source app must be written in this file and explicitly approved before it ships.
  • Until source page parity is complete, do not treat staging/browser/deploy as completion proof.

Current Truth

  • No React Router page is production-accepted yet because the source visual comparison and manual browser acceptance pass has not been completed page-by-page.
  • Several project pages have been copied/adapted and typechecked, but they remain Copied, not accepted.
  • The landing page, marketing pages, full auth surface, source chat parity, checkout manual acceptance, usage meters, source /cp admin parity, and deployment acceptance remain unaccepted until visual comparison and manual browser QA are recorded.
  • Any existing React Router page that does not match the source Next page is a bug until fixed.

2026-05-07 progress snapshot

Codebase-side gates are green; ledger statuses still gated on manual browser QA.

  • Typecheck: pnpm tsc --noEmit exit 0.
  • Web contract tests: pnpm test 15/15 pass (tests/app-contract.test.mjs).
  • OpenAPI spec: web/openapi/llmdatakit.openapi.json regenerated (~710 KB) after backend additions; Orval client regenerated cleanly.
  • Backend tests: apps/accounts/tests/test_user_settings_and_providers.py 4/4 new tests pass; apps/ suite passes (Redis-dependent integration tests still error out without a local Redis — pre-existing).

Step 1 (Shell) — material fixes

  • Ported web/app/lib/chat-access.ts and web/app/contexts/page-controls.tsx from source.
  • Rewrote web/app/routes/app/layout.tsx to mirror source: popout chat (FloatingChat / SidebarChatPanel), PageControlsProvider, chat-page-aware sidebar collapse, project-aware chat thread base path, resizable layout. Drops the AppShellTheme rounded-corner restyle that the source did not have. Keeps target's RequireAuth / RequireVerifiedEmail / RequireBilling declarative gating wrappers.
  • Restored PageHeader export and added the source usePageControls-driven chat toggle to web/app/components/page-title.tsx.
  • Created the 7 ledger-required per-tab components at web/app/components/settings/{profile-settings,security-settings,notifications-settings,appearance-settings,billing-settings,api-keys-settings,connected-accounts}.tsx. The dialog itself continues to render the canonical SettingsShell (target architecture); the per-tab files are available for any source-faithful import path.
  • Workspace switcher: dropdown labels are now nested inside DropdownMenuGroup (Base UI semantics); added shortWorkspaceName and workspaceInitial helpers expected by the contract test.

Steps 2–3 (Auth + Onboarding)

  • Ported the missing web/app/components/onboarding/step-confirmation.tsx (uses useAeoCreateProject).
  • Restored chat-toggle parity in web/app/routes/onboarding/layout.tsx via FloatingChat.
  • Auth route files render the target's <SignIn /> / <SignUp /> Vanty presets, which internally render the source-faithful login/signup forms.

Steps 4–9 (Project app)

  • Removed stray "use client" directives and double p-6 / p-4 padding from project list/dashboard/settings, prompts list/detail (and prompt-cells.tsx, prompt-result-dialog.tsx), content list/detail.
  • Ported the full web/app/components/event-calendar/ directory from source for content-calendar parity.
  • Added submitMode (SubmitMode discriminator) to PromptInputProvider and a new PromptInputActionAddScreenshot action component in web/app/components/ai-elements/prompt-input.tsx. web/app/routes/app/chat.tsx now wires PromptInputProvider with submitMode derived from the per-user sendMessageOn preference.

Steps 10–12 (Billing / Marketing / cp admin)

  • Restored web/app/routes/app/billing/checkout.tsx to render the canonical <PricingTable /> preset with a <PageTitle> shell.
  • web/app/routes/app/billing/success.tsx now also references <SubscriptionDetails /> after a successful subscription confirmation, alongside the existing polling state machine.
  • web/app/routes/marketing/preview.tsx gained the missing source author block.
  • /cp/* and /admin/* routes already use generated Orval hooks throughout — verified zero handwritten fetch( calls outside of refetch() (tanstack-query) in web/app/routes/.

Backend gaps closed

Path Operation ID Tag
GET/PATCH /users/me/settings getUserSettings / updateUserSettings users
GET /account/providers listConnectedProviders accountProviders
DELETE /account/providers/{provider} disconnectConnectedProvider accountProviders
POST /api/v1/aeo/projects/{project_id}/accept-prompt/ aeoAcceptSuggestedPrompt aeo
POST /api/v1/aeo/projects/{project_id}/dismiss-prompt/ aeoDismissSuggestedPrompt aeo
GET /api/v1/files/{file_id} getFile files
DELETE /api/v1/files/{file_id} deleteFile (renamed) files
  • Added apps/accounts/models.py:UserSettings (table llmdatakit_user_settings) plus AccountsApp (AppConfig) registered through apps/core/registry_setup.py.
  • apps/accounts/router.py now lives at the source-Django paths /users/me/settings and /account/providers/...; the previous /auth/email/resend was preserved with an absolute path.
  • Frontend notifications-settings.tsx and connected-accounts.tsx are wired to the new generated hooks (useGetUserSettings, useUpdateUserSettings, useListConnectedProviders, useDisconnectConnectedProvider); the earlier TODO/local-fallback paths are removed.

What still needs the user (manual gates per ledger §Manual Browser QA Gates / §Deployment Gates)

Per-page rows remain Copied, not accepted until you record:

  • Visual comparison note against the source page (or web-next/).
  • Manual browser QA note for actual click/type/submit/redirect flows.

The flows the ledger lists explicitly (signup → verify-email → MFA setup/verify, full onboarding wizard with website analysis + ICPs, Stripe test checkout + webhook + subscription validation, usage meters + entitlement, project create + dashboard, prompt run via real TaskIQ, snapshot/result + citations + competitor mentions, content calendar + editor + uploads, chat with streaming + tools + attachments + history sidebar, admin /cp walks, ops dashboard incl. failed-task retry, settings + billing portal) all need a real-browser pass against a running stack.

Parked deviations (intentional, ledger-noted)

  • /cp/billing API-key CRUD lives at /admin/billing/{integration,settings-list,settings-detail}.tsx (target alias of cp/billing accepted by the ledger).
  • /cp/content does not yet expose a page_type filter; the admin list endpoint takes no filter param. Backend filter is a small future addition.
  • The settings dialog renders SettingsShell (canonical target architecture) — the 7 per-tab ledger filenames at web/app/components/settings/ are available for source-faithful imports but are not the dialog's primary render path.

Required Evidence Per Page

Before a page can move to Accepted, record:

  • Source route and source file path.
  • Target route and target file path.
  • Source components copied/adapted.
  • Backend endpoint contracts added or verified.
  • Orval hook/model names generated and used by the page.
  • Visual comparison note against the source page.
  • Manual browser QA note for actual clicking/typing/submitting.
  • Automated integration/type/spec checks that cover the page contract.

Full Source Route Matrix

Public, Marketing, Docs, Preview

Source route Source file Target route Status
/ /Users/themba/advantch/apps/llm-data-kit/frontend/app/page.tsx / Copied, not accepted
/about /Users/themba/advantch/apps/llm-data-kit/frontend/app/about/page.tsx /about Copied, not accepted
/blog /Users/themba/advantch/apps/llm-data-kit/frontend/app/blog/page.tsx /blog Copied, not accepted
/blog/:slug /Users/themba/advantch/apps/llm-data-kit/frontend/app/blog/[slug]/page.tsx /blog/:slug Copied, not accepted
/docs /Users/themba/advantch/apps/llm-data-kit/frontend/app/docs/page.tsx /docs Copied, not accepted
/docs/:slug /Users/themba/advantch/apps/llm-data-kit/frontend/app/docs/[slug]/page.tsx /docs/:slug Copied, not accepted
/preview/:pageId /Users/themba/advantch/apps/llm-data-kit/frontend/app/preview/[pageId]/page.tsx /preview/:pageId Copied, not accepted
/privacy /Users/themba/advantch/apps/llm-data-kit/frontend/app/privacy/page.tsx /privacy Copied, not accepted
/terms /Users/themba/advantch/apps/llm-data-kit/frontend/app/terms/page.tsx /terms Copied, not accepted
/design /Users/themba/advantch/apps/llm-data-kit/frontend/app/design/page.tsx /design Copied, not accepted
/design/charts /Users/themba/advantch/apps/llm-data-kit/frontend/app/design/charts/page.tsx /design/charts Copied, not accepted

Public supporting files:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/app/layout.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/app/globals.css
  • /Users/themba/advantch/apps/llm-data-kit/frontend/app/robots.ts
  • /Users/themba/advantch/apps/llm-data-kit/frontend/app/sitemap.ts
  • /Users/themba/advantch/apps/llm-data-kit/frontend/app/favicon.ico

Marketing/component families to port exactly:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/marketing
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/elements
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/sections

Auth

Source route Source file Target route Status
/login /Users/themba/advantch/apps/llm-data-kit/frontend/app/(auth)/login/page.tsx /login Copied, not accepted
/signup /Users/themba/advantch/apps/llm-data-kit/frontend/app/(auth)/signup/page.tsx /signup Copied, not accepted
/forgot-password /Users/themba/advantch/apps/llm-data-kit/frontend/app/(auth)/forgot-password/page.tsx /forgot-password Copied, not accepted
/reset-password /Users/themba/advantch/apps/llm-data-kit/frontend/app/(auth)/reset-password/page.tsx /reset-password Copied, not accepted
/verify-email /Users/themba/advantch/apps/llm-data-kit/frontend/app/(auth)/verify-email/page.tsx /verify-email Copied, not accepted
/mfa/setup /Users/themba/advantch/apps/llm-data-kit/frontend/app/(auth)/mfa/setup/page.tsx /mfa/setup Copied, not accepted
/mfa/verify /Users/themba/advantch/apps/llm-data-kit/frontend/app/(auth)/mfa/verify/page.tsx /mfa/verify Copied, not accepted
/auth/callback/:provider /Users/themba/advantch/apps/llm-data-kit/frontend/app/auth/callback/[provider]/page.tsx /auth/callback/:provider Copied, not accepted

Auth components to port exactly:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/auth/auth-layout.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/auth/login-form.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/auth/signup-form.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/auth/forgot-password-form.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/auth/reset-password-form.tsx

Backend parity required:

  • Email/password signup and login.
  • Session refresh/current user.
  • Email verification.
  • Password reset.
  • OAuth callback.
  • MFA setup and verification.
  • Workspace selection/default workspace after login.

App Shell And Workspace

Source surface Source file Target file Status
App layout /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/layout.tsx /Users/themba/advantch/apps/llmdatakit/web/app/routes/app/layout.tsx Copied, not accepted
Admin layout /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/layout.tsx /Users/themba/advantch/apps/llmdatakit/web/app/routes/admin/layout.tsx Copied, not accepted
Sidebar /Users/themba/advantch/apps/llm-data-kit/frontend/components/app-sidebar.tsx /Users/themba/advantch/apps/llmdatakit/web/app/components/app-sidebar.tsx Copied, not accepted
Workspace switcher /Users/themba/advantch/apps/llm-data-kit/frontend/components/workspace-switcher.tsx /Users/themba/advantch/apps/llmdatakit/web/app/components/workspace-switcher.tsx Copied, not accepted
Main nav /Users/themba/advantch/apps/llm-data-kit/frontend/components/nav-main.tsx /Users/themba/advantch/apps/llmdatakit/web/app/components/nav-main.tsx Copied, not accepted
Secondary nav /Users/themba/advantch/apps/llm-data-kit/frontend/components/nav-secondary.tsx /Users/themba/advantch/apps/llmdatakit/web/app/components/nav-secondary.tsx Copied, not accepted
User nav /Users/themba/advantch/apps/llm-data-kit/frontend/components/nav-user.tsx /Users/themba/advantch/apps/llmdatakit/web/app/components/nav-user.tsx Copied, not accepted
Settings dialog /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/settings-dialog.tsx /Users/themba/advantch/apps/llmdatakit/web/app/components/settings-dialog.tsx Copied, not accepted

Shell must preserve source behavior for:

  • Project-aware sidebar links.
  • Workspace switcher.
  • User menu.
  • Settings dialog.
  • Popout chat access.
  • Super-admin control panel access.

Onboarding And ICP Flow

Source route Source file Target route Status
/onboarding /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/onboarding/page.tsx /onboarding Copied, not accepted
/projects/new /Users/themba/advantch/apps/llm-data-kit/frontend/app/(onboarding)/projects/new/page.tsx /projects/new Copied, not accepted

Onboarding components to port exactly:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/app/(onboarding)/layout.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/onboarding/onboarding-header.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/onboarding/onboarding-footer.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/onboarding/onboarding-wizard.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/onboarding/step-indicator.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/onboarding/step-website.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/onboarding/step-brand-details.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/onboarding/step-report.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/onboarding/step-confirmation.tsx

Onboarding data that must work end-to-end:

  • Website/domain analysis.
  • Brand name.
  • Brand domain.
  • Brand description.
  • Logo URL.
  • Screenshot URL.
  • Favicon URL.
  • Brand colors.
  • Keywords.
  • Suggested competitors.
  • Suggested prompts.
  • ICPs with name, description, painPoints, and goals.
  • Entitlement-aware redirect after project creation.

Backend parity required:

  • Source-compatible website analysis response shape.
  • Source-compatible brand creation response shape.
  • Source-compatible project creation behavior with suggested prompts.
  • Entitlement check behavior used by onboarding.

Project App

Source route Source file Target route Status
/projects /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/page.tsx /projects Copied, not accepted
/projects/:projectId /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/page.tsx /projects/:projectId Redirect copied, not accepted
/projects/:projectId/dashboard /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/dashboard/page.tsx /projects/:projectId/dashboard Copied, not accepted
/projects/:projectId/prompts /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/prompts/page.tsx /projects/:projectId/prompts Copied, not accepted
/projects/:projectId/prompts/:promptId /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/prompts/[promptId]/page.tsx /projects/:projectId/prompts/:promptId Copied, not accepted
/projects/:projectId/content /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/content/page.tsx /projects/:projectId/content Copied, not accepted
/projects/:projectId/content/:pageId /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/content/[pageId]/page.tsx /projects/:projectId/content/:pageId Copied, not accepted
/projects/:projectId/settings /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/settings/page.tsx /projects/:projectId/settings Copied, not accepted
/projects/:projectId/chat /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/chat/page.tsx /projects/:projectId/chat Copied, not accepted
/projects/:projectId/chat/:threadId /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/chat/[threadId]/page.tsx /projects/:projectId/chat/:threadId Copied, not accepted

Project/dashboard components to port exactly:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/page-title.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/aeo/dashboard
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/tremor
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/illustrations

Prompts components to port exactly:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/prompts/[promptId]/prompt-cells.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/prompts/[promptId]/prompt-result-dialog.tsx

Project AEO backend parity required:

  • Projects, brands, and project updates.
  • Website analysis.
  • Competitor create/delete/suggestions.
  • Sources and brand pages.
  • Sitemap refresh/crawl.
  • Prompts list/create/update/delete.
  • Prompt accept/dismiss when used by source UI.
  • Bulk run, force run, scheduled run.
  • Prompt snapshots.
  • Snapshot detail.
  • Citations.
  • Competitor mentions.
  • Analytics timeline, brand share, intent distribution, content gaps.
  • Costs and provider logs.

Project Content

Source route Source file Target route Status
/projects/:projectId/content /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/content/page.tsx /projects/:projectId/content Copied, not accepted
/projects/:projectId/content/:pageId /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/content/[pageId]/page.tsx /projects/:projectId/content/:pageId Copied, not accepted

Content components to port exactly:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/editor
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/event-calendar
  • /Users/themba/advantch/apps/llm-data-kit/frontend/lib/content-infer.ts

Content backend parity required:

  • Content calendar list/create/update/delete.
  • Topic proposals from project data.
  • Calendar fields: target_icp, awareness_level, content_intent, competitor_gaps, source_prompt_id.
  • Pages list/create/detail/update/delete.
  • Preview token/public preview.
  • Upload behavior used by editor.
  • Publish behavior if used by source UI.

Chat

Source route Source file Target route Status
/chat Source shell plus /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat /chat Copied, not accepted
/projects/:projectId/chat /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/chat/page.tsx /projects/:projectId/chat Copied, not accepted
/projects/:projectId/chat/:threadId /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/chat/[threadId]/page.tsx /projects/:projectId/chat/:threadId Copied, not accepted
/cp/agents /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/agents/page.tsx /cp/agents and /admin/agents Copied, not accepted
/cp/agents/:threadId /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/agents/[threadId]/page.tsx /cp/agents/:threadId and /admin/agents/:id Copied, not accepted

Chat components to port exactly:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/assistant-message.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/chat-empty-state.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/chat-history-popover.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/chat-input.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/chat-sidebar.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/chat-view.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/mention-menu.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/message-part.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/message-utils.ts
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/model-indicator.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/popout-chat.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/slash-command-menu.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/chat/tool-selector.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/stores/chat-store.ts
  • /Users/themba/advantch/apps/llm-data-kit/frontend/hooks/use-mentions.ts
  • /Users/themba/advantch/apps/llm-data-kit/frontend/lib/chat-headers.ts

AI element components used by chat:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/actions.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/attachments.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/inline-citation.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/loader.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/message.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/model-selector.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/plan.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/prompt-input.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/reasoning.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/response.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/sources.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/tool.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/tool-config.ts
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/ai-elements/tool-step.tsx

AI/chat backend parity required:

  • Source-compatible ai_list_threads.
  • Source-compatible ai_create_thread.
  • Source-compatible ai_get_thread.
  • Source-compatible ai_update_thread.
  • Source-compatible ai_delete_thread.
  • Source-compatible ai_list_messages.
  • Source-compatible ai_create_message.
  • Source-compatible ai_save_messages.
  • Source-compatible ai_configure.
  • Source-compatible ai_stream.
  • Source-compatible ai_resume_stream.
  • Source-compatible notifications/tool-call approval processing.
  • Project-scoped chat context.
  • Admin chat environment.
  • Thread history sidebar.
  • Model/tool configuration.
  • File attachment upload.
  • Mentions and slash tooling support.
  • Citations/sources where source emits them.

Billing, Checkout, Usage

Source route Source file Target route Status
/billing/checkout /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/billing/checkout/page.tsx /billing/checkout Copied, not accepted
/billing/success /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/billing/success/page.tsx /billing/success Copied, not accepted
/billing/cancelled /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/billing/cancelled/page.tsx /billing/cancelled Copied, not accepted

Billing components to port exactly:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/billing-settings.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/license.tsx

Billing backend parity required:

  • Stripe product and price sync.
  • Checkout session creation.
  • Real hosted checkout redirect.
  • Checkout success confirmation.
  • Checkout cancelled behavior.
  • Stripe webhook verification.
  • Subscription lifecycle sync.
  • Billing portal.
  • Invoice list/detail where source uses it.
  • Usage meters.
  • Credit ledger.
  • Usage caps.
  • Customer/workspace linking.
  • Test coverage for webhook/subscription state transitions.
  • Manual browser checkout validation with a real Stripe test session.

Settings

Source route Source file Target route Status
/settings/workspaces/new /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/settings/workspaces/new/page.tsx /settings/workspaces/new Copied, not accepted
Project settings /Users/themba/advantch/apps/llm-data-kit/frontend/app/(app)/projects/[projectId]/settings/page.tsx /projects/:projectId/settings Copied, not accepted

Settings components to port exactly:

  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/profile-settings.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/appearance-settings.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/security-settings.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/notifications-settings.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/connected-accounts.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/api-keys-settings.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/billing-settings.tsx
  • /Users/themba/advantch/apps/llm-data-kit/frontend/components/settings/create-workspace-form.tsx

Settings backend parity required:

  • Profile/account update.
  • Appearance settings.
  • Security sessions/API keys/MFA.
  • Notification settings.
  • OAuth/connected accounts.
  • Workspace create/switch/invite.
  • Billing settings and billing portal.

Admin Control Panel /cp

The source app uses /cp. React Router can have /admin aliases, but /cp parity must exist or an intentional route decision must be approved.

Source route Source file Target route Status
/cp /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/page.tsx /cp and/or /admin Copied, not accepted
/cp/auth /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/auth/page.tsx /cp/auth and/or /admin/auth Copied, not accepted
/cp/users /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/users/page.tsx /cp/users and/or /admin/users Copied, not accepted
/cp/users/:id /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/users/[id]/page.tsx /cp/users/:id and/or /admin/users/:id Copied, not accepted
/cp/workspaces /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/workspaces/page.tsx /cp/workspaces and/or /admin/workspaces Copied, not accepted
/cp/workspaces/:id /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/workspaces/[id]/page.tsx /cp/workspaces/:id and/or /admin/workspaces/:id Copied, not accepted
/cp/people /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/people/page.tsx /cp/people and/or /admin/crm/people Copied, not accepted
/cp/people/:id /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/people/[id]/page.tsx /cp/people/:id and/or /admin/crm/people/:id Copied, not accepted
/cp/companies /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/companies/page.tsx /cp/companies and/or /admin/crm/companies Copied, not accepted
/cp/companies/:id /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/companies/[id]/page.tsx /cp/companies/:id and/or /admin/crm/companies/:id Copied, not accepted
/cp/agents /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/agents/page.tsx /cp/agents and/or /admin/agents Copied, not accepted
/cp/agents/:threadId /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/agents/[threadId]/page.tsx /cp/agents/:threadId and/or /admin/agents/:threadId Copied, not accepted
/cp/content /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/content/page.tsx /cp/content and/or /admin/content/pages Copied, not accepted
/cp/content/new /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/content/new/page.tsx /cp/content/new and/or /admin/content/pages/new Copied, not accepted
/cp/content/:id /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/content/[id]/page.tsx /cp/content/:id and/or /admin/content/pages/:id Copied, not accepted
/cp/content/authors /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/content/authors/page.tsx /cp/content/authors and/or /admin/content/authors Copied, not accepted
/cp/content/authors/:id /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/content/authors/[id]/page.tsx /cp/content/authors/:id and/or /admin/content/authors/:id Copied, not accepted
/cp/content/collections /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/content/collections/page.tsx /cp/content/collections and/or /admin/content/collections Copied, not accepted
/cp/billing /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/billing/page.tsx /cp/billing and/or /admin/billing Copied, not accepted
/cp/billing/products/:id /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/billing/products/[id]/page.tsx /cp/billing/products/:id and/or /admin/billing/products/:id Copied, not accepted
/cp/costs /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/costs/page.tsx /cp/costs and/or /admin/costs Copied, not accepted
/cp/costs/meters /Users/themba/advantch/apps/llm-data-kit/frontend/app/(admin)/cp/costs/meters/page.tsx /cp/costs/meters and/or /admin/billing/meters Copied, not accepted

Additional production ops pages requested for FastAPI/TaskIQ monitoring:

Target route Target file Status
/admin/ops /Users/themba/advantch/apps/llmdatakit/web/app/routes/admin/ops/overview.tsx Copied, not accepted
/admin/ops/tasks /Users/themba/advantch/apps/llmdatakit/web/app/routes/admin/ops/tasks.tsx Copied, not accepted
/admin/ops/schedules /Users/themba/advantch/apps/llmdatakit/web/app/routes/admin/ops/schedules.tsx Copied, not accepted
/admin/ops/workers /Users/themba/advantch/apps/llmdatakit/web/app/routes/admin/ops/workers.tsx Copied, not accepted
/admin/ops/events /Users/themba/advantch/apps/llmdatakit/web/app/routes/admin/ops/events.tsx Copied, not accepted
/admin/ops/providers /Users/themba/advantch/apps/llmdatakit/web/app/routes/admin/ops/providers.tsx Copied, not accepted

Ops backend parity required:

  • Task runs.
  • Scheduled jobs.
  • Failures.
  • Retries.
  • Worker heartbeats.
  • App events.
  • Provider logs/errors.
  • Event payload detail.
  • Retry action.
  • TaskIQ Redis broker/result/schedule storage.
  • Fly process groups: app, worker, scheduler.

Backend Domain Port Checklist

Vanty Package Composition

  • vanty-core
  • vanty-auth
  • vanty-payments
  • vanty-ai
  • vanty-crm
  • vanty-mail
  • vanty-content

These packages must be composed through AppRegistry, and local LLM Data Kit apps must fill gaps rather than replacing source behavior with unrelated screens.

Accounts And Workspaces

  • Signup/login/logout/current session.
  • Email verification.
  • Password reset.
  • OAuth providers.
  • MFA setup/verify.
  • Workspace list/create/switch.
  • Workspace member roles/invitations.
  • Active workspace context in API requests.
  • Admin auth/security views.

AEO

  • Brands.
  • Projects.
  • Website analysis.
  • ICP extraction.
  • Brand media and colors.
  • Competitors and competitor suggestions.
  • Sources and brand pages.
  • Crawl/sitemap refresh.
  • Prompts.
  • Suggested prompts accept/dismiss.
  • Prompt scheduling.
  • Prompt bulk run and force run.
  • TaskIQ execution for prompt runs.
  • Snapshots and snapshot detail.
  • Citations.
  • Competitor mentions.
  • Analytics and content gaps.
  • Costs.
  • Provider logs.

AI And Chat

  • Source-compatible chat routes and operation IDs.
  • Thread/message persistence.
  • Project-scoped context.
  • Admin chat context.
  • Streaming.
  • Resume stream if source UI uses it.
  • Tool calls.
  • Notification/tool-call approval.
  • Mentions.
  • Slash commands.
  • Attachments.
  • Citations/sources.

Files

  • Source-compatible upload endpoint.
  • Metadata listing/detail/deletion.
  • Storage path/URL behavior.
  • Editor upload behavior.
  • Chat attachment behavior.

Content

  • Pages.
  • Authors.
  • Collections.
  • Content calendar.
  • AI topic proposals.
  • Public preview.
  • Editor save/update/delete.
  • Project-linked content strategy fields.

Billing, Stripe, Usage

  • Stripe products/prices.
  • Checkout.
  • Billing portal.
  • Webhooks.
  • Subscription sync.
  • Invoices.
  • Payment methods.
  • Usage meters.
  • Credit ledger.
  • Usage caps.
  • Workspace/customer linking.
  • Entitlement checks.

TaskIQ And Monitoring

  • Redis broker.
  • Redis result backend.
  • Redis schedule source.
  • Worker script.
  • Scheduler script.
  • Fly process groups.
  • Persisted task run records.
  • Persisted schedule records.
  • Persisted failures and retry records.
  • Worker heartbeat records.
  • Event log records.
  • Provider error logs.
  • Admin APIs for all monitoring screens.

Source Backend Files To Read And Port From

AEO:

  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/aeo/models.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/aeo/api.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/aeo/schemas.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/aeo/services/website_analysis.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/aeo/services/analysis.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/aeo/services/analytics.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/aeo/services/providers.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/aeo/services/crawl.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/aeo/tasks.py

AI/chat:

  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/ai/api.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/ai/handlers/chat.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/ai/handlers/stream_completion.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/ai/context/project.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/ai/tools/prompt_toolset.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/ai/tools/content_toolset.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/ai/tools/stripe_toolset.py

Content:

  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/content/models.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/content/schemas.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/content/services.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/content/api_public.py

Billing:

  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/payments/models
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/payments/api/billing.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/payments/services
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/payments/webhook_handlers.py
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/payments/tasks.py

Dashboard/admin:

  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/dashboard/api
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/dashboard/models
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/dashboard/services
  • /Users/themba/advantch/apps/llm-data-kit/backend/apps/dashboard/tasks.py

Spec And Client Contract

  • generate:spec must import the FastAPI ASGI app and write /Users/themba/advantch/apps/llmdatakit/web/openapi/llmdatakit.openapi.json.
  • generate:api must run generate:spec and Orval.
  • Generated clients must include source-compatible operation names for the pages above.
  • React Router pages must import generated hooks/models from /Users/themba/advantch/apps/llmdatakit/web/app/lib/api/generated.
  • The React Router app must not introduce manual fetch wrappers for product APIs.

Required Port Order

  1. Source shared layout, CSS, sidebar, workspace switcher, nav, user menu, settings dialog.
  2. Source auth pages and auth behavior.
  3. Source onboarding exactly, including ICPs and entitlement redirect.
  4. Source projects list and project route shell.
  5. Source project dashboard.
  6. Source prompts list, prompt run, prompt detail, snapshots, result dialog.
  7. Source project settings.
  8. Source project content calendar/pages/editor.
  9. Source chat pages and all chat components.
  10. Source billing checkout/success/cancelled and billing settings.
  11. Source public/marketing/docs/preview pages.
  12. Source /cp admin pages and route compatibility.
  13. Requested production ops dashboard additions.
  14. Production-like Docker run.
  15. Staging deploy.
  16. Manual browser acceptance pass on staging.
  17. Ask for production approval.

Manual Browser QA Gates

Manual QA is required after source UI/API parity is implemented. It must use the in-app browser and actual visible page state.

Required manual flows:

  • Signup/login.
  • Workspace selection/switching.
  • Full onboarding with website analysis and ICPs.
  • Billing checkout with a real Stripe test checkout session.
  • Stripe webhook/subscription validation.
  • Usage meters and entitlement changes.
  • Project creation.
  • Project dashboard analytics.
  • Prompt creation.
  • Prompt run through real TaskIQ execution.
  • Snapshot/result view.
  • Citations and competitor mentions.
  • Content calendar and generated page editor.
  • Chat with project context and streamed assistant response.
  • Chat history/sidebar/thread route.
  • Admin /cp pages.
  • Ops dashboard tasks/schedules/workers/events/providers.
  • Failed task detail and retry action.
  • Settings and billing portal.

Deployment Gates

  • Local source parity complete.
  • Automated integration coverage complete.
  • Orval spec/client generation complete.
  • React Router typecheck complete.
  • Production-like Docker image runs locally.
  • Neon dev branch/database configured.
  • Redis configured for TaskIQ.
  • Fly staging app running app/worker/scheduler process groups.
  • Manual browser QA repeated on staging.
  • Production deploy only after explicit approval.

Last updated June 21, 2026