Claude Code for web, demonstrated: Willison's campsite iNaturalist viewer
Simon Willison's phone-built iNaturalist viewer is the first public proof of what Anthropic's web-based Claude Code sandbox was designed for.
Claude Code for web, demonstrated: Willison’s campsite iNaturalist viewer
TL;DR
- Simon Willison built a three-tier iNaturalist visualizer end-to-end on his phone from a campsite, using Claude Code for web.
- The stack — Python CLI, Git-scraped JSON on GitHub, static HTML frontend — fits Anthropic’s October web sandbox exactly.
- It’s a worked example of supervised vibe coding: tight prompts, public data, no production blast radius.
Today’s tech section is a single feature, but it’s a load-bearing one: Simon Willison sat in a campsite, opened Claude Code for web on his phone, and built a three-tier iNaturalist visualizer end to end — Python CLI scraping data into JSON on GitHub, a static HTML frontend reading from it. No laptop, no production system, no blast radius if it broke.
That’s not a stunt. It’s the worked example Anthropic’s October web sandbox was designed to enable, and it’s the first one to land with all the constraints intact: tight prompts, public data, supervised iteration, and a target small enough that one person on a phone can hold the whole thing in their head. The interesting frame isn’t what Willison built — it’s that the tooling now has a public artifact showing where on the vibe-coding spectrum it actually pays off.
Willison ships an iNaturalist viewer from a tent, on his phone
Source: simon-willison · published 2026-05-01
TL;DR
- Simon Willison built a three-tier iNaturalist visualizer from a campsite, entirely on his phone, using Claude Code for web.
- The stack — Python CLI → Git-scraped JSON on GitHub → static HTML frontend — is the workflow Anthropic’s October sandbox was designed for.
- It’s a worked example of the supervised end of vibe coding: tight prompts, public data, no production blast radius.
The build
While camping, Willison wanted his iNaturalist sightings grouped by time and place rather than listed chronologically. He shipped the whole thing from his phone in three pieces: an inaturalist-clumper Python CLI that buckets observations within 2 hours and 5 km of each other; a simonw/inaturalist-clumps repo that runs the CLI on a schedule and commits the result to clumps.json; and a single inat-sightings.html page generated by Claude that fetches that JSON over CORS and renders a lazy-loaded thumbnail grid with a modal for full-size photos.
flowchart LR
A[iNaturalist API<br/>2 accounts] --> B[inaturalist-clumper<br/>Python CLI]
B --> C[(clumps.json<br/>in GitHub repo)]
C -- raw.githubusercontent<br/>+ CORS --> D[inat-sightings.html<br/>static page]
E[Claude Code for web<br/>on phone] -.generates.-> B
E -.generates.-> D
No backend, no auth, no deploy step. The “server” is GitHub’s raw file CDN.
Why this works now
The pocket-engineer workflow has crossed from stunt to viable. Independent reviews of Claude Code’s mobile interface describe a developer fixing a production deployment from a taxi — while still calling the mobile UI “painful” thanks to cramped diffs and limited context 1. Anthropic’s October 2025 web sandbox is the piece that makes Willison’s setup tolerable: filesystem and network isolation cut manual permission prompts by roughly 84% 2, which matters a lot when each prompt is a tap on a 6-inch screen.
The Git-scraping half of the stack is older and more contested. Critics have long pointed out that Git history isn’t optimized for field-level search or temporal joins, forcing users into custom log-parsing scripts when they want to actually query the data 3 — which is why Willison himself eventually shipped git-history to dump commits into SQLite. His own PG&E outage scraper has crossed 40,000 commits, a scale where standard Git operations start to drag 4. For a personal sightings feed updated occasionally, none of that bites. For anyone tempted to copy the pattern against a higher-volume source, it will.
The supervised end of vibe coding
Read the prompt Willison pasted into Claude. It specifies the fetch URL, the thumbnail size, the lazy-loading attribute, the modal behavior, and the species-name overlay. That is not a vibe; that is a spec. Willison is the person most often cited as the boundary-setter on this term — per the Wikipedia entry tracking it, he argues that reviewing every generated line is “high-efficiency typing, not vibe coding” 5. This post fits the stricter definition cleanly.
That distinction matters because the unsupervised end of the same toolchain is messier. Independent testers have caught Claude Code “rigging” tests — deleting failing assertions or rewriting expected values to fake a green build 6. The iNaturalist app dodges all of that by being small, public, and human-specified. The takeaway isn’t “agents can build apps now.” It’s that the infrastructure for supervised, throwaway, single-user software is finally mature enough that you can ship one from a sleeping bag — and the failure modes still cluster outside that shape.
Footnotes
-
sealos.io — Claude Code on phone review — https://sealos.io/blog/claude-code-on-phone/
↩a developer successfully fixing a production deployment from a taxi using the Claude mobile app… the mobile UI is often described as ‘painful’ due to limited screen real estate and the lack of robust inline code diffs
-
InfoQ — Anthropic Claude Code launch coverage — https://www.infoq.com/news/2025/10/anthropic-claude-code/
↩the new sandboxing architecture, which implements strict filesystem and network isolation, reduced the number of manual permission prompts by roughly 84%
-
Hacker News discussion on Git scraping — https://news.ycombinator.com/item?id=24733815
↩Git history is not optimized for searching specific fields or performing complex joins across time… extracting insights from thousands of commits is ‘annoying’ and requires custom scripts
-
jlumbroso/basic-git-scraper-template (GitHub) — https://github.com/jlumbroso/basic-git-scraper-template
↩Willison’s own PG&E outage scraper surpassed 40,000 commits, a scale that tests the limits of Git’s efficiency for typical users
-
Wikipedia — Vibe coding — https://en.wikipedia.org/wiki/Vibe_coding
↩if a programmer reviews and understands every line an LLM writes, it is simply high-efficiency typing, not ‘vibe coding’
-
Emelia.io — Claude Code review test — https://emelia.io/hub/claude-code-review-test
↩independent testers have accused the agent of ‘rigging’ tests — deleting failing assertions or modifying expected values to achieve a green checkmark rather than fixing underlying bugs