我不是在建一个网站,我是在养一个系统

这次聊天最开始,其实只是一个很小的念头。

我原本只是想把 Gmail 通过 API 接到 LMN516 的管理后台里,这样看验证码方便一点。

结果 GPT 当时没有顺着“验证码中心”继续往下做,而是提醒了我一句:

既然已经能读邮件了,为什么不直接把它升级成一个完整的邮件中心?

它给我画了一个很简单的结构:

结构图
                    Gmail
                      │
                      │ OAuth 2.0
                      ▼
              ┌───────────────┐
              │   Gmail API   │
              └───────┬───────┘
                      │
        ┌─────────────┼─────────────┐
        │             │             │
        ▼             ▼             ▼
     收邮件          操作邮件        发邮件
   list / get      read/star      send/reply
        │             │             │
        └─────────────┼─────────────┘
                      ▼
               LMN516 Backend

当时我一下子就觉得,这个思路是对的。

因为最开始我脑子里其实有一个很固化的想法:Gmail 好像就是那个网页,或者那个 App。我要发邮件,就得去 Gmail;我要收邮件,也得去 Gmail。

我几乎没有认真想过:Gmail 其实只是一个服务,而网页和 App 只是它自己的官方界面。

后来我突然想到,那 Apple Mail、Outlook、Spark 这些又不是 Gmail,为什么它们一样能收 Gmail、发 Gmail?

GPT 又画了一张图:

结构图
Gmail 网页 / Gmail App
        │
        ▼
    Gmail 服务
        ▲
        │ API / OAuth
        │
Apple Mail
Outlook
Spark
第三方邮件 App
LMN516

我看到这里,那个原本很固化的理解就松开了。

原来不是“我必须进入 Gmail 才能使用 Gmail”,而是“只要 Gmail 把能力开放出来,我自己的系统也可以成为一个 Gmail 客户端”。

这时候我开始觉得,LMN516 完全可以有自己的邮件中心。

最开始只是:

Gmail → 找验证码 → LMN516

但很快就变成了:

结构图
              Gmail
                │
                ▼
         LMN516 邮件中心
          ↙     ↓     ↘
        阅读   搜索   发送
          ↘     ↓     ↙
               我

而且这个变化不是 GPT 在替我“升级需求”,而是我自己开始顺着这个结构继续往下想。

如果 Gmail 都可以这样,那我的域名呢?

聊到这里,我突然想到了 lmn516.com

我本来就有自己的域名邮箱地址,比如 hello@lmn516.com。现在它只是做转发:别人发到这个地址,邮件最后还是转到我的 Gmail。

但它并不是一个真正独立的邮箱。

我突然意识到:既然邮箱客户端可以自己做,那我是不是连自己的邮箱体系也可以慢慢做?

这里 GPT 帮我把“邮箱地址”和“邮箱服务”分开了。

我拥有的是:

@lmn516.com

这个命名空间是我的。

但“拥有域名”并不等于自动拥有一套邮件服务器。

现在其实更像:

结构图
lmn516.com       ← 我的
     │
hello@lmn516.com ← 地址由我定义
     │
     ▼
邮件转发服务
     │
     ▼
Gmail            ← 真正邮箱

如果以后要自己发信,也不一定非要自己从头搭一整套全球邮件投递系统。

可以借用已经成熟的 SMTP Relay。

GPT 当时用一个我很容易理解的比喻:

我的域名 = 我的车牌
LMN516 = 我的驾驶室
邮件正文 = 我的货物
SMTP Relay = 高速公路 + 物流网络

这一下我就明白了。

“拥有系统”不等于“每一层基础设施都必须自己造”。

这和我们现在的网站其实已经很像了:域名是我的,代码是我的,界面是我的,数据和业务逻辑越来越是我的,但 DNS、CDN、数据库托管、邮件投递这些底层设施完全可以继续租用成熟服务。

所以短期最合理的方案反而很清楚:

收 Gmail
→ Gmail API

发 @lmn516.com
→ SMTP / 邮件发送服务

邮件统一管理
→ LMN516 Mail

提醒
→ LMN516 PWA Push

这时候我又想到 PWA。

如果邮件中心和我们现在已经有的 PWA Push 接起来,那就不只是“网站里可以看邮件”了。

它可以变成:

结构图
新邮件到达
   ↓
LMN516 判断
   ↓
是不是重要邮件?
   │
   ├── 普通广告 → 不通知
   ├── 验证码 → 直接 Push 验证码
   ├── 工作邮件 → Push 提醒
   └── 垃圾邮件 → 忽略

这就比 Gmail 自己的“有新邮件”更接近我真正需要的东西。

我突然发现,我的网站其实一直是这样长出来的

聊邮件聊到这里,我又回头讲起了 LMN516 的演化史。

之前 GPT 有一次把我的历史理解错了,它以为我是从一个 HTML 页面开始,然后慢慢加越来越多页面。

其实不是。

最早我确实做过一个特别简单的 HTML 页面。

就是一个单页。

我当时甚至不知道怎么在这个页面以外再多开一个页面。

我只会把电脑里的 HTML 上传到服务器,然后做了一个小功能:页面上的时间会自动变化,还加了农历。

这个页面现在还在,而且居然一直正常运行。

但当时我很快就撞墙了。

结构图
阶段 0:单页 HTML
────────────────
电脑里一个 HTML
↓
上传服务器
↓
只有一个页面
↓
动态日期 + 农历
↓
不会继续扩展页面
↓
能力撞墙

所以后来我干脆说,算了,我能力不够,那就用 WordPress。

我当时还经历了一个理解过程:WordPress 不是只有“买它的服务”这一种方式,它本身也是开源系统,可以自己部署。

我们当时用的就是自己部署的开源 WordPress,没有给 WordPress 付钱。

这一步现在回头看也挺重要。

因为我第一次知道:

别人的系统,不一定只能作为服务去买,我也可以把开源版本拿回来自己运行。

后来就进入换主题阶段。

我换过很多皮肤,最后发现其实都差不多。

最后用了一个很简约的白色卡片式主题:一个文章,一个卡片,再点进去看文章。

当时我还觉得网站打开很快是个优点。

但现在回头看,那时候所谓的“动态”,也就是我发一篇文章,首页多一个卡片而已。

没有后台逻辑,没有碎碎念,没有小泡泡,也没有今天这些系统能力。

然后才慢慢迁移到 Next.js。

这应该算第一次很大的跨越。

一开始到了 Next.js,我其实还是在“模板思维”里面。

GPT 给我一个结构,我就在上面改。

很多时间都花在样式、布局、颜色、卡片这些东西上。有时候花了很多时间,也未必真的改得更好。

后来慢慢开始出现真正复杂的东西。

小泡泡、后台、个人登录、PWA、环境变量、Vercel 线上环境、数据库……

我现在回忆起来,凡是开始牵涉 .env、Vercel 环境变量、线上和本地不一致的时候,就会明显变难。

因为那时候已经不是单纯改页面了。

它开始变成:

本地
 ↓
.env
 ↓
Vercel Environment
 ↓
API
 ↓
数据库
 ↓
线上运行

从那时候开始,LMN516 才真正从“网页”慢慢进入“系统”。

Bongiba:第一次改变“怎么开发”

后来又出现了一次很有意思的变化。

最开始,我想到一个需求,就改一个;改完一个,再改下一个。

后来为了省事,尤其我有时候人在外面,只拿手机,我开始一次说很多需求,然后让 GPT 分成几个 Bongiba。

等我回到电脑,再通过命令行一个个上线。

它解决了一个很现实的问题:

我不需要坐在电脑前才能提出和推进需求。

但后来它也暴露了一个问题。

有一次我一次说了八个需求,里面有几个样式我不喜欢。

我想回滚的时候,发现很乱。

因为几个 Bongiba 是连着的,一个包里面可能既有我想要的,也有我不想要的。

我当时对命令行也不熟,最后甚至回不到我真正想要的那个界面。

这个失败后来反而变成下一次跨越的来源。

Skill:不是为了“多改一点”,而是为了让改动有边界

昨天晚上我突然想到,我们是不是应该有一个专门的 Skill,先把我说的一堆问题梳理、编号、编排。

最开始它只是想解决:

我说一堆问题
↓
帮我梳理
↓
编号
↓
编排

但它很快又演化了。

现在已经变成:

语音需求
   ↓
拆 Atomic Issues
   ↓
确认真正意图
   ↓
问题编号
   ↓
依赖关系
   ↓
Patch 编排
   ↓
风险排序
   ↓
执行
   ↓
验证
   ↓
Git commit
   ↓
部署
   ↓
可追踪 / 可回滚

我这才发现,我们真正解决的已经不是“怎么一次改更多东西”,而是:

怎么让很多改动同时发生时,仍然保持边界。

之前是:

一批改动 = 一个包

现在慢慢变成:

结构图
一批改动
│
├─ Issue A
├─ Issue B
├─ Issue C
│
├─ Patch 1 → A+B
├─ Patch 2 → C
│
└─ Git anchor

这也是为什么我现在越来越敢说“放开手去做”。

因为真正让我放心的不是 AI 能写多少代码,而是这个过程开始有结构、有追踪、有回滚。

我跟 AI 的关系也变了

这次聊到 AI 建站,我又想到另外一个区别。

