iNaturalist观察记录聚合展示:用手机在帐篷里搞定全链路开发

iNaturalist观察记录聚合展示:用手机在帐篷里搞定全链路开发
露营的时候别人在烤棉花糖,Simon Willison在用手机写代码——这大概就是程序员和大自然和解的方式。最近他分享了一个iNaturalist观察记录聚合展示项目,从Python CLI工具到自动化数据管道再到前端页面,全程在露营期间用手机完成。
为什么要做这个项目
Simon有两个iNaturalist账号,上面积累了大量的自然观察记录。他想把这些记录按时间和地点分组展示——比如某天下午在某个公园拍的所有动植物归到一起,形成一个完整的「观察日记」效果。
需求听起来简单,但有意思的是他选择在露营期间完成整个项目。别人露营是为了远离科技,他露营是为了证明科技已经无处可逃。用Claude Code for web在手机上撸代码,这是什么?赛博游牧民族的日常。
构建inaturalist-clumper:Python CLI聚类工具
项目的第一步是开发一个叫inaturalist-clumper的Python命令行工具,专门用来获取和聚类iNaturalist的观察记录。
聚类规则很直觉:2小时内且5公里范围内的观察记录自动归为一组。这个逻辑简直就是在用算法还原你那天下午的散步路线——你在湖边拍了只鸟,十分钟后在树丛里拍了朵花,半小时后在草地上拍了只虫子,它们自然属于同一次「出行」。
工具名叫「clumper」(聚块器),命名朴实无华,但功能精准得像个生态学家的GPS日记本。Python CLI工具永远是Simon的瑞士军刀第一把刀。
Git Scraping:把GitHub当免费数据管道
数据采集这块,Simon又祭出了他的招牌操作——Git Scraping。
他创建了一个simonw/inaturalist-clumps仓库,利用GitHub Actions定期运行上面那个CLI工具,把结果保存为clumps.json文件。这意味着:
- GitHub Actions充当免费的定时任务服务器
- GitHub仓库充当免费的数据库
- GitHub托管的JSON文件天然支持CORS,前端JavaScript可以直接fetch

这操作就像是发现酒店的免费早餐可以打包带走当午餐和晚餐一样——合规,但让人佩服其厚脸皮的创造力。微软看到这种用法大概在默默计算带宽成本。
Claude Code生成前端展示页面
最后一步是前端展示。Simon通过一段自然语言prompt让Claude Code生成了inat-sightings.html页面,功能包括:
- 从GitHub获取
clumps.json数据 - 使用lazy loading展示缩略图(不会一次性加载几百张图片把手机卡死)
- 点击缩略图在HTML modal中查看大图
- 每张图片标注物种的常见名称
这已经不是「让AI帮忙写代码」了,这是「口述需求文档然后AI交付成品」。一段prompt出来,lazy loading、modal大图预览、物种名称标注一应俱全。
整个项目从后端CLI到数据管道到前端展示,全链路一个人在帐篷里用手机搞定。这让那些需要三个团队开两周站会才能上线一个feature的公司情何以堪。
技术栈总结
| 环节 | 技术方案 |
|---|---|
| 数据获取与聚类 | Python CLI (inaturalist-clumper) |
| 自动化调度 | GitHub Actions (Git Scraping) |
| 数据存储与分发 | GitHub仓库 JSON文件 |
| 前端展示 | 纯HTML/JS,Claude Code生成 |
| 开发环境 | 手机 + Claude Code for web |
当你的露营装备清单里「手机」比「帐篷」更重要时,你就知道这个人不是在亲近自然,而是在用自然当素材喂养他的下一个开源项目。
相关推荐
教程攻略Cursor+Codex双IDE协同:开源项目二开实战方法论
基于实战经验总结的开源项目二次开发完整方法论,详解Cursor+Codex双IDE协同工作流,涵盖二开七环节、MVP验证、AI读源码技巧,帮助开发者三天跑通项目、两周完成业务集成。
教程攻略Cursor多Agent实战:50分钟搭建Next.js全栈博客
使用Cursor IDE多Agent协作模式,50分钟内从零搭建全栈博客。涵盖Next.js、Clerk认证、Supabase数据库集成,详解4个AI Agent分阶段开发流程与关键避坑经验。
教程攻略从零搭建AI软件工厂:Cursor工程师的多Agent协作实战经验
Cursor工程师Eric分享AI软件工厂构建实战:从自动化六层级、护栏设计、并行Agent管理到规模化扩展,详解如何用多Agent协作实现7×24小时高效软件开发。