11/01課堂即時白板・自己蓋
2026.11.01・@SONIC

公司擋了 Google 文件,
我只好自己蓋一面白板

這篇文章就把做這面白板的過程攤開來講。你不需要會寫程式,只要會申請帳號、會複製貼上,再留一個下午的時間就夠了。

起因

事情是這樣開始的

在企業內訓上過課的人,大概都看過這個畫面。

09:00企業內訓現場

老師,打不開。

早上九點,投影布幕上秀出一個 Google 文件連結,講師請大家點開,把裡面的提示詞複製到 ChatGPT。三十秒後,第一排舉手:

「老師,打不開。」

接著是第二排、第三排,最後連坐在門口的人資窗口都舉手了。

公司的資安政策擋掉了 Google 文件,而且擋得比課程大綱還嚴。

於是講師開始念提示詞讓大家照打:「請扮演一位資深顧問,冒號……不是那個冒號,是全形的。」二十分鐘過去,一半的人打錯一個字,另一半的人在等打錯的那一半。

1 天第一版

所以我決定自己做一面白板

你可能會說,開個 LINE 群組不就好了?可以,一門課開一個群。問題是一學期有好幾門課、好幾家企業,群組越開越多。而且課程結束後群組也不會自己消失,最後只會慢慢變成早安圖跟團購的集散地。

所以我決定自己做一面白板。我在後台貼上指令,學員用手機掃 QR Code,不用登入、不用加好友,按一下就能複製全文。第一版只花了一天,當天就帶去上課。

後來有幾家客戶來問這套能不能買。原因很簡單,因為它好用,而且幾乎不用維護。

學員手機掃 QR Code 打開

學員看到的畫面

學員看到的是一則一則的公告,預設收合起來,點開就是全文,旁邊有個複製全文的按鈕。再長的提示詞都在自己的框框裡捲動,不會把整個頁面拉得老長。

學員手機畫面:收起來的公告清單,以及點開後的全文與複製按鈕
講師一門課開一面白板

講師看到的管理後台

講師看到的是一個管理後台。一門課開一面白板,貼公告、改草稿、置頂,再把 QR Code 投影到布幕上,就這樣。

教師管理頁:白板設定與 QR Code

上面是我的版本,白板跟公告都是示範資料。你請 AI 做出來的畫面可能會不太一樣,就像同一份食譜交給不同師傅,擺盤不同,但做出來是同一道菜。

3 個GitHub・Vercel・Supabase

書櫃、店面、倉庫加警衛

這套工具背後用了三個服務。別緊張,它們的分工跟開一家小店差不多:

GitHub書櫃

收好程式碼,也就是這家店的食譜。

Vercel店面

照食譜把網頁做出來,放在網路上給大家看。

Supabase倉庫加警衛

存公告、檢查誰可以進門,有新資料就通知網頁。

重點是,你每次發公告只會動到倉庫,書櫃跟店面都不用碰。這就是它幾乎不用維護的原因。

VSVercel 與 GitHub Pages

GitHub 不是也能放網頁嗎?

可以。我的個人網站就放在 GitHub Pages。但這個白板我放在 Vercel,因為對第一次動手做的人來說,Vercel 少了好幾道關卡。簡單來說,GitHub Pages 像是借你一間免費廚房,洗菜切菜都自己來;Vercel 則是有人先幫你備好料,你只要下鍋就好。

比較項目VercelGitHub Pages
推上 GitHub 之後自動認出 Vite、自動建置、自動上線要另外寫一份 GitHub Actions 流程,才會幫你建置 Vite
填 Supabase 網址與金鑰直接在網頁表單填環境變數要放進 Actions 的變數,再讓建置流程讀取
網址專案名.vercel.app,網站就在根目錄帳號.github.io/專案名/,Vite 要另外設定 base 路徑,不然只會看到一片空白
測試新版本每個分支自動產生預覽網址預設只有一個正式網址
私人專案庫(Repository)個人帳號的私人專案庫也能免費部署免費帳號只能從公開專案庫發布
用途限制免費的 Hobby 方案限個人、非商業用途不能當作經營線上生意的免費主機,官方也提醒不該拿來處理密碼這類敏感資料
免費額度每月 100 GB 流量網站空間 1 GB、每月 100 GB 流量(彈性上限)

