Glow Agent
Take a selfie, see YouCam's AI map of your skin, try makeup shades on your own photo, and check out a routine built for your skin with PayPal.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗基於 Next.js 開發的團購管理平台,支援建立團購、訂單管理、後台管理等功能。
1. 安裝相依套件
npm install
2. 建立環境變數檔案
在專案根目錄建立 .env.local:
TURSO_DATABASE_URL=libsql://your-db.turso.io
TURSO_AUTH_TOKEN=your-auth-token
JWT_SECRET=your-jwt-secret
BLOB_READ_WRITE_TOKEN=your-vercel-blob-token
3. 初始化資料庫結構
TURSO_DATABASE_URL=... TURSO_AUTH_TOKEN=... node scripts/setup-db.mjs
4. 啟動開發伺服器
npm run dev
開啟瀏覽器前往 http://localhost:3000。
初始化資料庫時會建立一個 admin 帳號,密碼來源為:
ADMIN_PASSWORD 環境變數 → 使用該值setup-db.mjs 執行時印出一次(請當下記下來)⚠️ 不再有寫死的固定預設密碼。請在初始化後立即登入並於「個人資料」頁更改為強密碼。
忘記密碼可透過「忘記密碼」頁面以電子郵件自助重設(需帳號已設定 email),或聯繫管理員由後台直接重設。
npm run dev # 啟動開發伺服器(localhost:3000)
npm run build # 正式環境建置
npm run start # 啟動正式伺服器
npm run lint # 執行 ESLint
清除 Next.js 快取(遇到建置問題時使用):
rm -rf .next && npm run dev
src/
├── app/
│ ├── api/ # API Route Handlers
│ ├── buy/ # 公開團購頁面
│ ├── my-orders/ # 我的訂單
│ ├── forgot-password/ # 忘記密碼
│ ├── reset-password/ # 重設密碼
│ ├── dashboard/ # 使用者後台(含個人資料頁)
│ └── admin/ # 管理員後台
├── components/ # 共用元件(Navbar、GlassCard、GroupBuyForm)
├── lib/
│ ├── db.ts # Turso 資料庫連線
│ ├── auth.ts # JWT 驗證工具(jsonwebtoken,Node 端)
│ ├── jwt-secret.ts # JWT secret 單一來源(正式環境強制要求)
│ ├── email.ts # 寄送重設密碼信件
│ └── utils.ts # 共用工具函式
└── proxy.ts # 路由保護(/dashboard、/admin);以 jose 驗證 JWT
scripts/
└── setup-db.mjs # 資料庫初始化與管理員建立
| 狀態 | 首頁顯示 | 直接連結可瀏覽 | 可提交訂單 |
|---|---|---|---|
| 進行中(is_public = 1) | ✅ | ✅ 任何人 | ✅ |
| 已到期 | ❌(自動鎖定後隱藏) | ✅ 任何人(顯示「已鎖定」) | ❌ |
| 手動鎖定 | ❌ | ✅ 任何人(顯示「已鎖定」) | ❌ |
| 未公開(is_public = 0) | ❌ | ✅ 任何人(仍可直接開) | ✅(若未到期且未鎖定) |
說明:
autoLockExpired() 於每次讀取 /api/group-buys 或 /api/group-buys/[id] 時執行),手動鎖定與到期鎖定在資料庫狀態上一致,首頁均不顯示。/buy/[slug] 頁面無身份驗證保護,知道連結的人皆可瀏覽;鎖定時頁面會顯示已截止提示並隱藏報名表單。使用 Turso 雲端 SQLite。資料表包含:users、group_buys、options、orders、order_items、password_reset_tokens。
Schema 不自動遷移,需手動執行 scripts/setup-db.mjs 初始化或重設。
src/proxy.ts 跑在 Edge runtime(Vercel),改用 jose 驗證 JWT,而非 jsonwebtoken(後者依賴 Node crypto,在 Edge 會拋錯,曾導致進入 /dashboard 一律被導回登入)。Node 端 API 仍以 jsonwebtoken 簽發,兩者用同一把 HS256 secret,完全相容。src/lib/jwt-secret.ts 是 secret 的單一來源;正式環境(NODE_ENV=production)未設定即直接拋錯,不再有任何寫死的 fallback,避免有人用公開原始碼偽造管理員 token。請勿從部署平台移除此變數。next.config.ts 對所有路由套用 HSTS、X-Frame-Options: DENY、X-Content-Type-Options: nosniff、Referrer-Policy、Permissions-Policy。待強化(demo 階段未做):登入失敗次數限制、CSP(需 nonce)、上傳檔案 magic-byte 檢查、密碼強度規則。
master 會自動觸發正式部署)TURSO_DATABASE_URLTURSO_AUTH_TOKENJWT_SECRET(必填;未設定正式站會無法啟動)BLOB_READ_WRITE_TOKEN(連結 Vercel Blob Store 後自動注入)NEXT_PUBLIC_BASE_URL(完整網域,選填)ADMIN_PASSWORD(選填;供 setup-db.mjs 建立管理員時使用)EMAIL_HOST、EMAIL_PORT、EMAIL_USER、EMAIL_PASS(SMTP,選填)環境變數新增 / 修改後需重新部署才會套用到正式站(Vercel 顯示「Needs Attention」即代表尚未套用)。