34 個實體椿站、一支 Google 試算表、一份 Apps Script。 參學者掃碼、驗證、轉向、留下紀錄;課程內容的自由度,留給課程組。
參學者走進淨苑,用手機掃描報名連結填個稱謂,拿到一組專屬註冊碼,照著課程路線走到第一個椿站,掃描椿站上的 QR Code,輸入註冊碼與課程碼,畫面隨即跳到那一站的教學內容。看完之後,系統告訴他下一站是哪裡。走到下一站一樣要掃 QR Code——同一根椿站往往被好幾門課共用,系統要靠掃碼才知道該把他送到哪一門課在這一站的網頁,順便也擋掉走錯椿站的情況;註冊碼與課程碼則已記在手機上,不必重打。整條路線走完,按下最後一頁的完成按鈕,跳出恭喜訊息。
全程不需要工作人員在旁引導,不需要安裝任何 App,第一站之後也幾乎不用打字。
椿站不只是打卡點,它是題目的一部分。
課程內容與現地環境綁在一起。生態園林的課走到指定椿站時,畫面上出現一張植物照片,任務是把它和眼前這棵樹對起來;認識淨苑的課站在建築前面,讀到的是這棟建築的來歷與當年動土的因緣。同樣的內容在家裡看,答得出來也沒有意義——因為要辨識的是眼前這棵樹,不是螢幕上的圖片。
這就是「定向」的用意。定向越野的三個元素在這裡各有對應:地圖是淨苑的實體空間,路線是課程設計者選定的學習次序,檢查點則是內容真正發生的地方。移動不是為了增加難度,而是因為離開那個位置,題目就不成立。
系統的角色也因此被界定得很精確:把對的內容,送到對的地點。
課程內容長什麼樣子、用什麼技術做、放在哪裡,完全由各課程組決定。系統不碰內容,只確認「這個人有沒有資格在這一站看這門課」,然後把他送過去,並記下他來過。
這個定位是刻意的。把內容的自由度留給課程組,系統才不會成為瓶頸——新課程只要提供一串網址就能上線,不必動到任何程式碼。
課程與素材都掛上四個維度的標籤,而不是塞進單一的分類樹。這個選擇讓系統在「架構還沒定案」的狀態下就能開始運作,也為日後的文化地圖留了接口。
這套 4D 標籤不是憑空設計的。它由寺院既有的《寺志》六篇章節,先轉化為文化地圖 4D 分類樹,再將六大主題課程嵌入 D2 佛法 MAP 的「教育課程」節點,逐步演化成目前課程標籤所依據的架構。下方三欄呈現這三代演化的完整脈絡。
寺志
│
├── 第一篇 沿革篇
│ ├── 主題:沿革與淨土宗風
│ ├── 寺院緣起與沿革
│ └── 宗風與理念
│
├── 第二篇 建築篇
│ ├── 主題:建築與生態永續
│ └── 寺院建築與環境
│
├── 第三篇 人物篇
│ ├── 主題:法脈傳承與重要人物
│ ├── 開山和尚·智諭老和尚
│ └── 現任住持與傳承者
│
├── 第四篇 典章制度篇
│ ├── 主題:戒學弘揚與叢林制度
│ ├── 僧伽與行政制度
│ └── 弘法與修學活動
│
├── 第五篇 文化典藏篇
│ └── 主題:博雅教育與現代關懷
│
└── 第六篇 現代發展篇
├── 主題:文化典藏與數位傳承
└── 文獻與數位資源
4D 分類樹
│
├── D1|對象(WHO)
│ ├── A. 人物
│ │ ├── 僧眾·居士
│ │ ├── 教育者·研究者
│ │ └── 專業/合作人物
│ ├── B. 受眾
│ │ ├── 一般大眾·佛教信眾
│ │ ├── 青少年·兒童·家庭
│ │ └── 樂齡族·教師·志工
│ ├── C. 組織
│ │ └── 淨苑·基金會·青年團·僧團
│ └── D. 社會角色
│ └── 學習者·修行者·導覽者
│
├── D2|內容(WHAT)
│ ├── A. 文化地圖四大 MAP
│ │ ├── 1. 佛法 MAP
│ │ │ ├── 價值體系
│ │ │ ├── 經典與文獻
│ │ │ ├── 修行架構
│ │ │ ├── 弘法實踐
│ │ │ └── 教育課程
│ │ ├── 2. 人文 MAP
│ │ │ └── 文化脈絡·人物誌·社區互動
│ │ ├── 3. 生態與建築 MAP
│ │ │ └── 生態調查·建築保存
│ │ └── 4. 現地博物館 MAP
│ │ └── 展示空間·教育推廣
│ ├── B. 三大基底
│ │ ├── SDGs
│ │ ├── 文物文獻
│ │ └── 寺院特色(Identity)
│ └── C. 內容格式
│ └── 文本·簡報·照片·影音·設計稿
│
├── D3|場域(WHERE)
│ ├── A. 地理層級
│ ├── B. 寺院整體
│ ├── C. 建築與空間
│ ├── D. 景觀與自然
│ ├── E. 文化地圖空間
│ └── F. GIS 空間層級
│
└── D4|時間(WHEN)
├── A. 時代
├── B. 歷史時期
├── C. 歷史事件
├── D. 年代
├── E. 季節與週期
└── F. 活動時間
4D 分類樹(定向越野版)
│
├── D1|對象(同左,不變)
│
├── D2|內容(WHAT)
│ └── A. 文化地圖四大 MAP
│ └── 1. 佛法 MAP
│ └── 教育課程
│ ├── 課程類型(原有)
│ │ 佛學講座·佛學課程
│ │ 研修班·僧伽教育
│ │ 青年·兒童·生命教育
│ │ 正念教育·博雅教育
│ │
│ └── ★ 自導式主題(新增)
│ ├── 主題一|淨苑歷史
│ │ 歷史脈絡·人物與傳承
│ │ 寺院文化·資料與記憶
│ ├── 主題二|生態園林
│ │ 自然生態·園林景觀
│ │ 寺院建築·永續生活
│ ├── 主題三|六度四攝
│ │ 六度|布施·持戒
│ │ 忍辱·精進
│ │ 禪定·般若
│ │ 四攝|布施·愛語
│ │ 利行·同事
│ ├── 主題四|普賢十願
│ │ 禮敬諸佛·稱讚如來
│ │ 廣修供養·懺悔業障
│ │ 隨喜功德·請轉法輪
│ │ 請佛住世·常隨佛學
│ │ 恆順眾生·普皆迴向
│ ├── 主題五|博雅5×5
│ │ 優質善法|五戒
│ │ 終身學習|博學五戒
│ │ 身心健康|雅健五戒
│ │ 禪定智慧|
│ │ 身心調和五事
│ │ 淨土學|五管
│ └── 主題六|正念體驗
│ 自然正念·正念方法
│ 身心覺察·體驗課程
│
├── D3|場域(同左,不變)
│
└── D4|時間(同左,不變)
固定的課程分類有個根本問題:很多課程天生就跨領域。一堂「結合 SDGs 的現代弘法課程」,要放進佛法類還是永續類?只要是單一維度的樹狀結構,就一定會有課程卡在中間,或被迫二選一。
4D 的解法是不分類,只貼標籤——不預設樹狀結構,改用四個獨立維度描述每一門課,結構之後自然浮現。這正好對應「架構還不確定」的狀態:先別急著決定課程要分成幾類,而是每門課從四個角度各貼一組標籤。
具體到這套系統,好處對應到三個實際限制:
不用重新設計資料結構。 標籤存在獨立的「課程標籤」表,一列一個標籤,一門課要標幾個就加幾列。新增維度或新增值都只是加列——既有的課程表、路線表、打卡邏輯完全不受影響,因為驗證與轉向的核心程式碼根本不讀這張表。
狀態類欄位可以逐步標籤化。 目前「必修/選修」仍是課程表的固定欄位,因為課程分類要讀它。但未來若多出「推薦」「進階」這類狀態,不必改表結構,直接用 D4/難度/進階、D4/進度/已發布 這類標籤承接就好,詞彙表裡這些值都已經備妥。
可以事後依任何維度篩選統計。 不必等分類定案才能做報表。想看「所有 D2 是佛法 MAP 的課程」,或「D3 標為新人培訓的參與人數」,都是對標籤表做比對,不需要動任何欄位。
三個分析工具回答不同問題:
素材缺口分析——哪個主題缺料、哪些素材閒置、哪些站是空的、路線哪裡沒東西。
課程素材媒合——依標籤重疊度替每門課排出最相關的素材,並標出是否已在路線上。實跑「六度四攝」的結果,第二名是 25 號「戒律如柵欄」(12 分,不在路線上)——系統在告訴你這裡有現成的料,可能漏了。
標籤詞彙檢查——找出不在詞彙表內的標籤,防止「人物誌/人物志/人物」這類歧異。
課程組準備內容。 決定課程要經過哪幾個椿站、每一站給參學者看什麼網頁。網頁可以是 Google 表單、Google 協作平台、GitHub Pages、Cloudflare Pages 或任何公開網址。
課程上架。 有兩條路:課程組自己用「課程上架頁」從椿站主檔勾選路線、填入網址送出;或由管理者直接在試算表填寫。前者比較適合不熟悉試算表的老師。
上線前檢查。 執行「路線檢查」,系統會逐課列出缺網址、椿站不在主檔、椿站停用、缺景觀描述、相鄰兩站走不通、先修課程不存在、必修主題沒有課程等問題。全部顯示「正常」才把課程狀態改為上架。
印製 QR 立牌。 「產生椿站 QR Code」依椿站主檔產生 34 張 QR,含景觀描述與分區,可直接複製到簡報排版列印。
團體場次才需要註冊卡。 「產生註冊卡(批次)」會配發 N 筆註冊碼並排成每列三張的卡片,含手寫稱謂欄。一般場次讓參學者自行註冊即可,不必印。
參學者自行註冊。 一般情況下,參學者用手機開報名頁填寫稱謂,系統立刻配發一組註冊碼。只填一格,不必留 Email 或手機。
團體場次可改用註冊卡。 一批人同時報到時,逐一用手機註冊會拖慢動線。這時改用預先產生的註冊卡:註冊碼在製卡時就已寫入「參學者」表,卡上印好課程碼與完整路線,另留一欄手寫稱謂。參學者領卡就能直接上山,不必碰手機。
逐站闖關。 掃 QR → 輸入註冊碼與課程碼 → 系統驗證 → 顯示路線圓點與下一站 → 三秒後跳轉到任務網頁。註冊碼與課程碼會記在手機上,第二站起自動帶入,只需按確認。
完課確認。 最後一站的網頁底部有一顆「我已讀完,完成本課程」按鈕。按下後系統記錄「已讀完」、當場更新完課名單、跳出管理者自訂的完課提示語。
完課名單即時更新。 誰完成了哪門課、什麼時候完成、走了哪些椿站,自動寫進「完整闖關名單」,服務台可即時查對。
打卡紀錄與完課名單都留在試算表裡,可以直接做樞紐分析,或用 Looker Studio 接成儀表板。
參學者按下「確認送出」時,系統依序檢查:
任何一關失敗都會寫入紀錄並顯示原因。錯誤訊息一律附上景觀描述,例如「請先完成椿站 10(往生態區的步道)」,參學者看得懂該去哪裡。
「課程」表有一欄核取方塊。打勾時必須照路線順序,跳站會被擋下;不打勾時任意順序都可以,但仍要走完全部椿站才算完課。
欄位空白視為打勾——舊資料或漏填不會意外放寬規則。
不依序的課程,完課畫面不顯示「下一站」(沒有唯一答案),改為列出「還沒完成的椿站(順序不限)」。
這個設計對應到內容的性質,例如:六度四攝有敘事次第,跳著看會亂;生態觀察沒有先後,讓參學者按自己的節奏走反而自然。
QR 貼紙被雨打壞、步道封閉,這在戶外活動幾乎必然發生。
把椿站主檔的狀態改成「維修中」,該站就不再擋住依序闖關、經過它的課程仍可完課、掃到它的人會看到「請跳過本站續行」。
不用改路線、不用重印其他 QR、不用改程式。 一格搞定。
紀念品不是每場活動都有,所以完課文案做成可設定:
課程自訂(課程表最後一欄)→ 全域設定(選單設定,含紀念品開關)→ 系統預設
只有其中一場有結緣品,就只在那一列填。設定存在 Script Properties,改完立即生效,不必重新部署。
系統無從得知參學者何時看完網頁——跳轉之後就離開系統了。
所以最後一站的網頁底部放一顆按鈕,由他主動按下。按下後系統記錄「已讀完」、當場更新完課名單、跳出提示視窗。
這筆「已讀完」紀錄不影響闖關完成判定(只有「成功」才算打卡),所以無法用來跳過關卡。
後台會顯示「讀完課程內容 N 人次」,和「有效打卡」對照著看有意義:如果打卡 50 次但讀完只有 12 人,代表多數人走完關卡卻沒讀完內容,那是課程設計要調整的訊號。
參學者走完整條路線的當下,系統就把這筆完課寫進「完整闖關名單」:完課時間、註冊碼、稱謂、課程代碼、課程名稱、主題、走過哪些椿站。
完課時間取最後一站的打卡時間,不是結算時間,這樣才反映他實際何時走完。
判定條件是路線上每一站都有成功紀錄;標為維修中的椿站自動視為完成,不會卡住整條路線。重複結算不會產生重複列,所以觸發器每十分鐘跑一次也安全。
證書或紀念品的發放規則目前不由系統判定——這張名單提供的是事實,門檻怎麼定由主辦單位決定。
新增一門課要做的事:填一列課程、填幾列路線與網址。不需要改程式、不需要重印任何 QR。
課程代碼由主題字首加流水號自動產生(BP01、BP02…),流水號依主題各自計算,不會撞號。上架時系統自動配號,課程組不需要知道編碼規則。
「主題」表加一列即可。透過選單新增時,系統會同步更新三個地方:主題表、課程表的下拉選單、標籤詞彙表。
當初把「必修主題」從程式碼搬到試算表,就是為了這件事。
系統的每一則錯誤都帶上景觀描述與課程名稱:
本課程需依序闖關,請先完成椿站 10(往生態區的步道)。
「普賢十願」需先完成:六度四攝
椿站 14(六度園林大事記)目前停用,請跳過本站續行。
參學者不需要理解系統邏輯,看到訊息就知道下一步。
課程代碼四碼無符號。 EC01 而不是 EC-0001——連字號在中文鍵盤要切換鍵盤層,戶外手濕、戴手套時那一下切換就是打錯的機會。格式可在設定中調整。
註冊碼與課程碼記在手機上。 第一站輸入後,之後每站自動帶入,戶外不必再打字。
註冊只填稱謂。 聯絡方式收在選填的摺疊區塊裡,多數人填一格就能送出。若要填手機,輸入框會切換成數字鍵盤,長輩不必在英數鍵盤上找數字。
自動跳轉保留手動連結。 LINE、IG 的內建瀏覽器會擋自動跳轉,畫面上永遠留一個「立即開啟」。
倒數三秒才跳轉。 讓參學者來得及看清楚下一站是哪裡。
版面針對手機設計。 三個寬度斷點,最窄到 320px 都能完整顯示。路線圓點在各種螢幕上都排成一行不換行,點擊區在手機上反而加大。
路線檢查逐課驗證七種問題,把「紙上看不出來、掃了才知道」的錯誤提前抓出來。34 張立牌印下去之後才發現路線走不通,成本就不一樣了。
活動結束後,試算表裡留下的不只是誰來過,還有三種可以直接拿來改課的訊號。
完課率。 後台顯示每門課的「人數/完課/掃描」三個數字。有打卡但沒完課的比例偏高,代表路線太長或某一站卡住了人。
讀完率對照打卡數。 打卡 50 次但按下「我已讀完」只有 12 人,代表多數人走完關卡卻沒看完內容——那是內容或動線要調整的訊號。
站間間隔。 「站間間隔分析」列出每門課每一段的中位數與樣本數,超過全課中位數 1.6 倍的區段標為「偏長」,低於一半標為「偏短」。
站間間隔要小心判讀:系統只有掃碼的時間戳,兩次掃碼之間包含「在前一站讀內容」加上「走到下一站」,兩段分不開。所以報表會自動標出跨區的區段,讓設計者對照地形再下判斷——某一段間隔特別長,可能是內容太多,也可能只是那段路比較遠。
中位數優先於平均,因為有人中途離開再回來,極端值會把平均拉歪;超過 45 分鐘的間隔直接視為中途離開,不列入統計。