页面后方为轻量色晕,正文不依赖这段动画。

跳到正文

web

o0oi1i.io

2026年8月31日Next.js · Supastarter · Content Collections · Vercel
showcasenextjs

问题

o0oi1i.io 要同时做两件事:它是全栈产品开发者的作品集,也是这件作品的第一件成品。访客应看到精选作品、笔记,以及之后真实的习惯和任务数据,而不是还在讲 workspace 和退款的 SaaS 模板首页。

中英必须能独立成篇。英文由 AI 出草稿,人确认之前不能上线。不能假定一种语言可以随便顶替另一种。

过程

先冻结产品基线:第一发布是展示站加 owner 公开数据;注册和付费放第二发布。视觉参考 Academind 的距离——深色底、紫色强调、玻璃卡片——标题用自托管 Rubik,正文用 Nunito。

实施顺着访客路径:token 和字体、Logo、主题、默认 lite 的动效、首页顺序,然后独立的 /work、/data、/pricing。Changelog 和法律页按本站重写。正式社交只有 GitHub、X、YouTube。

内容放在 Content Collections。博客和作品共用 slug/locale 文件约定,以及 draft | review | published。公开列表、详情和 sitemap 只收 published。某一语言还是草稿时,不借用另一语言已经上线的译文。

方案

  • o0oi1i.io 是展示站;app.o0oi1i.io 将是登录后的产品。共享 package,不用 Headless CMS。
  • MDX 可以嵌代码、YouTube、音频、玻璃卡片和注册过的 React 演示。
  • 静图放在 public/images/,走 next/image 并按栏宽设置 sizes。视频、音频和其他大文件只保存 URL。
  • 动效默认轻量色洗。完整 WebGL 需显式打开。prefers-reduced-motion 或画布失败时页面仍可完整阅读。

这篇案例就是把这套管线用在自己身上:中英都是独立文件,各自确认后再 published。

结果

展示站已有一级页面、双语法律文案,以及可以拒绝发布某一语言的内容 schema。这是第一篇真实作品。中文在 /zh/work,英文在 /work。

还没做的:接入 owner 公开数据、换掉剩下的模板博客、开放注册。

复盘

最大的风险是把 starter 的口气当成产品声音。模板博客不要写进叙事。不要因为英文好了就发布中文,反过来也不行。