生活分享
實戰:製作小網站
從 brief.md 規劃並製作 Small Steps 待辦網站,完成新增、完成、刪除、篩選與本機資料保存。將 HTML、CSS、資料函式、畫面事件與測試分開,以 Node 測試和瀏覽器操作驗收,並留下可重新啟動與還原的交接紀錄。
閱讀時間約 20 分鐘 · 操作 60 分鐘

進階 · Desktop / CLI / VS Code / JetBrains
本篇目錄
返回 Codex 教學總目錄Codex 學習中心:完整教學目錄從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。閱讀全文
目標與起點
本段提到的教學與資源: Codex 入門Codex 是什麼?與 ChatGPT 的差別Codex 是能讀取專案、修改檔案並執行工具的程式開發代理。一般聊天給你的程式碼,往往還要自己貼進編輯器;代理則可以在你選定的工作環境裡完成修改。模型是它用來推理的引擎,任務是一次工作,專案是相關檔案與工作的集合,三者不要混為一談。閱讀全文
步驟 1:準備空白工作區及參考版本
下載 Small Steps 材料,解壓縮後將 expected 保留在另一個參考資料夾。這篇在自己新建的 website-lab 從 brief.md 開始,不把 start 或 broken 混入;它們是其他課程的受控練習。expected 有五個程式檔,可在卡住時比較完整參考成果。先在工作區終端機確認 node --version,Windows 用 py -3 --version、macOS/Linux 用 python3 --version。若找不到命令,先完成對應安裝及路徑設定終端機與路徑:找到專案根目錄在 Windows、macOS、Linux 建立練習資料夾,確認目前目錄並辨識相對與絕對路徑。閱讀全文。
Windows、macOS、Linux 都以同一份 HTML/CSS/JavaScript 實作;Codex 桌面、CLI 或 IDE 可開啟 website-lab。桌面選這個資料夾,CLI 先 cd 進去再輸入 codex,IDE 開資料夾後確認帶入的專案。手機可追蹤電腦任務,但檔案與預覽仍在執行主機上;手機的 127.0.0.1 不是你的電腦。不要為了手機展示而把練習伺服器公開到網路,響應式檢查先在電腦完成。
步驟 2:寫下成果與完成條件
將以下內容保存為 brief.md。英文介面文字與共用參考一致,五語教學都用同樣按鈕名稱方便核對。新增後能看見資料就是讀取,勾選完成就是更新,因此本例已有 CRUD 的四種動作,不額外加入登入、同步或多人協作。重要的不只是外觀好看,還要說明資料壞掉、空白輸入與鍵盤操作會怎樣。
# Small Steps website brief
Build a local todo website using HTML, CSS and JavaScript only.
## Files
- index.html: accessible page and form
- style.css: responsive layout
- core.mjs: immutable data functions
- app.js: DOM events and localStorage
- core.test.mjs: Node built-in tests
## Data contract
- Task: {id: string, title: string, completed: boolean}
- Trim titles; accept 1 to 100 non-blank characters. IDs must be unique.
- Export addTask(tasks, title, id), toggleTask(tasks, id), removeTask(tasks, id),
visibleTasks(tasks, filter), decodeTasks(raw), encodeTasks(tasks).
- Filters: all, active, completed. Missing toggle/delete IDs leave data unchanged.
- Store {version: 1, tasks: [...]} under mokaair-codex-todo-v1.
- Invalid stored data must remain untouched; warn and allow temporary work.
## Interface and acceptance
- Labels: New task, Add task, Show, All tasks, Active, Completed, Delete.
- Show active and total counts, including when a filter is selected.
- Add, toggle, delete, filter and reload must work.
- Render task text as text, not HTML.
- Visible keyboard focus; preserve sensible focus after list updates.
- Fit 360px, 390px and 1280px viewports without page overflow.
- Include an About this exercise disclosure with a Reset practice data button.
- Reset practice data removes only this app's storage key.
- No dependencies, account, backend, analytics or external requests.
## Delivery
Explain changes, run node --test core.test.mjs, and list actual browser checks.
Do not claim checks that were not run. Do not publish or deploy.
步驟 3:先檢查設計,再分段實作
先用 Plan 模式Plan 模式:先規劃再實作Plan 模式適合還需要決定範圍或做法的工作。它幫你把需求整理成可實作的計畫,但計畫本身不是已完成的程式。使用時先定義要討論的問題,再檢查計畫是否包含輸入、輸出、限制與驗證。閱讀全文請 Codex 閱讀 brief.md,列出五個檔案各自負責什麼、資料如何流動、需要哪些驗收。確認 core.mjs 不直接存取 DOM,app.js 才處理按鈕與儲存,沒有引進框架或額外服務。若計畫缺少資料損壞或還原,直接補進計畫;確認後再切換實作。分成資料與測試、畫面與互動兩段,每段都要求列出實際修改及未驗證事項。
Implement core.mjs and core.test.mjs from the approved brief.md contract.
Keep all data operations immutable. Test empty and long titles, Unicode,
duplicate IDs, filters, missing IDs, storage round trips and invalid storage.
Run node --test core.test.mjs and report the command, result and remaining work.
Do not change the brief, publish anything or build the UI in this stage.
Implement index.html, style.css and app.js using the tested core.mjs.
Follow the UI, storage, accessibility and responsive criteria in brief.md.
Do not weaken the data tests to accommodate UI bugs.
Run the data tests again. Give local preview instructions and list which
browser interactions you actually verified and which still need verification.
每段完成後自己開啟檔案並執行測試。參考版本的 core.test.mjs 有三個頂層測試,裡面含多個驗收斷言;Codex 自己寫的測試數量可能不同,不能只比較數字。若功能與測試一起寫錯,綠色仍會漏掉需求,因此使用下一步的獨立畫面清單。卡住時只比較 expected 裡對應檔案,先找差異原因,不整包覆蓋自己尚未保存的工作。需要撤回先讀 Git 與還原Git、分支、diff 與還原Git 保存檔案版本,分支承接一組修改,diff 顯示差異。Codex 可以協助操作,但你仍要確認修改屬於這次任務。聊天紀錄與 Git 歷史不同,恢復舊對話不會自動還原檔案。閱讀全文。
步驟 4:啟動同一資料夾的預覽
node --test core.test.mjs
py -3 -m http.server 4173 --bind 127.0.0.1
node --test core.test.mjs
python3 -m http.server 4173 --bind 127.0.0.1
瀏覽 http://127.0.0.1:4173,保留這個終端機運行;需要其他命令另開終端機。若 4173 已被使用,先確認是否自己的練習伺服器,不任意終止別人的工作;改用未占用連接埠時,網址與驗收紀錄一起改。雙擊 HTML 的 file 入口可能限制 ES module,不適合此材料。畫面不是預期版本時,先查服務啟動資料夾、網址及 Network 的 app.js 回應,不立刻請 Codex 重寫整個網站。
步驟 5:逐項驗收功能與畫面
先在 About this exercise 展開後,確認資料全是可丟棄的虛構項目,再用 Reset practice data 清除本例專用鍵。將 Show 選回 All tasks,確認 0 active / 0 total,再新增 Read 與 Build,完成 Read。All tasks 應有兩筆、Active 只有 Build、Completed 只有 Read,統計是 1 active / 2 total。重新整理後資料仍在;選回 All tasks 並刪除 Read,應剩 Build。以下表格接著測,別只拍一張首頁就判定完成。
| 案例 | 操作 | 預期結果 |
|---|---|---|
| 空白 | 輸入三個空格並新增 | 不新增,顯示可理解的錯誤 |
| Unicode | 新增 寫作 ✨ | 原文保留,重新整理不損壞 |
| 文字安全 | 新增 下方 HTML 測試字串 | 顯示文字,不產生圖片元素 |
| 鍵盤 | Tab、Enter、Space 操作 | 焦點可見,完成/刪除後仍可繼續 |
| 手機寬度 | 360px、390px,長標題 | 內容換行,頁面不橫向溢出 |
| 桌面寬度 | 1280px | 清單、統計與操作都可讀 |
響應式模式不是實體 iOS/Android 實測;附圖是已存在的 Windows/Edge 參考版,不是你這次生成結果的證明。
<img src=x>
步驟 6:資料損壞、修正與交付
進階驗收只在本機虛構練習頁操作:先保存需要的測試紀錄,開啟瀏覽器開發工具的 Storage/Application → Local Storage,選目前 127.0.0.1 與連接埠。找到 mokaair-codex-todo-v1,把值改成 bad-json,重新整理。應顯示資料無法讀取的警告;新增暫存項目後檢查儲存值仍是 bad-json,不能默默覆蓋它。完成後用 Reset practice data 只移除這一鍵,再新增一筆並重整,確認恢復正常保存。不要對其他網站資料執行清空全部。
交接前從清空的虛構資料開始,再走一次下方順序,將「預期」與「實際」分欄填寫。即使讀者使用參考版本,也要自行觀察自己的頁面。篩選時統計仍來自全部任務,這能抓到只看目前畫面筆數的錯誤;未能啟動預覽的項目留未驗證,不能把期望數字填成實測。
# Website handoff
Root / source version:
Node test command / exit status:
Browser / version / viewport / date:
| Step | Expected active / total | Observed |
| --- | --- | --- |
| Reset fictional practice data; select All tasks | 0 / 0 | |
| Add Read, then Build | 2 / 2 | |
| Complete Read | 1 / 2 | |
| Select Active; only Build visible | 1 / 2 | |
| Select Completed; only Read visible | 1 / 2 | |
| Select All tasks, delete Read | 1 / 1 | |
Input/storage recovery evidence:
Keyboard and narrow-layout evidence:
Actual changed files:
Unverified requirements:
How to restart / restore:
驗收失敗時回報確切輸入、操作、預期與實際值,請 Codex 只修對應層並重跑相關檢查,參考 Bug 流程修 Bug 的完整流程好的除錯从可重現的症狀開始,再用證據縮小原因,最後驗證修正。『網站壞了』不夠具體;提供哪個輸入、在哪個步驟、期待什麼、實際出現什麼,能讓 Codex 更快找到相關程式。閱讀全文。交付時保留 brief、五個檔案、Node 測試紀錄、桌面及窄版畫面、未實測平台與還原方法。伺服器用原終端機 Ctrl+C 停止。最後請 Codex 用交接格式上下文與工作交接長工作需要把決策與證據留下,不能只依靠對話長度。README 說明怎麼使用專案,設計文件記錄為何這樣做,交接文件整理目前做到哪裡;AGENTS.md 則放持續有效的工作規則,避免把所有進度塞成規則。閱讀全文說明如何重新啟動;若要改用框架、加入後端或正式上線,另開明確需求,不能把本機畫面可見視為已部署。
返回 Codex 教學總目錄Codex 學習中心:完整教學目錄從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。閱讀全文
閱讀完整文字說明
Brief to HTML / CSS to Browser checks


同主題延伸閱讀
生活分享
Codex 學習中心:完整教學目錄
從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。
生活分享
Worktree 與多任務隔離
Worktree 讓同一個 Git 程式庫有不同的工作目錄,各自承接不同分支。它適合讓兩項工作分開改檔,但資料庫、連接埠與外部服務仍可能共用,不能把檔案隔離當成所有資源隔離。
生活分享
用量與效率:減少重工
記錄任務條件、模型選項、時間與成果,找出能減少無效重試和過多上下文的調整。
生活分享
先讀懂一個既有專案
用唯讀流程找到啟動點、資料流與測試,產生有檔案依據的專案地圖。
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- Codex prompting · 查證日期:
- Codex browser · 查證日期: