生活分享

實戰:製作小網站

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

閱讀時間約 20 分鐘 · 操作 60 分鐘

實作順序示意圖,非產品介面截圖。
圖片:Mokaair (© Mokaair)
本篇目錄
  1. 目標與起點
  2. 步驟 1:準備空白工作區及參考版本
  3. 步驟 2:寫下成果與完成條件
  4. 步驟 3:先檢查設計,再分段實作
  5. 步驟 4:啟動同一資料夾的預覽
  6. 步驟 5:逐項驗收功能與畫面
  7. 步驟 6:資料損壞、修正與交付

目標與起點

本段提到的教學與資源:

步驟 1:準備空白工作區及參考版本

下載 Small Steps 材料,解壓縮後將 expected 保留在另一個參考資料夾。這篇在自己新建的 website-lab 從 brief.md 開始,不把 start 或 broken 混入;它們是其他課程的受控練習。expected 有五個程式檔,可在卡住時比較完整參考成果。先在工作區終端機確認 node --version,Windows 用 py -3 --version、macOS/Linux 用 python3 --version。若找不到命令,先完成對應安裝及。

Windows、macOS、Linux 都以同一份 HTML/CSS/JavaScript 實作;Codex 桌面、CLI 或 IDE 可開啟 website-lab。桌面選這個資料夾,CLI 先 cd 進去再輸入 codex,IDE 開資料夾後確認帶入的專案。手機可追蹤電腦任務,但檔案與預覽仍在執行主機上;手機的 127.0.0.1 不是你的電腦。不要為了手機展示而把練習伺服器公開到網路,響應式檢查先在電腦完成。

步驟 2:寫下成果與完成條件

將以下內容保存為 brief.md。英文介面文字與共用參考一致,五語教學都用同樣按鈕名稱方便核對。新增後能看見資料就是讀取,勾選完成就是更新,因此本例已有 CRUD 的四種動作,不額外加入登入、同步或多人協作。重要的不只是外觀好看,還要說明資料壞掉、空白輸入與鍵盤操作會怎樣。

website-lab/brief.md · markdown
# 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:先檢查設計,再分段實作

先用 請 Codex 閱讀 brief.md,列出五個檔案各自負責什麼、資料如何流動、需要哪些驗收。確認 core.mjs 不直接存取 DOM,app.js 才處理按鈕與儲存,沒有引進框架或額外服務。若計畫缺少資料損壞或還原,直接補進計畫;確認後再切換實作。分成資料與測試、畫面與互動兩段,每段都要求列出實際修改及未驗證事項。

第一段實作提示詞 · text
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.
第二段實作提示詞 · text
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 裡對應檔案,先找差異原因,不整包覆蓋自己尚未保存的工作。需要撤回先讀 。

步驟 4:啟動同一資料夾的預覽

Windows PowerShell · powershell
node --test core.test.mjs
py -3 -m http.server 4173 --bind 127.0.0.1
macOS/Linux · sh
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 參考版,不是你這次生成結果的證明。

文字安全測試:作為待辦名稱輸入 · text
<img src=x>

步驟 6:資料損壞、修正與交付

進階驗收只在本機虛構練習頁操作:先保存需要的測試紀錄,開啟瀏覽器開發工具的 Storage/Application → Local Storage,選目前 127.0.0.1 與連接埠。找到 mokaair-codex-todo-v1,把值改成 bad-json,重新整理。應顯示資料無法讀取的警告;新增暫存項目後檢查儲存值仍是 bad-json,不能默默覆蓋它。完成後用 Reset practice data 只移除這一鍵,再新增一筆並重整,確認恢復正常保存。不要對其他網站資料執行清空全部。

交接前從清空的虛構資料開始,再走一次下方順序,將「預期」與「實際」分欄填寫。即使讀者使用參考版本,也要自行觀察自己的頁面。篩選時統計仍來自全部任務,這能抓到只看目前畫面筆數的錯誤;未能啟動預覽的項目留未驗證,不能把期望數字填成實測。

website-lab/handoff.md:預期不是實測結果 · markdown
# 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 只修對應層並重跑相關檢查,參考 。交付時保留 brief、五個檔案、Node 測試紀錄、桌面及窄版畫面、未實測平台與還原方法。伺服器用原終端機 Ctrl+C 停止。最後請 Codex 用說明如何重新啟動;若要改用框架、加入後端或正式上線,另開明確需求,不能把本機畫面可見視為已部署。

31. 實戰:製作小網站 — 實作順序示意圖,非產品介面截圖。 Brief → HTML / CSS → Browser checks
31. 實戰:製作小網站 — 實作順序示意圖,非產品介面截圖。 Brief → HTML / CSS → Browser checks · 圖片:Mokaair (© Mokaair)
閱讀完整文字說明

Brief to HTML / CSS to Browser checks

待辦練習網站:Build 已完成,Read the AGENTS.md rules 尚未完成,共兩項任務。
完整參考版的實際瀏覽器畫面,供修改前比對。Windows / Edge 153.0.4234.32,2026-09-14;使用虛構資料。390px 為響應式視窗,非實體手機。這不是 Codex 桌面介面截圖。 · 圖片:Mokaair (© Mokaair)
待辦練習網站:Build 已完成,Read the AGENTS.md rules 尚未完成,共兩項任務。
完整參考版的實際瀏覽器畫面,供修改前比對。Windows / Edge 153.0.4234.32,2026-09-14;使用虛構資料。1280px 為響應式視窗,非實體手機。這不是 Codex 桌面介面截圖。 · 圖片:Mokaair (© Mokaair)

回總目錄

  • 生活分享

    Codex 學習中心:完整教學目錄

    從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。

  • 生活分享

    Worktree 與多任務隔離

    Worktree 讓同一個 Git 程式庫有不同的工作目錄,各自承接不同分支。它適合讓兩項工作分開改檔,但資料庫、連接埠與外部服務仍可能共用,不能把檔案隔離當成所有資源隔離。

  • 生活分享

    用量與效率:減少重工

    記錄任務條件、模型選項、時間與成果,找出能減少無效重試和過多上下文的調整。

  • 生活分享

    先讀懂一個既有專案

    用唯讀流程找到啟動點、資料流與測試,產生有檔案依據的專案地圖。

最新旅遊情報攻略

資料來源

生活分享