Sony Wiki là repo làm việc chính cho runtime mới của dự án. Đây là monorepo dùng Turborepo, hiện có một ứng dụng triển khai thật tại apps/web.
Nếu cần nắm dự án nhanh theo workflow BMAD, đọc theo thứ tự:
apps/web: runtime Next.js 16 App Router đang được phát triển thật.docs: lớpproject_knowledgecủa repo, dùng để giữ current state, structure notes và rollout checklists._bmad: BMAD framework, skills, workflows và templates._bmad-output: planning artifacts và implementation artifacts sinh ra trong quá trình làm việc theo BMAD.../sony-wiki-ref/sony-wiki-dev: legacy reference để đọc flow cũ, không phải nơi phát triển mới.
/redirect server-side sang/wiki./wikilà public root hub có card điều hướngDIvàPE;/wiki?mode=adminmount unified admin workspace.- Top navigation dùng
Product Wikilauncher vàUtilities; cardDIvàPEtrong launcher vẫn phải giữ sub-links theo business group. - Global search gợi ý
productvàcategoryqua/api/search. - Shell light-only, không còn theme switcher.
/livestreamlà internal noindex workspace state cho tới khi có runtime thật./burn-inlà playlist tool tối giản.- Landing catalog cũ được archive mềm tại
/_archive/catalog-home.
- Public routes:
/wiki,/wiki/di,/wiki/di/[categorySlug],/wiki/pe,/wiki/pe/[categorySlug],/wiki/[slug]. - Admin workspace:
/wiki?mode=admin, treeDI/PE > Category > Product, product modal dùng shared surfaces cho overview/specs/trainer/SEO. - Canonical Supabase source:
wiki_catalog_nodes. - Legacy adapter routes
wiki/categories*vàwiki/products*vẫn tồn tại để bảo toàn caller cũ, nhưng write path mới đi qua node/admin helpers. - Structured specs dùng
specAttributes, custom fields, field options, table columns và template presets. - Public product detail đọc qua typed query/SEO layer và có grouped specs, related products, canonical metadata.
- Compare queue giới hạn tối đa 4 sản phẩm.
- Public route:
/color-lab. - Runtime đọc typed recipes/photos từ Supabase, parse
q,cameraLine,profiletừ URL và gắn gallery đúng recipe đang chọn. - Load state phân biệt
live,seeded-fallbackvàdegraded. - Preview photos dùng public URL từ Supabase Storage bucket
color-lab-preview, hỗ trợ cả upload file và manual URL. - Admin workspace dùng Supabase auth cookie session chung với Wiki admin contract.
Shared:
GET /api/search
Wiki:
POST /api/wiki/admin/loginPOST /api/wiki/admin/verifyGET /api/wiki/admin/sessionPOST /api/wiki/admin/logoutGET /api/wiki/admin/catalogPOST /api/wiki/nodesPATCH|DELETE /api/wiki/nodes/[id]GET|POST /api/wiki/categoriesPATCH|DELETE /api/wiki/categories/[id]GET|POST /api/wiki/productsPATCH|DELETE /api/wiki/products/[id]GET /api/wiki/public/products/[slug]POST /api/wiki/media/uploadGET|POST /api/wiki/spec-fieldsPATCH|DELETE /api/wiki/spec-fields/[id]GET|POST /api/wiki/spec-field-optionsPATCH|DELETE /api/wiki/spec-field-options/[id]GET|POST /api/wiki/spec-table-columnsPATCH|DELETE /api/wiki/spec-table-columns/[id]GET|POST /api/wiki/spec-template-field-optionsPATCH|DELETE /api/wiki/spec-template-field-options/[id]GET|POST /api/wiki/spec-template-field-presetsPATCH|DELETE /api/wiki/spec-template-field-presets/[id]
Color Lab:
GET /api/color-lab/admin/catalogGET|POST /api/color-lab/recipesPATCH|DELETE /api/color-lab/recipes/[id]GET|POST /api/color-lab/photosPATCH|DELETE /api/color-lab/photos/[id]
- Framework: Next.js 16 App Router
- Language: TypeScript strict
- UI: React 19 + HeroUI v3
- Styling: Tailwind CSS v4 + shadcn theme bridge trong
globals.css - Data: Supabase
- Forms/validation: React Hook Form + Zod
- Motion: Lenis + GSAP
- Client state phụ trợ: Zustand
- Workspace orchestration: Turborepo
- Node baseline trong repo:
22.22.0
sony-wiki/
├── apps/
│ └── web/ # Next.js runtime chính
├── docs/ # BMAD project knowledge cho repo này
├── _bmad/ # BMAD framework
├── _bmad-output/ # Planning + implementation artifacts
├── scripts/ # Setup, import và Supabase sync utilities
├── supabase/ # Supabase CLI workdir + synced migrations
├── README.md
├── codex.md
├── design_tokens.md
└── project_report.md
Prerequisites:
- Node
22.22.0theo.nvmrc - npm
10.9.4 - Supabase project với public URL, anon key và service role key
Setup:
nvm use
npm run setup
cp apps/web/.env.local.example apps/web/.env.localĐiền các biến chính:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYWIKI_E2E_ADMIN_EMAILWIKI_E2E_ADMIN_PASSWORD
Local development:
npm run devLocal gates cho pass hiện tại:
npm --workspace apps/web run lint
npm --workspace apps/web run typecheck
npm --workspace apps/web run testnpm --workspace apps/web run build vẫn là release/route-surface gate quan trọng, nhưng không phải acceptance gate của pass cleanup này nếu môi trường local bị chặn bởi network/font fetch.
CI hiện có tại .github/workflows/node.js.yml chạy:
npm cinpm run build --if-presentnpm test
CI chưa chạy riêng lint hoặc typecheck, nên hai gate này vẫn phải xác nhận local trước khi chốt thay đổi quan trọng.
Đã xác nhận cục bộ ngày 2026-04-23 trong pass BMAD docs sync + hotspot cleanup:
npm --workspace apps/web run lint: passnpm --workspace apps/web run typecheck: passnpm --workspace apps/web run test: pass