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
/cpadmin 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 --noEmitexit 0. - Web contract tests:
pnpm test15/15 pass (tests/app-contract.test.mjs). - OpenAPI spec:
web/openapi/llmdatakit.openapi.jsonregenerated (~710 KB) after backend additions; Orval client regenerated cleanly. - Backend tests:
apps/accounts/tests/test_user_settings_and_providers.py4/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.tsandweb/app/contexts/page-controls.tsxfrom source. - Rewrote
web/app/routes/app/layout.tsxto mirror source: popout chat (FloatingChat/SidebarChatPanel),PageControlsProvider, chat-page-aware sidebar collapse, project-aware chat thread base path, resizable layout. Drops theAppShellThemerounded-corner restyle that the source did not have. Keeps target'sRequireAuth/RequireVerifiedEmail/RequireBillingdeclarative gating wrappers. - Restored
PageHeaderexport and added the sourceusePageControls-driven chat toggle toweb/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 canonicalSettingsShell(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); addedshortWorkspaceNameandworkspaceInitialhelpers expected by the contract test.
Steps 2–3 (Auth + Onboarding)
- Ported the missing
web/app/components/onboarding/step-confirmation.tsx(usesuseAeoCreateProject). - Restored chat-toggle parity in
web/app/routes/onboarding/layout.tsxviaFloatingChat. - 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 doublep-6/p-4padding from project list/dashboard/settings, prompts list/detail (andprompt-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(SubmitModediscriminator) toPromptInputProviderand a newPromptInputActionAddScreenshotaction component inweb/app/components/ai-elements/prompt-input.tsx.web/app/routes/app/chat.tsxnow wiresPromptInputProviderwithsubmitModederived from the per-usersendMessageOnpreference.
Steps 10–12 (Billing / Marketing / cp admin)
- Restored
web/app/routes/app/billing/checkout.tsxto render the canonical<PricingTable />preset with a<PageTitle>shell. web/app/routes/app/billing/success.tsxnow also references<SubscriptionDetails />after a successful subscription confirmation, alongside the existing polling state machine.web/app/routes/marketing/preview.tsxgained the missing source author block./cp/*and/admin/*routes already use generated Orval hooks throughout — verified zero handwrittenfetch(calls outside ofrefetch()(tanstack-query) inweb/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(tablellmdatakit_user_settings) plusAccountsApp(AppConfig) registered throughapps/core/registry_setup.py. apps/accounts/router.pynow lives at the source-Django paths/users/me/settingsand/account/providers/...; the previous/auth/email/resendwas preserved with an absolute path.- Frontend
notifications-settings.tsxandconnected-accounts.tsxare 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/billingAPI-key CRUD lives at/admin/billing/{integration,settings-list,settings-detail}.tsx(target alias ofcp/billingaccepted by the ledger)./cp/contentdoes not yet expose apage_typefilter; 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 atweb/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, andgoals. - 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-corevanty-authvanty-paymentsvanty-aivanty-crmvanty-mailvanty-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:specmust import the FastAPI ASGI app and write/Users/themba/advantch/apps/llmdatakit/web/openapi/llmdatakit.openapi.json.generate:apimust rungenerate:specand 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
- Source shared layout, CSS, sidebar, workspace switcher, nav, user menu, settings dialog.
- Source auth pages and auth behavior.
- Source onboarding exactly, including ICPs and entitlement redirect.
- Source projects list and project route shell.
- Source project dashboard.
- Source prompts list, prompt run, prompt detail, snapshots, result dialog.
- Source project settings.
- Source project content calendar/pages/editor.
- Source chat pages and all chat components.
- Source billing checkout/success/cancelled and billing settings.
- Source public/marketing/docs/preview pages.
- Source
/cpadmin pages and route compatibility. - Requested production ops dashboard additions.
- Production-like Docker run.
- Staging deploy.
- Manual browser acceptance pass on staging.
- 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
/cppages. - 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