倒數第二列要多提一下:教師登入頁偏偏就要輸入密碼。雖然密碼是直接送到 Supabase、不會經過 GitHub,但官方這條提醒還是放在心上比較好。

簡單講,如果你已經很熟 GitHub Pages、專案庫是公開的,也願意多寫一份建置流程,用 Pages 完全沒問題,Supabase 那邊的設定都不用改。如果是第一次做,用 Vercel 最省事。

資料來源:GitHub Pages limits、Vite Deploying a Static Site、Vercel Hobby Plan,2026 年 11 月查閱。

00準備

動手前要準備的東西

  • 一台電腦,Windows 或 Mac 都可以。
  • 一個 Email,用來註冊 GitHub、Vercel、Supabase 三個免費帳號。
  • 一個會寫程式的 AI 助理,例如 Claude Code 或 Codex。能直接在你電腦裡建檔案的工具最省事;只能對話的網頁版也行,只是你要多做幾次複製貼上。
  • 一個下午,外加一杯咖啡。

另外要有兩個心理準備。

第一

你會看到很多英文介面跟紅色的錯誤訊息。看不懂沒關係,整段複製貼給 AI 就好。這是整篇文章唯一的除錯技巧,而且非常管用。

第二

專案資料夾請放在電腦本機的一般路徑,像是 C:\projects\live-board,千萬不要放進 OneDrive 或 Google 雲端硬碟的同步資料夾。原因後面聊到踩坑經驗時會講。

01GitHub → Vercel、Supabase

開三個帳號,用同一個 Email

先註冊 GitHub,接著直接用 GitHub 帳號連動登入 Vercel 跟 Supabase,這樣最省事。用同一個 Email 的好處是,哪天有通知信或帳單寄來,你至少知道要去哪個信箱找。

Supabase 登入頁與 Vercel 註冊頁,都有 Continue with GitHub

兩個網站都有 Continue with GitHub 的按鈕,直接按下去就好,還能少記兩組密碼。

02Supabase

在 Supabase 開專案,先把大門鎖好

  1. 建立一個新專案,名稱取作 live-board 就好;伺服器區域選離台灣近的,像是東京或新加坡。資料庫密碼請存進密碼管理工具,不要寫在螢幕旁邊的便利貼上。

  2. 到 Authentication 底下的 Sign In / Providers,把 Allow new users to sign up 關掉。網頁上沒有做註冊按鈕,不代表別人不能從後門註冊;就像教室門口沒貼歡迎光臨,不代表門有鎖好。

    Supabase 的 User Signups 設定,Allow new users to sign up 為關閉
  3. 到 Authentication 的 Users 頁面按 Add user,幫自己建一個教師帳號。這是整套系統唯一需要的一組帳號。

    Supabase 的 Create a new user 視窗

    按 Add user 後選 Create new user。Email 填你自己的,密碼另外設一組;Auto confirm user 保持勾選,這樣就不用再去信箱收驗證信。

  4. 記下兩樣東西:Project URL 跟 publishable key。Project URL 長得像 https://一串代碼.supabase.co,在 Integrations 的 Data API 頁面裡叫做 API URL;publishable key 則在 Settings 的 API Keys 頁面。這兩個可以放進網頁程式碼裡。同一個頁面還有一把叫 service_role 或 secret 的金鑰,請把它當成保險箱密碼,絕對不要放進網頁、不要貼給 AI,也不要寫進任何檔案裡。

    Supabase 的 API Keys 頁,金鑰已模糊處理

    上面那把 publishable 可以給網頁用,頁面上也有註明可以公開;下面那把 secret 就是保險箱密碼。截圖裡這兩把金鑰都已經先做模糊處理了。

03AI 助理

請 AI幫你寫程式

在剛剛建好的本機資料夾裡打開 AI 助理,把下面整段文字貼給它。這份需求已經把我踩過的坑都寫進去了,讓 AI 照著做就能直接避開。

提示詞課堂即時白板網站
請幫我做一個「課堂即時白板」網站。我沒有程式經驗,請一次只給我一個步驟,等我回報結果再往下。

