13 KiB
Auto Virtual Tryon Admin Frontend Design
Date: 2026-03-27
1. Background
This project will be a standalone Next.js admin frontend for the virtual try-on pipeline described in the root PRD:
- PRD source:
2026-03-27-frontend-admin-prd.md - Backend reference: adjacent project
/Volumes/DockCase/codes/auto-virtual-tryon
The frontend is not being designed against an abstract future system. It must respect the current backend reality.
1.1 Current Backend Reality
The current backend project already exposes stable APIs for:
POST /api/v1/ordersGET /api/v1/orders/{order_id}GET /api/v1/orders/{order_id}/assetsGET /api/v1/reviews/pendingPOST /api/v1/reviews/{order_id}/submitGET /api/v1/workflows/{order_id}
The root PRD also describes manual revision flows and additional endpoints such as:
POST /api/v1/orders/{order_id}/revisionsGET /api/v1/orders/{order_id}/revisionsPOST /api/v1/reviews/{order_id}/confirm-revision
Those endpoints are not present in the currently implemented backend code at /Volumes/DockCase/codes/auto-virtual-tryon/app.
1.2 Design Consequence
The frontend must therefore distinguish between:
- real integration modules backed by implemented APIs
- placeholder or mock-backed modules that preserve the intended information architecture
The design does not fake backend completeness. It preserves product structure while keeping technical truth explicit.
2. Product Goal
Build a complete admin console shell in Next.js that:
- feels like a real internal operations product rather than a demo
- supports true end-to-end integration for the currently implemented backend workflows
- preserves the full first-phase information architecture from the PRD
- keeps future backend completion low-cost by isolating mocks and adapters away from page components
3. Approved Scope
3.1 Scope Baseline
The approved direction is:
- follow the PRD as the product baseline
- prioritize real integration pages first
- do not let the rest of the console feel unfinished or structurally hollow
3.2 Integration Strategy
The approved data strategy is:
- pages only request the Next.js app itself
- Next.js provides a BFF layer under
app/api/* - the BFF decides whether to proxy to the real FastAPI backend or return mock / placeholder data
This keeps page code unaware of whether a module is currently real or mocked.
4. Information Architecture
4.1 Primary Navigation
The first-level navigation is:
订单总览提单工作台审核工作台流程追踪资源库系统设置
4.2 Route Structure
The approved page tree is:
/orders/orders/[orderId]/submit-workbench/reviews/workbench/workflows/workflows/[orderId]/libraries/models/libraries/scenes/libraries/garments/settings/login
4.3 Default Entry
The default landing page remains /orders.
This is intentionally retained even though the backend does not yet provide a real orders list API. The page will act as the official home of the console using a transitional strategy:
- direct order lookup
- recent-visit history
- mock or placeholder overview content
- explicit messaging that full list/search depends on future backend support
5. Layout and Visual Direction
5.1 Approved Visual Direction
The approved visual direction is:
A. Gallery-First Warm Console
This means:
- warm neutral page background instead of pure white
- deep ink navigation shell
- restrained green accent for key CTA states
- review surfaces designed around image inspection first
5.2 Visual Character
The UI should feel:
- professional
- calm
- high-density but readable
- distinct from generic enterprise dashboards
It should not feel:
- cold and generic
- decorative for decoration’s sake
- overly editorial on operational pages
5.3 Typography and Color Rules
- Chinese UI text uses
Noto Sans SC - IDs, order numbers, and technical labels use
IBM Plex Mono - the primary accent is reserved for high-value actions such as submit and approve
- state colors are managed separately from brand accent colors
- the review workbench remains visually more restrained than marketing-style pages
6. Technical Architecture
6.1 Framework Direction
The frontend will be built as a standalone Next.js application using:
- Next.js App Router
- TypeScript
- Tailwind CSS
6.2 Route Grouping
The application will be organized as:
app/
(dashboard)/
orders/page.tsx
orders/[orderId]/page.tsx
submit-workbench/page.tsx
reviews/workbench/page.tsx
workflows/page.tsx
workflows/[orderId]/page.tsx
libraries/models/page.tsx
libraries/scenes/page.tsx
libraries/garments/page.tsx
settings/page.tsx
login/page.tsx
api/*
The dashboard route group owns the shared shell:
- side navigation
- top bar
- page content container
- shared empty states
- shared badges and status treatments
6.3 BFF Layer
The BFF layer under app/api/* is responsible for:
- request validation
- backend proxying
- response normalization
- mock response generation
- environment-based backend URL routing
- mapping backend responses into stable frontend-facing contracts
Pages do not call FastAPI directly.
7. Data Model Strategy
7.1 Frontend View Models
The UI consumes stable frontend view models rather than raw backend payloads.
Approved shared view models:
OrderSummaryVMOrderDetailVMReviewQueueItemVMWorkflowDetailVMLibraryItemVM
7.2 Adapter Rules
All cross-source differences are handled in adapters:
- missing backend fields are converted into explicit fallback copy or null-safe UI states
- business-empty responses are not treated as system failures
- mock asset URIs such as
mock://...are displayed honestly as mock assets - backend enum values are mapped once, not repeatedly in page components
7.3 File Decomposition
The frontend should be split along responsibility boundaries:
src/
lib/
api/
adapters/
mock/
types/
features/
orders/
reviews/
workflows/
libraries/
components/
layout/
ui/
The key rule is that mock-vs-real complexity must live in lib, not in page UI trees.
8. Real Modules vs Placeholder Modules
8.1 Real Integration Modules
The first implementation phase will perform true integration for:
提单工作台审核工作台订单详情流程详情页 /workflows/[orderId]
8.2 Placeholder or Transitional Modules
The first implementation phase will preserve full route structure for:
/orders/workflows/libraries/models/libraries/scenes/libraries/garments/settings/login
These are not “missing pages”. They are real screens with:
- proper layout
- proper states
- mock or transitional data
- explicit product messaging about current backend limitations
9. Core Page Responsibilities
9.1 /submit-workbench
Purpose:
- the only first-class order creation workspace
Responsibilities:
- customer level selection
- service mode selection
- mock-backed resource selection for model, scene, garment
- local validation of backend-supported combinations
- request submission to create orders
- success feedback and redirect to
/orders/[orderId]
Non-responsibilities:
- no review actions
- no workflow timeline deep-dive
- no list monitoring behavior
9.2 /reviews/workbench
Purpose:
- the highest-frequency manual review surface
Responsibilities:
- display the pending review queue
- switch between orders quickly without route churn
- show the current candidate asset and key order context
- perform
approveandrerun_*review decisions - surface compact workflow summary and errors relevant to review
Non-responsibilities:
- not the canonical archive for full order history
- not the main workflow forensic page
- not a fake implementation of unbuilt revision-chain APIs
Because the current backend lacks revision endpoints, first implementation should present those PRD concepts as clearly marked placeholders rather than simulate unsupported actions as if they were real.
9.3 /orders/[orderId]
Purpose:
- the canonical shared order detail page
Responsibilities:
- order metadata
- current status
- asset list
- final result area
- workflow summary
- navigation to review and workflow detail pages
Non-responsibilities:
- no heavy review action UI
- no full process forensics
- no order creation
9.4 /workflows/[orderId]
Purpose:
- focused workflow inspection and troubleshooting
Responsibilities:
- workflow status card
- current step
- step timeline
- failure and anomaly details
- direct order-id-based lookup
Non-responsibilities:
- no primary image review experience
- no review decision submission
- no resource selection
10. UX Rules and State Handling
10.1 Submit Workbench Rules
lowmust only allowauto_basicmidmust only allowsemi_pro- submission failure must preserve form state
- success must show
order_idandworkflow_id, then redirect to order detail
10.2 Review Workbench Rules
- queue items are never removed optimistically on action submission
rerun_scene,rerun_face, andrerun_fusionrequire comment input- action failures are shown inline in the action area
- queue refresh should be explicit and predictable after successful actions
10.3 Order Detail Rules
- absence of final asset is a valid business state
- absence of assets is a valid business empty state
- unsupported revision-chain behavior is displayed as “not currently backed by backend” rather than as an error
10.4 Workflow Rules
- “not found” workflow responses must be distinguished from transport or server failures
- workflow step rendering should emphasize current step, failed step, and rerun lineage where available
11. Error Model
The UI uses three error/state categories:
11.1 Business Empty State
Examples:
- no final image yet
- no assets yet
- no real orders list yet
- no resource library backend yet
These render as valid explanatory UI states, not error banners.
11.2 Retryable Error
Examples:
- temporary network failure
- backend timeout
- proxy failure
These render with retry affordances.
11.3 System Error
Examples:
- unexpected response shape
- unrecoverable server failure
- application-level state contradiction
These render as hard failure states with diagnostic framing.
12. Mock and Placeholder Policy
Placeholder modules are first-class citizens in the shell, but they must remain honest.
Rules:
- never imply an unavailable backend capability is actually live
- never silently replace missing backend data with fabricated “real-looking” data on core real-integration pages
- keep mock data isolated to modules explicitly designated as transitional
- label unavailable capability clearly where it matters to task completion
13. Testing Strategy
First-phase testing will prioritize correctness over exhaustive visual snapshot coverage.
13.1 Must-Test Areas
- BFF route handlers
- adapter mapping logic
- submit workbench validation rules
- submit and review action request flows
- key page state rendering for loading, empty, success, and failure
13.2 Lower Priority for Phase 1
- pixel-perfect visual snapshots
- exhaustive placeholder-page snapshots
- animation-heavy testing
The purpose of the first test layer is to protect data contracts and operational flows.
14. Delivery Boundary
14.1 First-Phase Hard Acceptance
The frontend must be able to:
- create an order from the submit workbench
- review pending orders from the review workbench
- execute
approve - execute
rerun_scene - execute
rerun_face - execute
rerun_fusion - inspect order detail data
- inspect workflow detail data
14.2 First-Phase Structural Acceptance
The console must also provide:
- complete navigation shell
/ordersas the official entry page- resource library placeholders
- workflow lookup index page
- settings and login route placeholders
15. Risks
- The root PRD is ahead of the currently implemented backend in revision-related capabilities.
- The default home page is structurally important but cannot yet be backed by a real list API.
- Mock asset URIs limit the realism of image preview experiences.
- Without authentication in phase 1, the console assumes a trusted environment.
16. Implementation Direction
The implementation should proceed by:
- scaffolding the Next.js app shell and BFF layer
- establishing shared types, adapters, and placeholder data contracts
- implementing the four real-integration modules
- filling in the transitional modules with honest placeholder behavior
- validating the accepted states and operational flows with tests
17. Local Setup Notes
Implementation assumes the frontend runs with:
BACKEND_BASE_URL=http://127.0.0.1:8000/api/v1
Recommended local verification commands:
npm run testnpm run lintnpm run typechecknpm run buildnpm run verify
The adjacent backend project must be started separately when manually checking the four real-integration pages.