# Live Board MVP 專案規範

## 目的

提供多門課程／活動、多個白板、多則公告的即時公佈欄。學員端必須能在不登入的情況下閱讀與複製公告；教師端只供教師登入後管理白板與公告。

## 主要檔案

- `index.html`：學員端公開頁面。
- `admin.html`：教師控制台。
- `src/data.js`：Supabase 與本機示範模式資料存取。
- `src/sorting.js`：白板排序、置頂與鎖定優先順序。
- `src/board.js`：學員端渲染、收摺、複製、QR Code 與同步。
- `src/admin.js`：教師登入、公告 CRUD、排序與發布控制。
- `supabase/migrations/`：資料表、RLS、Realtime trigger。
- `HANDOFF.md`：目前狀態、測試與部署接手資訊。

目前 migration 依序包含基本資料表、兩輪安全性收斂、多白板／排序／鎖定／置頂／稽核紀錄擴充，以及固定 slug 保護。

## 邊界與安全

- 不在任何前端檔案、文件或提交內容放入 `service_role`、`sb_secret_...`、密碼或其他憑證。
- 學員端只可讀取已發布公告；教師寫入權限由 Supabase Auth 與 RLS 控制。
- 公告內容視為「拿到白板網址即可閱讀」的公開資料，不放入敏感個資或機密資料。
- 白板標題可以修改；slug 是固定的公開識別。每則公告以 post ID 形成固定連結。
- 公告本文可以鎖定；鎖定只禁止修改本文，解除鎖定與修改由 Supabase 稽核表記錄。
- Realtime 事件只傳送小型異動通知；長文透過 HTTPS 取得，不把完整內容放進 Realtime payload。
- 不使用外部 CDN、Google Fonts、第三方 iframe 或外部 QR API。

## 語言與介面

中文介面使用臺灣繁體中文。公告本文是純文字，必須保留換行與空白並以 `textContent` 渲染，避免將教師貼上的內容當成 HTML 執行。

## 驗證

每次修改至少執行 `npm run build`。若有 Supabase 專案，另以測試帳號確認登入、RLS、公告 CRUD、Realtime 更新、草稿不可見與公開白板讀取。發布前需以 Vercel production URL 測試學員端與教師端。

## Git 與部署

本專案可作為獨立 GitHub repository，或放在既有 repository 的 `work/live-board-mvp`。未經本輪明確授權，不執行 commit、push、Supabase migration 實際套用或 Vercel 部署。
