feat: bootstrap auto virtual tryon admin frontend
This commit is contained in:
@@ -0,0 +1,512 @@
|
||||
# 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/orders`
|
||||
- `GET /api/v1/orders/{order_id}`
|
||||
- `GET /api/v1/orders/{order_id}/assets`
|
||||
- `GET /api/v1/reviews/pending`
|
||||
- `POST /api/v1/reviews/{order_id}/submit`
|
||||
- `GET /api/v1/workflows/{order_id}`
|
||||
|
||||
The root PRD also describes manual revision flows and additional endpoints such as:
|
||||
|
||||
- `POST /api/v1/orders/{order_id}/revisions`
|
||||
- `GET /api/v1/orders/{order_id}/revisions`
|
||||
- `POST /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:
|
||||
|
||||
```text
|
||||
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:
|
||||
|
||||
- `OrderSummaryVM`
|
||||
- `OrderDetailVM`
|
||||
- `ReviewQueueItemVM`
|
||||
- `WorkflowDetailVM`
|
||||
- `LibraryItemVM`
|
||||
|
||||
### 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:
|
||||
|
||||
```text
|
||||
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 `approve` and `rerun_*` 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
|
||||
|
||||
- `low` must only allow `auto_basic`
|
||||
- `mid` must only allow `semi_pro`
|
||||
- submission failure must preserve form state
|
||||
- success must show `order_id` and `workflow_id`, then redirect to order detail
|
||||
|
||||
### 10.2 Review Workbench Rules
|
||||
|
||||
- queue items are never removed optimistically on action submission
|
||||
- `rerun_scene`, `rerun_face`, and `rerun_fusion` require 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
|
||||
- `/orders` as 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:
|
||||
|
||||
1. scaffolding the Next.js app shell and BFF layer
|
||||
2. establishing shared types, adapters, and placeholder data contracts
|
||||
3. implementing the four real-integration modules
|
||||
4. filling in the transitional modules with honest placeholder behavior
|
||||
5. 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 test`
|
||||
- `npm run lint`
|
||||
- `npm run typecheck`
|
||||
- `npm run build`
|
||||
- `npm run verify`
|
||||
|
||||
The adjacent backend project must be started separately when manually checking the four real-integration pages.
|
||||
Reference in New Issue
Block a user