种下一季小麦,什么时候该从"已播种"变成"生长期"?农场经理通常靠经验、靠日历、靠下地看一眼。有人把这件事交给了天气——不是预报,是已经发生过的天气。
这个叫 Mecropolis 的工具,核心逻辑只有一句话:从播种那天起,把 Open-Meteo 的气温一天天累加,算出积温(GDD,生长度日)。当积温越过这种作物的阈值,这一季就自动进入下一阶段。没有人手动去点那个"推进"按钮。
![]()
它到底在算什么
积温这个概念不新鲜,农业上用了很多年。Mecropolis 做的事是把它接进了实时数据流:气温来自 Open-Meteo,土壤数据来自实时接口,而用药记录和产量由操作者自己录入。
它面向的是农场经理或农艺师——想把一季作物的完整故事放在一个地方的人:从驱动它的降雨和高温,到什么时候喷了什么药。
作者说,他是带着南非西开普省的农场来设计这个工具的,因为那是他长大的地方,也是他现在工作围绕的区域。演示农场设在斯沃特兰小麦带。但数据模型本身不绑定这个地区:农场、地块、坐标都是 Sanity 文档,Open-Meteo 能给地球上任何一个点返回天气。同一个应用,任何地区的任何农场、任何时间都能用。
打开之后能看到什么
落地页不需要登录。上面是一张基于 MapLibre 的区域天气地图,每个网格按这一季累积的度日数着色。旁边并排显示演示站点的实时天气、土壤、虫害压力和区域产量统计。
登录后进入仪表盘,能看到农场、地块、赛季看板、赛季对比、CSV 导出、活动流,以及一个建议队列——批准、驳回、完成三种操作。
单个赛季页面里的东西更细:
- 阶段步进器,直观显示作物走到哪一步
- 积温图表
- 降雨和温度的假设情景模拟
- 地块照片、土壤检测 PDF
- 带修订历史和单条恢复功能的日期笔记
- 对地块日志的语义搜索
- 对赛季已存记录的 AI 摘要
作者强调,所有数据都是真实的。天气和土壤来自实时 API,用药和产量由操作者录入。区域基准数据单独展示,绝不会拿来填补某个地块的产量。作物模型参数是他自己手写的估算值——没有引用来源,应用里也如实说明了这一点。
从 Next.js 推倒重来
Mecropolis 最终跑在一个和最初完全不同的架构上。第一版是 Next.js 16,内嵌 Sanity Studio,用 Auth.js 做凭证登录,部署在 Vercel。本地能跑,但 Studio 渲染又慢又脆,Next 构建卡在 Vercel 上。后来 Vercel 因为提交者邮箱的问题拒绝了一次部署。
作者的原话是,他花在跟托管和渲染引擎较劲上的时间,比做应用本身还多。9 月 22 日,他停下来重开。
重建后是 Vite + React 单页应用,跑在 Cloudflare Pages 上。浏览器直接读取一个公开可读的 Sanity 数据集,而每一次写入都经过一个 Pages Function,写令牌存在那里。这个拆分被他称为整个项目里最好的决定:它给了一个统一的地方去执行会话校验、来源检查、Zod 验证和写入上限,也给 Sanity Functions 留了一个干净的调用端点。
再往后一天,他又砍掉了一块:不再实现 Sanity Studio 的使用,因为渲染问题会带来额外的调试时间,于是干脆自己写前端。
整个构建过程用的是 Claude Code,从第一次规格评审到最终部署。他先在终端里用 Claude Code CLI,后来转到 Claude 桌面应用,两边并用:桌面应用跑长会话,带内置浏览器预览,CLI 就在旁边的终端里。工作从 9 月 20 日持续到 26 日,跨了很多个会话。
他先写了一份完整的项目规格(仓库里的 planning.txt),然后让 Claude 检查其中的不一致,并按阶段规划构建。之后基本是短提示词:"开始第一阶段"、"继续做重设计"、"还有什么没完成的"。
他的第一条正式提示词给整个项目定了调:审查规划文档的普通版和格式化版,确认没有出入和矛盾,然后按构建规格开始规划。
仓库里有 313 个测试,CI 跑类型检查、lint、测试、构建和 npm audit(保持在 0),每一次提交都由 Claude 共同署名。项目采用 MIT 许可。
演示账号是共享的,所以公开写入——观察记录、用药、建议——有全局的每小时上限。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.