A keynote投影片
Project 99 % AI Project 99 % AI
How this site got made, slide by slide. 這個網站是怎麼蓋起來的,一頁一頁說。
Scroll ↓往下捲 ↓
By the share of code按程式碼比例
99%
Of what you scrolled through was written by AI. The remaining 1 % is David — the questions, the decisions, the “不行”. 你滑過的內容,99 % 是 AI 寫的。剩下的 1 % 是 David——提問題、做決定、講「不行」。
The collaboration loop合作流程
Brief. Build. Review. Ship. 下指令。動手做。檢查。上線。
01 · David01 · David
Sends intent — a precise correction, a creative direction, or an explanation of why the current version doesn’t read right. Sometimes with a screenshot. 寫意圖 — 可能是精準修正、給個方向、或解釋為什麼現在這版不對。有時候會附截圖。
~30 sec約 30 秒
02 · AI02 · AI
Reads the brief, writes the code, pushes to dev. Dev preview auto-deploys. 讀懂、寫 code、push 到 dev。CF 自動部署到 dev preview。
~5 min約 5 分鐘
↓ ↓
03 · David reviews03 · David 檢查
Opens dev on his iPhone. One word back: yes / no / keep going. 在 iPhone 打開 dev 看。一個字回覆:可以 / 不行 / 繼續。
~1 min約 1 分鐘
04 · Ship04 · 上線
PR opens, auto-merges to master, GitHub Actions ships to production. 開 PR、自動合併到 master,GitHub Actions 推到正式版。
~2 min約 2 分鐘
Eight versions, one site八個大版本,一個網站
From v2 to v8 從 v2 到 v8
- v2.x Early days. Static photo manifest, Netlify Functions, manual classification. 早期。靜態照片 manifest、Netlify Functions、人工分類。
- v3.x Apple rewrite. Cloudflare Pages, iCloud proxy, hero parallax, blur-up lightbox, the AI-intro black screen. Apple 風格大改。Cloudflare Pages、iCloud 代理、hero parallax、blur-up lightbox、AI intro 黑屏開場。
- v4.x Polish wave. Section rail, cinema-mode lightbox, magnetic CTA hover, style essays. 大量 polish。section rail、lightbox cinema mode、磁吸 hover、風格散文。
- v5.x Bilingual. EN/ZH toggle, paired Chinese prose, de-AI-ified Chinese, /keynote + /journey + /prompts. 雙語化。中英切換、中文段落配對、中文去 AI 腔、新增 /keynote + /journey + /prompts。
- v6.x Curated by heart. iCloud likes per photo drive the featured reel and the front of the grid. 用愛心策展。iCloud 上點的愛心決定首頁 reel 跟相片格的第一排。
- v7.x More 5-minute units. /lookbook silent slideshow, /frames AI essay, /compose triptych, /quiet ambient room, /making chat-film. 更多 5 分鐘小單位。/lookbook 幻燈片、/frames AI 六幀小品、/compose 三幀組合、/quiet 靜室、/making 對話紀錄片。
- v8.x Wayfinding + self-healing photos. Next-chapter CTAs, accordion drawer with ≤5 groups, Portfolio split-header. Stale iCloud URLs auto-refresh client-side — cron is no longer load-bearing. 導引 + 自癒的照片。下一章 CTA、抽屜 ≤ 5 分組 accordion、Portfolio split-header。過期的 iCloud URL 在前端自動換新 — cron 不再是 load-bearing。
By the numbers數字側寫
A small site, a big shape 小站,大形狀
1
HTML fileHTML 檔案
~7k
Lines of code行程式碼
74+
PRs mergedPR 上線
0
npm packagesnpm 套件
2
Gallery blackouts survived照片變黑事件
~1.3k
Words bilingual essay字數雙語散文
The bug that taught us caches那個讓我們重學 cache 的 bug
3 hours vs 6 hours 3 小時 vs 6 小時
Half of every day, every photo was a 403. Tightened all four caches first; v8.6 then made the static JSON a fast-path cache and taught the client to refetch fresh URLs on expiry. Cron stopping no longer breaks the site. 每天有一半時間,每張照片回的都是 HTTP 403。先把四層 cache 都對齊;v8.6 再把靜態 JSON 降級成 fast-path cache,讓前端自己在過期時重抓。Cron 停了網站也不會壞。
Four modes of direction四種下指令的方式
Decide. Ask. Choose. Explain. 下決定。問。給選項。解釋。
The art tiles took three attempts藝術縮圖試了三次
From 「都還沒好」 to 「可以」 從 「都還沒好」 到 「可以」
- Fetch Instagram’s og:image. Cloudflare Function calls IG embed, parses og:image, proxies bytes.Result: IG blocks Cloudflare’s edge IPs. Dead. 抓 Instagram 的 og:image。Cloudflare Function 打 IG embed、解析 og:image、proxy 圖檔。結果:IG 把 Cloudflare 邊緣 IP 也擋了。死路。
- Pure typographic cards. No image at all — gold accent + serif title + IG link.Result: David: 「不行 就是要圖片」. 純文字卡片。完全不放圖、金線 + serif 標題 + IG 連結。結果:David 一句「不行 就是要圖片」。
- IG embed iframe, chrome clipped. Use IG’s own /embed iframe, hide the username + like-button with CSS overflow:hidden + negative offsets.Result: 「可以」. IG embed iframe,上下裁掉。用 IG 自己的 /embed iframe,CSS overflow:hidden 加負位移把帳號頭跟按讚列推出視窗外。結果:「可以」。
What makes this site weird (in a good way)這個網站不太一樣的地方
No build. No packages. Just files. 沒 build。沒套件。只有 檔案。
- ·01 One HTML file does the job of what most teams ship in 100+ files. 一個 HTML 檔案做完別人 100+ 個檔案才做完的事。
- ·02 Photos live in David’s iPhone (iCloud Shared Albums), not on a server. 照片放在 David 的 iPhone(iCloud Shared Albums),不在伺服器上。
- ·03 Cloudflare Pages is the CDN, the host, and the API proxy in one. Cloudflare Pages 同時是 CDN、host、API 代理。
- ·04 The author writes prompts, not code. The AI does the typing. 作者寫的是 prompt,不是 code。打字的是 AI。
- ·05 Every change goes to dev first; master is branch-protected. AI cannot push directly. 每個改動先進 dev;master 有 branch protection。AI 沒辦法直接 push 正式版。
Last slide最後一張
…
How long until 100 %? 距離 100 % 還有多久?
David still has to say 可以. Maybe forever. Maybe that’s the point. David 還是要說一句「可以」。也許永遠這樣。也許這就是重點。
— Project 99 % AI · 2026 — Project 99 % AI · 2026