使用的服務:前端用 Vite(純 JavaScript),資料與登入用 Supabase,最後部署到 Vercel。

學員頁(網址 /?slug=白板代號)
1. 不用登入,只看得到已發布的公告。
2. 每則公告預設收起來,點開才顯示全文;旁邊有「複製全文」按鈕。
3. 長公告在固定高度的區塊裡捲動,不要把整頁撐長。
4. 公告一律當純文字顯示(用 textContent),保留換行,不執行任何 HTML。

教師頁(網址 /admin)
5. 用 Supabase 的 Email 和密碼登入,不要做註冊功能。
6. 可以建立多個白板。每個白板有可以修改的標題,和建立後不能修改的 slug;可以切換白板是否對學員公開。
7. 可以新增、編輯、刪除公告,也可以改為草稿或置頂。
8. 顯示這個白板的 QR Code。QR Code 的內容一律是「網站首頁 + ?slug=白板代號」,絕對不能指向 /admin;QR Code 在瀏覽器裡產生,不呼叫外部服務。

資料庫與安全
9. 給我一份可以直接貼進 Supabase SQL Editor 執行的 SQL:建立資料表、開啟 RLS、寫好權限規則(學員只能讀已發布且公開的公告;教師只能管理自己建立的白板),並替每張資料表寫好 GRANT。
10. slug 不能修改這件事,要在資料庫裡擋住,不能只靠網頁。
11. 網頁只使用 Project URL 和 publishable key,放在 .env.local,並把 .env.local 加進 .gitignore。不要在任何地方使用 service_role 金鑰。

即時更新與省流量
12. 用 Supabase Realtime 只通知「哪個白板有變動」,學員頁收到後再重新讀取公告。
13. 即時連線斷掉時,改成每 60 秒檢查一次,而且只在分頁畫面開著時檢查。
14. 學員頁先只讀公告標題,點開時才讀全文。

最後,教我把程式推上一個新的 GitHub repository,再教我在 Vercel 匯入、選 Vite、填好環境變數並部署。

接下來 AI 會一步一步帶你做。它請你在終端機輸入指令,你就跟著貼;它要 Project URL 跟 publishable key,你就給;如果它跟你要 service_role,記得拒絕。

等 AI 跟你說可以在本機打開了,你會拿到一個 localhost 開頭的網址。先別急著測試,因為這時候還沒連上資料庫,那是下一步的事。

04Supabase SQL Editor

把 SQL貼進 Supabase

AI 會給你一大段 SQL 語法。打開 Supabase 的 SQL Editor,整段貼上去,按右上角的 Run。看到 Success 就代表過關;如果看到紅字報錯,照前面說的,直接複製貼回去給 AI 處理。

Supabase 的 SQL Editor,右上角是 Run 按鈕

中間那一大片空白區就是貼 SQL 的地方,右上角綠色的 Run 按下去就會執行。

這時候回到本機網址登入教師後台,建一面白板、發一則公告,再開另一個瀏覽器視窗看學員頁面。看到公告自己跳出來的瞬間,你大概會興奮到想拍桌子。不過請拍輕一點,小心桌上的咖啡。

教師登入畫面:只有 Email 與密碼,沒有註冊按鈕

教師登入頁只有 Email 跟密碼兩個欄位,沒有註冊按鈕。登入帳號就是你在第二步幫自己建的那一組。

如果網頁跳出 permission denied,八成是漏了 GRANT 權限設定。Supabase 從 2026 年 10 月底開始,新建的資料表都要明確設定授權,前端網頁才讀得到資料。前面的提示詞已經有交代 AI 要寫這段,萬一它漏掉,把錯誤訊息貼回去請它補上就好。

05GitHub

放上 GitHub

請 AI 幫你建一個新的 GitHub 專案庫(Repository),把程式碼推上去。推上去之前,先問 AI 一句:「.env.local 有沒有設好排除?」確認有排除再推。

這面白板請獨立放在一個專案庫裡,不要跟你的個人網站或其他課程檔案擠在一起。這句話是血淚教訓,原因等一下講。

06Vercel

在 Vercel正式上線

  1. 在 Vercel 新增一個 Project,從清單裡選剛剛建好的 GitHub 專案庫,按 Import。

    Vercel 新增專案頁的 Import Git Repository 區塊

    第一次匯入時要先按 GitHub 授權,讓 Vercel 讀得到你的專案庫。

  2. Framework Preset 選 Vite。

    Vercel 的 Framework Settings,Framework Preset 為 Vite

    其他欄位都不用動。

  3. 在 Environment Variables 填入 Project URL 跟 publishable key,變數名稱要跟 AI 寫在 .env.local 裡的一模一樣。

    Vercel 的 Add Environment Variable 視窗

    專案建好之後,隨時可以到 Settings 底下的 Environment Variables 新增或修改,畫面就像上圖。Type 選 Config 就好,因為這兩個值本來就會出現在前端網頁裡,不算機密。Key 填變數名稱,Value 填剛剛記下來的值。

  4. 按下 Deploy。

等個一兩分鐘,你就會拿到一個 .vercel.app 結尾的網址。到這裡,你的課堂白板就正式上線了。

07手機

從學員的角度驗收

上課前有三個測試一定要做:

  1. 拿手機掃 QR Code。直接看到公告就過關;如果跳出登入畫面,代表 QR Code 的網址指錯地方了。

  2. 電腦開著教師後台、手機開著學員頁面,從電腦發一則新公告。手機在幾秒內自動跳出這則公告就算過關。

  3. 把手機的 Wi-Fi 關掉,改用自己的行動網路再試一次。有些企業內網會擋即時連線(WebSocket),這時候白板應該要在 60 秒內自動更新補上。

第二個測試成功的話,畫面看起來會像這樣:

左邊是教師在電腦上儲存公告,右邊是學員手機不用重新整理就出現新公告

三個測試都過關,就可以放心帶去上課了。

踩坑|五個

我幫你踩過的幾個坑

前面那份給 AI 的需求之所以寫得那麼細,是因為下面每一件事都是我真實踩過的雷。你當故事看就好。

坑 1QR Code

QR Code 直接連到教師登入頁

第一版的 QR Code,我是用「目前網址去掉 admin.html」的方式湊出來的。偏偏 Vercel 會自動把網址的 admin.html 簡化成比較乾淨的 /admin,結果程式根本沒去掉半個字。

原本以為/admin.html去掉 admin.html/學員頁
實際上/admin沒有 admin.html 可以去掉/admin教師登入頁

還好上課當天早上我自己先掃了一次才發現,不然全班掃完 QR Code,大概會一起抬頭看著我,問老師帳號密碼是多少。

怎麼避開

QR Code 網址一律固定用「網站首頁 + 白板代號」來組,而且上課前一定要拿自己的手機實際掃過。

坑 2流量

Supabase 寄信稱讚我「成長驚人」

信件開頭第一句寫著:

Impressive growth with your Supabase organization!

到了這個年紀,很少收到雲端服務商的稱讚。但讀到第二段才搞懂,它是在委婉提醒我:免費流量額度快爆了。

查了一下發現,原本的寫法會讓學員頁面每 15 秒就把整份公告重新下載一次,連放在手機背景、下課忘了關掉的分頁也照抓不誤。後來我改成先抓標題、點開才抓全文,而且斷線時改成每 60 秒才檢查一次,外加只有畫面開著的時候才動作。

改版前每 15 秒整份重新下載,背景分頁照抓
改版後先抓標題、點開才抓全文;斷線時每 60 秒、畫面開著才檢查
不到 1/20

我自己試算了一下,改完之後同樣一堂課耗掉的流量不到原本的二十分之一。前面提示詞的第 12 到 14 點,就是這封稱讚信換來的經驗。

坑 3部署

白板被另一門課的網站吃掉了

我一開始圖方便,把白板跟個人網站、課程頁面、部落格全部塞在同一個 GitHub 大專案庫裡。結果某天在更新另一門課的網站時,部署流程順手就把白板的程式碼整個清空了。

接下來的四天,Vercel 非常盡責地寄了至少 42 封部署失敗的通知信給我。好消息是,學員頁面從頭到尾都還能用,因為 Vercel 在部署失敗時會自動維持最後一次成功的版本;壞消息是,我的信箱塞了 42 封警告信。

42封部署失敗通知信
怎麼避開

白板一定要獨立開一個專屬的專案庫。

如果你已經跟我一樣放在同一個大專案庫裡,記得去 Vercel 的 Root Directory 設定,把路徑指向白板那層資料夾(如下圖)。但還是老話一句,萬一資料夾被別的流程誤刪,這裡怎麼設定都救不回來。

Vercel 的 Root Directory 設定,指向 share/live-board-mvp
坑 4排版

資料都在,只是寬度變成 0

有一次,管理後台的公告摘要突然一片空白。我查了半天,資料庫裡的內容一筆都沒少,最後才發現是網頁排版出問題,把摘要那一欄擠成 0 像素寬。東西明明在,但畫面上就是看不見,跟期末分組報告裡的某些組員一樣。

怎麼避開

遇到畫面上的東西憑空消失,先檢查排版,再懷疑資料庫。或者更乾脆一點,直接截圖丟給 AI 幫你看。

坑 5本機資料夾

OneDrive 跟安裝程式打架

一開始我把專案放在 OneDrive 的同步資料夾裡安裝套件,結果 OneDrive 急著同步備份、安裝程式忙著寫入檔案,兩邊同時搶同一批檔案,搞到最後某個關鍵檔案直接變成 0 bytes,整個專案跑不動。

怎麼避開

寫程式的專案一定要放在電腦本機的一般資料夾。雲端硬碟拿來備份文件很好用,但不適合拿來當施工現場。

要花多少錢?
平常要管什麼?

如果只是一門課、幾十位學員,而且只貼文字不放大型附件,直接用 Supabase 跟 Vercel 的免費方案就很夠用了,每個月 0 元。不過有三個細節要先知道:

Supabase 免費方案

Supabase 的免費專案只要連續一週沒有任何讀寫活動,就會自動進入休眠暫停狀態。如果是每週一次的課,剛好遇到連假停課,下次上課前記得先自己打開後台喚醒它,別等上課時讓學員幫你發現。

Vercel Hobby 方案

Vercel 免費的 Hobby 方案條款規定只限個人、非商業用途。如果是拿去用在有收費的企業內訓,照規定要升級成 Pro 方案,每個帳號每月 20 美元。

Supabase Pro 方案

我自己後來有把 Supabase 升級到 Pro 方案(每月 25 美元起),但那是因為我的 Supabase 裡還放了其他網站的服務,並不是單靠這個白板把額度吃光的。

上面的價格是我 2026 年 11 月看官網的數字,你要刷卡前建議還是自己去官網看一眼最新方案。

至於日常維護,這就是企業客戶最喜歡的部分了:

每次上課

打開後台貼公告,沒了。

每個月

去 Supabase 的用量頁面瞄一眼,確認沒有收到稱讚信。

每學期末

把已經結束的課程白板切換成不公開,或是匯出備份後直接刪掉。

平常發公告完全不用碰程式碼,也不需要重新部署網站。比起管理一個 LINE 群組,它至少不會在半夜跳出團購訊息。

所以,
這套工具可以買嗎?

後來真的有幾家企業客戶問我能不能買斷這套小工具。我完全能理解,因為它解決的雖然是個小麻煩,卻是每堂課都會遇到的痛點,而且一旦架好,後面幾乎不用花時間管。

如果你讀到這裡,還是覺得直接花錢請人弄好比較省事,那也完全沒問題。至少你現在很清楚,你買下的是一個書櫃、一間店面,外加一座配了警衛的倉庫。

如果你決定這個週末自己動手做一個,記得上課前的第一件事:拿出手機,自己先掃一下螢幕上的 QR Code。

吳相勲的插畫頭像

吳相勲

WU HSIANG HSUN · SONIC
現職
元智大學管理學院副教授、終身教育部主任
公司治理
揚明光學獨立董事(2015 年起)
學術訓練與研究
國立臺灣大學國際企業策略組博士。研究策略管理、組織理論、動態能力與競爭動態,近年延伸到數位轉型與生成式 AI。
企業經驗
早年任職創投,每年審閱超過百件投資案;長期為上市櫃與跨國企業規畫策略會議、策略工作坊與高階主管培訓。
寫作
《商業周刊》、《經理人月刊》專欄作者