majianhan.com:一条从空目录到上线的完整时间线 superpowers:brainstorming superpowers:writing-plans superpowers:executing-plans
我自己的个人主页,现在还开着(实测在线)。它证明的不是「AI 能写网页」,而是整条链路可复盘:spec → 任务清单 → 72 次提交 → 上线,第一次提交到上线全程约 20 小时,git 历史精确到分钟,每一步为什么这么做都能翻出来。这是这门课的旗舰样本。
git log —— 一晚上的提交时间线
21:44 init:create-astro + 部署骨架
21:48 首页与基础样式
21:49 写 README
22:02 修 WCAG AA 对比度(正文对比度不达标)
… 共 72 次提交,每次只干一件事
次日 接 Vercel git 集成,push 即上线 majianhan.com(现在还开着) ↗ 上线前的设计文档 + 任务清单(真实原件) superpowers:writing-plans huashu-design
majianhan.com 上线前我真写的那份 spec 和 plan。里面有明确的「非目标(本期不做什么)」、技术选型的理由表、反 AI slop 清单、以及一份能逐条勾的验收标准。证明「先想清楚再让 AI 动手」不是口号,是有具体形态的东西——学员看完就知道自己该写成什么样。
上线前 spec 节选(真实原件)
## 2. 非目标(本期不做)
- 完整个人主页内容(bio、作品集、博客)
- 国内 CDN 加速 / 备案 / SEO 元数据优化
- Dark mode 切换器
**反 AI slop 清单**(来自 huashu-design):
- 不用 linear-gradient(135deg,#667eea,#764ba2) 这种典型紫蓝渐变
- 不放虚假的 “AI generated” 光晕图
- 不用 emoji 装饰
- 不写 “Welcome to my website” 式的废话 上线之后会踩什么:一份真实的迁移死锁手册 superpowers:systematic-debugging codegraph
某桌面客户端产品的账号/域名迁移手册,每一条结论都带源码文件行号。它讲的是新手最想不到的坑:有些字符串一旦烧进客户端二进制,改了就让已经装机的用户集体变砖、还无法远程补救。这个案例证明「上线」不是终点,是另一类问题的起点——demo 阶段永远学不到。
迁移死锁手册节选(已脱敏)
## 绝对不能变的三样(存量命脉)
| 项 | 为什么不能改 |
|---|---|
| 网关域名 | 存量客户端所有后端(登录/鉴权/媒体生成)唯一入口,硬编码进二进制;指新域会被拒、回落老域,运行时无开关可救 |
| 更新源 OSS 桶名 | 自动更新唯一通道,硬编码;桶不可达=永久断更,而断更又断了推修复版的唯一路径——与上一条构成死锁 |
| 更新签名私钥 | 存量客户端只认这把私钥签的包;换新钥=存量全部拒装 |
铁律:这三样逐字节不变,只迁背后的 DNS / 服务器 / 账号归属。 上线后的自动化与门禁(两套真实 CI 配置) deployment-patterns
本站 xmcourse.com 的每日自动同步:定时抓取 → 提交 → 触发 Vercel 重新构建,还配了一整套 CSP/HSTS 安全响应头。另一套是后端服务的部署流水线:Postgres 测试门禁卡在部署前面,测试不过就不许上线——一条红的 main 绝不能到生产。证明「上线后让它自己稳稳活着」是能配置出来的。
deploy 门禁:红的 main 不许进生产
jobs:
# Test gate: a red `main` must not reach production. The deploy job
# explicitly `needs: test`, so a broken commit can be reverted before
# production ever sees it.
test:
runs-on: ubuntu-latest
services:
postgres: { image: postgres:16-alpine } # 真起一个库跑集成测试
deploy:
needs: test # ← 测试不过,这一步根本不会执行
runs-on: ubuntu-latest 14 篇真实调试战报:AI 走过的弯路 superpowers:systematic-debugging
我攒下来的一批调试记录,写的都是 AI 一开始判断错了、走了弯路、最后被真机测试推翻的完整过程——比如某功能其实没坏,真凶是采集不稳被误判成登录失效。证明这门课的调试部分不是纸上谈兵,讲的是真实卡壳时人怎么一步步把它救回来。
调试战报节选(已脱敏)
# 一次被真机推翻的误判(调试战报节选)
现象:某功能“私信发不出去”,第一判断是发送接口坏了。
真相:接口没坏(send=200 实测)。真凶是上一步的采集不稳,
加上页面水合瞬间的一次闪跳,被误判成“登录已失效”。
教训:AI(和人)都容易把“下游报错”当成“下游的锅”。
先把每一步的真实返回值打出来,再定位——而不是顺着第一直觉改。
这一版把“降级到备用流程”当解药也是红鲱鱼,绕了远路。 主线录屏:从空目录到一个网站上线的全程 superpowers:writing-plans superpowers:executing-plans test-media
整门课最核心的动态证据。全程录屏还原 majianhan.com 那条时间线:空目录起步,写 spec、拆任务、让 AI 写、跑起来、部署、拿到线上 URL,中间不剪掉卡壳的地方。学员看完能对「上线」到底要做哪些动作有完整心理预期。
真实终端录屏:从空目录到 majianhan.com 上线
调试实录:AI 第一次没搞定,人怎么介入 superpowers:systematic-debugging test-media
专门录「AI 卡住」那一段——不是顺风顺水的演示。从真实调试战报里复刻一个 AI 走弯路的场景,演示怎么先复现、再定位、把它一步步掰回正轨,而不是让 AI 反复瞎改。这是新手最缺、也最值钱的那部分手感。
课上现场演示 这个案例在一对一课上带你从头跑一遍,用到 superpowers:systematic-debugging / test-media。
验证特写:跑测试 + 看控制台 + 读 diff superpowers:test-driven-development test-media
把「没有验证的 vibe coding 只是速度幻觉」这句话录成看得见的动作:跑一遍测试、开浏览器截图核对、逐行读 diff、看控制台有没有报错。让学员明白「验证」不是抽象态度,是四个具体、能照着做的步骤。
真实终端录屏:跑测试 + 读 diff + 拉真站