
用 Claude Code 長出一套線上開課系統,第一件事不是金流
AgentCourse 是我在自己的電商系統上長出來的線上開課系統,為 12AI學院 建的。第一件做的事不是收錢,是把課程內容拆成三層。這篇也記錄我踩到的一個坑——改一個欄位名,四個地方同時安靜壞掉,而且全部回 200。
上一篇講我用 Claude Code 蓋了一套自己的電商系統。
這篇是同一套方法的第二段:在那個底座上長出一套線上開課系統,叫 AgentCourse。
12AI學院有十二個學院,每一個都要開課。我可以去買一套課程平台——很多人這樣做,而且合理。
我沒有。理由跟上一篇一樣:我實際在用的,就要是真的拿出來賣的那一套。 如果我自己的課跑在別人的平台上,我對「開一門線上課到底難在哪」就永遠是二手知識。
第一件事不是金流
大部分人加開課功能,第一個想到的是付錢跟權限。
那些當然要做,也已經做完了。但那不是我第一個動手的地方。
我第一個動手的是課程內容長什麼樣子。
因為線上課最大的問題不在賣不掉,在買了之後看不完。
完課率差,是症狀不是病
我一開始把目標寫成「提高完課率」。後來改掉了。
這個區分很重要,因為它會做出完全不同的東西——
目標寫成完課率,你會做出催促提醒:三天沒上課寄信給你,進度停在 40% 跳通知。
目標寫成學習體驗,你會做出互動。
完課率差是線上課的共同症狀。主因是呈現太無聊——幾乎就是自己看影片加老師講解,從第一章到第十章長得一模一樣。
治症狀跟治主因,是兩種產品。
所以先把課程內容拆開
我把課程內容拆成三層:
單元 —— 課程的基本獨立模組
↓ N 個組成
課程主題
↓ N 個組成
一門線上課單元是最小的那塊,而且它是獨立的。
獨立的意思是:它自己帶著「我要長什麼樣」。第一章的單元可以是一種排法,第二章可以是另一種,互不影響。
測試用的那門課現在有 38 個單元、12 個主題。
讓「多元」變成預設,而不是設定出來的
這裡有一個我覺得最值得講的設計。
一開始的做法很直覺:給每個單元一個「用哪套版型」的欄位,老師想改就改。
問題是——老師不會改。
他忙著錄影片、寫講義、回學生問題。版型那一欄他會一直留空。留空的結果是整門課又長得一模一樣,而那正是我要解的問題。
所以我做了四層繼承:
單元自己指定 → 沒指定就看主題 → 還沒有就看整門課 → 最後看這個單元的「角色」最後那一層是關鍵。每個單元都標了它在課裡扮演什麼角色——看案例、拆解、示範、作業、直播、純閱讀。
角色本身就決定了它該長什麼樣。
看案例的,重點是「帶著問題看」,所以問題要在影片前面,還要用底色框起來,不能被當成影片說明滑過去。
拆解表的,學員回頭找的是那張表不是那支影片,所以內文放在影片前面——讓他少捲一次。
作業卡的,整個包在一張卡裡,捲到這裡就知道「要動手了」。
直播的,時間跟連結放最上面,因為打開它只想確認「現在能不能進去」。
結果是:那門課的版型欄位,自訂數是 0。
一個都沒設定。但學員端實際畫出六種不同的樣子。
多元是預設值,不是老師額外做的功。
上架流程本身也是一支 Claude Code skill
這件事我覺得對 aicoding 的讀者最有用。
把一份講義變成一門能賣的課,中間有八個步驟:讀材料、切章節、出作業、定價、寫銷售頁文案、選模版配圖、內容與影片上架、上架前檢查。
我沒有做一個後台精靈來帶老師走這八步。我把它寫成一支 Claude Code skill,叫 AgentLaunch。
老師在自己的 Claude Code 裡說一句「幫我把這份講義做成課」,它就會讀他的 PDF、提出切法、等他點頭、再一步一步寫進他的商店。
為什麼是 skill 不是後台介面——因為這八步裡有一半的工作是判斷,不是填表。講義怎麼切、哪一段太長、銷售頁文案怎麼寫,這些沒有一個表單填得出來。
而且這支 skill 本身就是要賣的東西之一。我自己的課用它上架,老師買了也用同一支。又是同一個原則:用的跟賣的是同一份。
然後我踩了一個坑,而且它不會報錯
這幾天我把三層的英文名字統一了一次。中間有一個欄位從 section 改成 topic_title。
改完,跑了資料庫遷移,一切正常。
四個地方同時壞了,而且全部回 200。
- 老師從後台新增一個單元,章節欄位填了不會存
- 從單元庫取用的單元,也掉出章節
- 改章節名稱,底下的單元一列都沒跟著改
- 學員端那支 API 回的是舊名字,但它自己的備援邏輯讀的是新名字
四個地方,沒有一個報錯。送錯欄位名,系統回 200,回傳的資料看起來完全正常——只有那一欄是空的。
我是怎麼發現的?不是讀程式碼。是我在盤點進度的時候,順手把「文件上寫的用法」跟「程式碼實際讀的欄位」對了一遍,對不上。
然後我做了一件事:故意用舊名字送一次,看它會不會壞。
送舊名字 → 回 200,章節是空的
送新名字 → 回 200,章節正常兩個都回 200。差別只在資料庫裡那一格。
所以我學到的那條
回 200 才是最危險的那種壞。
會噴錯的東西,你當場就知道。安靜接受的東西,你要等到有人問「我明明填了,為什麼不見」才知道——而那個人通常是你的客戶。
改欄位名這件事,我以前以為是「改定義、跑遷移」兩步。
現在我知道是四步:改定義、跑遷移、把每一個會寫入的地方找出來、每一個都送舊名字測一次。
最後那一步才是真正的驗收。前面三步只是做完了,沒有驗過。
而且這個坑還有一層:我用來檢查「課程能不能上架」的那支檢查程式,剛好也是讀那個欄位分組的。
欄位漂掉,檢查本身也看不見。
守門的跟被守的壞在同一個地方,等於沒有守門。
這件事跟用 Claude Code 有什麼關係
有,而且是最直接的關係。
AI 改名字改得很快、很整齊——那次改名一次動了一百多個檔案,全部一致。
但「一致」跟「正確」不是同一件事。 它把它看得到的地方都改了,看不到的那幾個呼叫端沒改,而那些地方不會報錯。
所以跟 AI 一起做大規模修改,真正的工作不在改,在設計一個會失敗的測試。
你要問的不是「改好了嗎」,是「如果沒改好,我會怎麼知道」。
答不出來的時候,就表示你其實不知道它改好了沒有。
下一步
課程內容三層模組化做完了。接下來是講師工作台——老師要看得到自己學生的上課情形,但又不能看到別的老師的課。
後端做完了,介面還沒有。做完再寫。




