生活分享
实战:制作小网站
从 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 年 9 月核实的东京都住宿税(2027 年 4 月改为 3%)和机场宅急便寄送行李的规则。
- 预算
- 酒店

攻略东京
东京交通票券怎么选:Suica/Welcome Suica、Tokyo Subway Ticket、JR Pass 值不值得买
第一次去东京,每人先用一张 IC 卡按次付费(Welcome Suica 免押金、有效期 28 天)。一天搭四趟以上地铁,再加买 2,000 日元的 Tokyo Subway Ticket 72 小时券;只玩东京、不去关西,买 JR Pass 一定不划算。用决策图比较 TOURIST PASMO、iPhone 里的 Suica、东京 Metro 一日券能搭什么、不能搭什么;价格于 2026 年 9 月核实。
- 交通
- 预算

攻略东京
东京迪士尼乐园、海洋攻略:票价、梦幻泉乡 Fantasy Springs、尊享卡 DPA 与预约等候卡怎么用,第一次去选哪个园区
东京迪士尼一日护照采用浮动票价,2026 年 9 月平日大多为 9,900 日元、周末为 10,900 日元,官网每天 14:00 开售两个月后同一天的门票;免费的优先通行卡已不在官网服务清单,缩短排队时间只剩付费的迪士尼尊享卡(每人每次 1,000 至 3,500 日元)。另有运营时间与 25 周年活动、预约等候卡与报名体验、梦幻泉乡如何进入,以及第一次去选乐园还是海洋;2026 年 9 月通过东京迪士尼度假区官网核实。
- 行程范例
- 亲子
资料来源
- Codex prompting · 查证日期:
- Codex browser · 查证日期: