Simon Willison Used Claude Code on His Phone to Add Wildlife Sightings to His Blog

Simon Willison built an iNaturalist integration for his blog using Claude Code on his phone.
Renowned developer Simon Willison used Claude Code's web version on his phone to build a wildlife Sightings feature for his personal blog. The feature extends his blog's existing Beats content aggregation system, deeply integrating over a decade of iNaturalist observation data with support for homepage display, date archives, and site-wide search. This case demonstrates how AI programming tools can break device constraints and lower the barrier for personal website development.
Background: A Tech Blogger's Nature Observation Journey
Simon Willison—renowned developer and creator of Datasette—recently picked up a Canon R6 Mark II camera and started taking lots of bird and wildlife photos. He's been sharing his best shots on iNaturalist, a nature observation platform, which sparked an idea: why not integrate these observation records into his own blog?
Simon Willison is one of the co-creators of the Django framework and later built Datasette—an open-source tool that instantly transforms SQLite databases into interactive APIs and data browsing interfaces. Datasette's design philosophy emphasizes data explorability and ease of publication, which aligns perfectly with his approach of integrating external platform data into his blog. Simon is also an active developer in the LLM (Large Language Model) tool ecosystem, having created the llm command-line tool and its plugin system that lets developers conveniently call various AI models from the terminal.
iNaturalist itself is a global citizen science platform jointly operated by the California Academy of Sciences and the National Geographic Society, with over 150 million observation records. After users upload wildlife photos, the platform provides species identification suggestions through computer vision models, which are then verified by community experts. Community-confirmed "Research Grade" observation data gets incorporated into the Global Biodiversity Information Facility (GBIF) for use by research institutions. The platform offers comprehensive API interfaces supporting queries by user, geographic location, species taxonomy, and more—this is precisely the technical foundation that enabled Simon to pull data into his blog.
So he used Claude Code's web version to complete the entire feature development directly on his phone.
Implementation: From Prototype to Production
Quick Prototype Validation
Simon had already completed a successful prototype validation (inat-sightings) the previous day (May 1st), proving the feasibility of pulling data from iNaturalist and displaying it on his blog. Based on this prototype, he decided to formally integrate it into his blog system.
Extending the Beats System
This feature wasn't built from scratch but rather as an extension of his previously developed Beats system. Beats is the mechanism Simon's blog uses to aggregate external content—a content syndication framework. The new "Sightings" became yet another content type within this system.
Content syndication is one of the core ideas of the early internet. RSS (Really Simple Syndication) and Atom protocols allow users to subscribe to and aggregate content from different sources. Simon's Beats system continues this tradition: it's essentially a content aggregation engine that pulls, stores, and displays activities scattered across Mastodon, GitHub, iNaturalist, and other platforms in a unified way on his personal blog. This architecture follows the POSSE (Publish on your Own Site, Syndicate Elsewhere) principle advocated by the IndieWeb movement—publish on your own site first, then syndicate to other platforms, or conversely, reclaim external content back to your personal site.
From his public GitHub PR #668, you can see the complete code changes and prompts, which itself serves as a valuable reference case for AI-assisted programming.
Deep Integration Rather Than Simple Embedding
Interestingly, these observation records aren't simply embedded as iframes or external links. They receive equal treatment alongside the blog's other content forms:
- Homepage display: Observation records appear in the content stream on the blog's homepage
- Date archives: Records can be browsed in date-based archive pages
- Site search: Observation records are included in the site-wide search index
This means when you search for "lemur" on Simon's blog, you'll see lemur photos he took in Madagascar in 2019—he retroactively imported over a decade of iNaturalist observation data.
Technical Highlight: Completing Development on a Phone with Claude Code
The most striking detail in this case: the entire feature was built on a phone using Claude Code for web.
Claude Code was originally released as a command-line tool (CLI) that runs in a terminal environment, capable of directly reading and writing the file system, executing commands, and operating Git repositories. The web version launched in 2025 brought this capability to the browser environment, allowing users to drive code generation, modification, and commits through conversation without local installation. It integrates deeply with GitHub and can directly create Pull Requests. This means developers on any device with a browser—including phones—can complete the entire workflow from code writing to submission review, breaking free from traditional development's dependence on desktop IDEs.
This demonstrates an important trend in current AI-assisted programming tools—development is no longer confined to traditional desktop IDE environments. Traditional software development heavily relies on large screens, keyboard shortcuts, and complex IDE features (code completion, debuggers, file tree navigation, etc.). The physical limitations of phone screens make directly writing code on mobile devices nearly impractical. But AI programming assistants have changed the interaction paradigm: developers no longer need to type code line by line but instead describe their intent in natural language, with AI generating complete code changes. This shifts the bottleneck of programming from "typing and navigation" to "thinking and expression"—and the latter doesn't depend on a large screen.
For developers like Simon who are intimately familiar with their own codebase, AI programming assistants enable meaningful feature development even on mobile devices. The key lies in the developer's understanding of system architecture and clear expression of requirements—cognitive work that isn't constrained by device form factor.
From the screenshots, the final Sightings page design is clean and functional: it supports search and filtering, each record includes timestamp, species name, and photo thumbnail, and it provides RSS subscription functionality. 208 records are displayed across 7 pages, covering species ranging from woodpeckers and ospreys to western fence lizards.
The Bigger Picture: Personal Website Renaissance in the AI Era
This small project reflects several noteworthy trends:
AI is reducing the maintenance cost of personal websites. In the past, integrating external platform data into a personal blog required considerable development investment—understanding API documentation, writing data synchronization logic, designing data models, building frontend templates, handling pagination and search indexing. Now, with AI programming assistants like Claude Code, this can be accomplished in an afternoon or even less. AI handles the bulk of boilerplate code writing and technical details, letting developers focus solely on architectural decisions and product design.
Content aggregation is returning to personal control. In an era where social media platforms dominate content distribution, Simon's choice to re-aggregate his content scattered across various platforms back to his personal blog is a practice of the "own your data" philosophy. When platforms shut down, change policies, or restrict API access, content that exists only on those platforms may be permanently lost. Reclaiming data to infrastructure you control is an expression of digital sovereignty.
Real everyday use cases for AI-assisted programming. Compared to grand AI programming narratives—automatically generating complete applications, replacing software engineers—scenarios like "using Claude Code on a phone to add a feature to your blog" perhaps better represent the everyday value of AI programming tools. It's not about replacing developers but amplifying their capabilities, enabling them to advance projects during fragmented time on constrained devices.
Simon Willison has long been a deep user and observer of AI tools, and each of his small projects tends to reveal the true boundaries of tool capabilities. This Sightings feature may be modest in scope, but it clearly demonstrates Claude Code's usability in real projects—including in constrained environments like a phone.
Key Takeaways
- Simon Willison used the Claude Code web version on his phone to develop a wildlife Sightings feature for his blog
- The feature extends his blog's Beats content syndication system, with observation records deeply integrated alongside other blog content, supporting homepage display, date archives, and site-wide search
- He retroactively imported over a decade of iNaturalist observation data, achieving personal aggregation of cross-platform content
- The case demonstrates AI programming tools' usability on mobile devices and in real projects, lowering the barrier for personal website feature development
Related articles
Product ReviewsThe Programmer's Desk Setup Guide: Building a Workspace That Feels Like Home
Discover how programmers build productive, comfortable workspaces. From multi-monitor setups to ergonomic design, explore the desk philosophy that drives focus and flow.
Product ReviewsQoder vs Cursor Real-World Comparison: Which $20/Month AI IDE Is Better?
Hands-on comparison of Qoder vs Cursor AI IDEs: Agent autonomy, human interaction count, and architecture decisions. Qoder needed only 2 interactions vs Cursor's 8.
Product ReviewsCursor Cloud Agent Demo: Eliminating Bottlenecks Across the Entire Software Development Lifecycle
Deep analysis of Cursor's Cloud Agent demo showing how cloud VMs, automated test artifacts, and a full-chain control plane systematically eliminate human bottlenecks across the software development lifecycle.