VTuber
VTuber monorepo demo for live commerce (virtual streamer) workflow:
apps/web:Next.js 前台(商品瀏覽、直播頁、購物車)apps/admin:Next.js 後台(商品、訂單、庫存)apps/api:NestJS 後端 APIpackages/db:Prisma schema 與資料庫工具packages/ui:共享 UI 元件
快速開始
cd VTuber
git init
npm install
npm run db:generate
npm run db:push # 需先啟動 PostgreSQL 並設定 DATABASE_URL
npm run seed
npm run dev
常用指令
-
npm run dev:啟動 web/admin/api 開發伺服器 -
開發與示範域名:
APP_DOMAIN=vtuber.wooo.work(預設生產網域)
-
npm run build:打包三個 app -
npm run lint:執行 lint -
npm run test:執行 API 測試(目前為 API 空殼,日後補上) -
npm run seed:建立 demo 資料(10 商品、1 直播間、20 則留言) -
npm run db:generate:重新產生 Prisma client -
npm run db:push:依 schema 同步 DB 結構 -
npm run db:migrate:產生 migration 檔(可選)
日誌總覽
- Day 1:Monorepo + Prisma + Seed(10 商品、20 留言)
- Day 2:前台商品頁、商品頁、購物車與結帳
- Day 3:直播 Demo(左主播、右留言、下方主推)
- Day 4:後台商品/訂單/庫存/作業台
- Day 5:AI 主播問答 API(價格、庫存、尺寸、物流)
- Day 6:真人 / 虛擬直播場景與動畫 placeholder
- Day 7:部署 + 端到端流程驗證
Day 3:直播 Demo
- 開啟
/live/demo進入直播頁(預設會讀取直播間場景流與作業資訊) - 左側為虛擬主播區(可替換 video/avatar)
- 右側為留言輸入與列表
- 下方為主推商品與「立即購買」
主播角色與作業流程(MVP)
- 主持人(HOST):直播主講、回覆問題、引導下單
- 場控/導播(PRODUCER):轉場與畫面節奏控制
- 導演(DIRECTOR):逐字稿節奏、回合節奏與上鏡順序控管
- 小編/編輯(EDITOR):腳本文案、備稿、字幕與直播素材
- 小助手(SUPPORT):留言回覆、加購/售後疑問回應
- 倉儲(WAREHOUSE):實體庫存核對、出貨前置
- 行銷(MARKETING):促銷節奏、優惠提醒、活動執行
- 運維(OPERATOR):直播間啟關、連線監控(預留)
主流程(可操作):
- 開播前:建立直播間與角色指派,完成 3~5 個主打腳本節點與核對清單;
- 直播中:開播/留言互動/AI 詢問回覆;
- 結帳:在直播頁可直接「加入購物車」或「立即購買」建立 mock 訂單;
- 結束後:在後台回顧腳本勾選與清單完成度。
正式環境推版(建議 188)
- 在正式機先放好
VTuberrepo,並複製deploy/.env.prod.example為deploy/.env.prod - 填寫
deploy/.env.prod - 本機執行推版腳本:
chmod +x deploy/deploy-prod.sh
cp deploy/.env.prod.example deploy/.env.prod
./deploy/deploy-prod.sh
若你要直接做到「推版 + 內外網可用性檢查」一次完成,可直接執行:
./scripts/deploy-and-verify-vtuber110.sh
這支指令會先跑 deploy-prod.sh,再自動做 /live/demo 與 DNS/憑證健康檢查,部署完直接知道是否已恢復。
若外網 DNS 還是指到舊站,腳本會直接回傳失敗並停止,避免把錯誤版本上線。
- 正式環境驗證:
curl http://localhost:3000(前台)curl http://localhost:3001(後台)curl http://localhost:4000/api/health(API)curl http://localhost:3000/live/demo(直播頁)curl -ksS https://vtuber.wooo.work/live/demo(正式網域直播頁)curl -ksS https://vtuber.wooo.work/zh-TW/live/demo(正式網域繁中直播頁)
或者直接一鍵執行(包含部署驗證+兩條正式網域路徑):
./scripts/verify-live-domain-110.sh
如果你要直接在正式網域驗證,請先確認反向代理已將 443/80 轉到對應服務。
110 正式站快速可用性檢查
可直接執行:
./scripts/check-vtuber-offline-110.sh vtuber.wooo.work 114.32.151.246
內容會回報:
- DNS A/AAAA 解析是否指到 114.32.151.246
- TLS 憑證 Subject / Issuer / 到期日 / SAN
/live/demo及/zh-TW/live/demo直連、SNI 指向、IP+Host 直走、純 IP 訪問 5 種路徑結果- 若回應非 200,腳本會直接列為失敗(
404不會再被誤判為通過) - 失敗項目對應的提醒(例如要檢查哪個 DNS A Record)
可加上 CHECK_STRICT_MODE=1 強制回傳非 0 讓流水線判斷失敗(預設已啟用)。
110 Nginx 404 保底導回設定
如果你要直接在 110 套用 404 fallback,可先確認 deploy/.env.prod 已填好,再執行:
./deploy/apply-nginx-110-live-fallback.sh
腳本行為:
- 將
deploy/vtuber-nginx-110-live-fallback.conf上傳到/etc/nginx/snippets/vtuber-nginx-110-live-fallback.conf - 於
NGINX_SERVER_CONFIG(預設/etc/nginx/sites-available/${APP_DOMAIN}) 插入 snippet include nginx -t後重新載入 Nginx
環境變數
請複製根目錄 .env.example 為 .env 並修改:
DATABASE_URLAPI_PORTNEXT_PUBLIC_API_BASE_URL
各 app 也保留 .env.example 於專案下可作為參考。
Description
Languages
TypeScript
92.3%
Shell
5.9%
Dockerfile
0.9%
JavaScript
0.7%
CSS
0.2%