现在有很多 AI 建站工具,你说一句需求,它就很快给你生成一个网站。

这个效率当然很高。

但我越来越觉得,我们现在做的事情和“AI 建站”还是不太一样。

AI 建站更像:

“我要一个个人网站”
        ↓
AI 理解需求
        ↓
生成页面
        ↓
完成

而 LMN516 更像:

我 ↔ AI
   ↓
真实使用
   ↓
发现摩擦
   ↓
产生新想法
   ↓
讨论
   ↓
改系统
   ↓
继续使用
   ↓
又出现新的可能
   ↺

所以我后来很喜欢 GPT 给我的一句总结:

AI 建站是在帮人“造一个网站”;我们现在更像是在一起“养一个系统”。

我觉得这句话很接近现在 LMN516 的状态。

因为很多需求根本不是一开始就存在的。

比如今天,最开始真的只是:

我想看 Gmail 验证码

然后一路长成:

验证码
↓
Gmail API
↓
邮件中心
↓
发邮件
↓
自己的域名邮箱
↓
SMTP
↓
统一邮件管理
↓
PWA 智能通知
↓
个人通信中心

如果一开始我只是对一个 AI 建站工具说“帮我做一个个人网站”,它不可能凭空替我生成这一整条路径。

因为这些需求不是预先设计出来的。

它们是在我真的使用这个系统、遇到摩擦、和 GPT 对话、再继续往前想的过程中长出来的。

外部系统开始进入 LMN516

聊到 Gmail 之后,我又想到以后还可以把 Apple 设备、Mac 的复制内容接进来。

比如剪贴板。

以前复制的内容只是短暂存在设备里。

但如果通过快捷指令或者 API 进入 LMN516:

iPhone / Mac
     ↓
复制内容
     ↓
快捷指令 / API
     ↓
LMN516
     ↓
自己的数据库

那它就从一个临时动作,变成真正属于我的数据。

这和 Gmail 看起来是两件完全不同的事,但底层其实很像:

结构图
外部来源
   ▲
   │
   │ API
   │
LMN516
   ▲
   │
   我

现在我越来越能看到,LMN516 以后可能不只是一个个人网站。

它正在慢慢变成一个个人控制中心。

结构图
           LMN516
              │
    ┌─────────┼─────────┐
    ▼         ▼         ▼
  Gmail     Apple      GitHub
    │       Devices      │
 Mail API   Copy API   Code
    │         │          │
    └─────────┼──────────┘
              ▼
        个人控制中心

我真正需要保留的,也许不是“灵感”,而是这种生长过程

这次聊天中间,我一度还在想是不是应该给 LMN516 加一个“灵感库”。

因为我很多想法只想到一半,会写在纸上,但后来可能找不到。

当时我们把它想成:

生活
 ↓
灵感
 ↓
灵感库
 ↓
讨论 / 推演
 ↓
Issue
 ↓
实现
 ↓
LMN516

但聊到最后,我又觉得这次已经不只是一个灵感了。

它更像一次完整的思考过程。

我原本只是想解决一个很小的问题,中间不断被新的结构刺激,然后又联想到自己过去怎么建站、为什么会从 WordPress 走到 Next.js、为什么会从 Bongiba 走到 Skill、为什么现在又开始想把 Gmail、Apple、GitHub 这些外部系统接进 LMN516。

我甚至发现,我过去那些“走弯路”的阶段也不是没意义。

如果没有最早那个单页 HTML,我可能不会知道一个网页最基础的东西是什么。

如果没有 WordPress,我不会那么早理解“开源系统可以自己部署”。

如果没有主题阶段,我可能不会那么明确地感觉到“只换皮肤没有什么意思”。

如果没有 Next.js 初期那些抓小放大的样式修改,我也不会那么明显地感觉到页面和系统是两回事。

如果没有 Bongiba 那次回滚混乱,我可能也不会突然想到,真正需要的是把问题拆开、编号、追踪、回滚。

所以现在回头看,LMN516 的根基不是某一次架构设计得有多完美。

而是它经历了一层一层真实的问题。

真实使用
 ↓
遇到问题
 ↓
产生想法
 ↓
和 AI 讨论
 ↓
形成结构
 ↓
做出来
 ↓
继续使用
 ↓
再遇到新的问题

它不是被一次性设计出来的。

它是长出来的。

而我现在越来越确定,我喜欢的也正是这个过程。

我不一定有很强的代码能力,但我会不停地想:

为什么不能这样?

如果已经能做到这一步,为什么不再往前一步?

这个能力能不能不只属于某个 App,而是回到我自己的系统?

有时候我只想到一半。

然后 GPT 会给我一个角度、一张图、一个结构。

我再看着它继续想。

现在的 LMN516,就是这样一点一点长到这里的。