Simon Willison Uses Claude Code on His Phone to Add Wildlife Sighting Features to His Blog

Simon Willison used Claude Code on his phone to build iNaturalist wildlife sighting sync for his blog.
Prominent developer Simon Willison used the web version of Claude Code on his phone to build a wildlife Sightings feature for his personal blog, syncing nature photography from iNaturalist. Built as an extension of his existing Beats content aggregation system, the feature supports search, RSS feeds, and backfilling of ten years of historical data. The project demonstrates pragmatic AI-assisted programming for well-scoped personal projects and the resurgence of personal websites as digital identity hubs.
A New Twist on Developer Blogs: AI-Assisted Nature Observation System
Prominent developer Simon Willison recently shared an interesting project: using the web version of Claude Code directly on his phone, he built a wildlife Sightings feature for his blog that syncs his nature photography from iNaturalist to his personal website.
Simon Willison is a highly influential figure in the Python/Web development community. He's one of the co-creators of the Django web framework — Django was born in 2003, originally as an internal tool for the Lawrence Journal-World newspaper in Kansas, before being open-sourced in 2005. It has since become one of the most popular web frameworks in the Python ecosystem, with companies like Instagram, Pinterest, and Mozilla having used Django to build core services. Simon later created Datasette, an open-source tool for exploring and publishing data that can instantly transform SQLite database files into interactive web interfaces and APIs, widely adopted in data journalism and open data communities. In recent years, Simon has become one of the most active independent tech commentators in the AI tools space, with his blog documenting and analyzing the latest LLM tool developments almost daily.
Behind this seemingly simple feature lies a demonstration of how AI-assisted programming works in practice for personal projects, along with the engineering approach to content syndication.
Project Background: A New Camera Sparks a New Feature
Simon recently picked up a Canon R6 Mark II camera and began extensively photographing birds and wildlife. He shares his best shots on iNaturalist — a global community platform for nature observations.
iNaturalist is a citizen science platform jointly operated by the California Academy of Sciences and the National Geographic Society, with over 2 million registered users. Users can upload photos of wild plants and animals, and community members along with AI algorithms help with species identification. The platform's data is widely used in ecological research, with observation records feeding into the Global Biodiversity Information Facility (GBIF) to provide scientists with valuable species distribution data. More importantly, iNaturalist offers a comprehensive API that allows developers to programmatically access observation records, photos, and taxonomic information — the technical foundation that made Simon's data sync possible.
After completing a successful proof of concept on May 1st, he decided to formally integrate these observation records into his blog system. The final result is a complete Sightings page supporting search, RSS feeds, pagination, and more, with 208 observation records currently indexed.
Technical Implementation: Full AI Programming Workflow on a Phone
Content Aggregation Architecture Based on the Beats System
Simon didn't build this feature from scratch. His blog already had a content aggregation system called "Beats," designed specifically for syncing content from external platforms to his blog. The Sightings feature was implemented as an extension of this system.
The Beats system's design philosophy stems from the "aggregation" pattern in content management. In traditional CMS setups, different content types (articles, links, quotes, photos, etc.) typically require their own independent data models and display logic. The Beats system provides a unified framework that allows content from different external platforms to be integrated into the blog in a standardized way. Each "Beat" is essentially a data sync pipeline responsible for pulling data from a specific external source, transforming the format, and storing it in the blog database. This plugin-based architecture means adding a new content source (like iNaturalist) only requires implementing specific data adaptation logic, while display layers, search indexing, RSS generation, and other common functionality are handled uniformly by the framework.
The benefit of this architectural design is that new observation records automatically appear on the blog homepage, date archive pages, and site search results, seamlessly blending with the blog's other content types.
Hands-on Development Experience with Claude Code Web
What's particularly noteworthy is the development process itself: Simon used the web version of Claude Code and completed all development work on his phone. The specific code changes and prompts used can be seen in his public GitHub PR #668.
Claude Code is Anthropic's AI programming tool for developers, initially released as a command-line terminal tool capable of directly reading project codebases, executing terminal commands, editing files, and running tests. The web version brings this capability to the browser, allowing developers to write code and manage projects without a local development environment. This aligns with the philosophy of cloud development environments like GitHub Codespaces and Gitpod, but adds conversational AI programming capabilities. Simon completing development on his phone via the web version means he interacted with Claude Code through a browser, with the AI directly modifying code, creating files, and submitting PRs in a remote environment — the entire process requiring no local IDE or terminal.
This is an excellent example of AI-assisted programming — not building complex enterprise applications, but quickly implementing a personal feature with clear requirements. The mobile development experience also demonstrates that AI programming tools are lowering the hardware barriers to development, making "code anywhere, anytime" a reality.
Backfilling Over a Decade of Historical Data
Simon didn't just implement incremental sync — he also backfilled over ten years of iNaturalist historical data. This means users can search his blog for "lemur" and find photos of lemurs he shot in Madagascar in 2019.
This backfill strategy gives the new feature a rich content foundation immediately, rather than starting from a blank page and slowly accumulating content. From an engineering perspective, historical data backfilling is a common requirement in data pipeline construction — systems need to handle not only real-time incremental data but also bulk imports of historical records while ensuring data consistency and integrity. The iNaturalist API supports querying observation records by user and time range, providing convenient conditions for batch backfilling.
Deeper Implications: The Intersection of Personal Websites and AI Tools
The Revival of Personal Websites as Digital Identity Hubs
Simon's approach embodies a variant of the "POSSE" (Publish on your Own Site, Syndicate Elsewhere) philosophy — he publishes content across various platforms, then aggregates them back to his blog. In an era of frequent social media platform upheavals, personal websites as "home bases" for digital identity are gaining renewed attention from developers.
POSSE is one of the core principles of the IndieWeb movement. IndieWeb is a decentralized web advocacy community that began in 2011, whose core assertion is that individuals should own their online identity and content rather than hosting everything on third-party platforms. This philosophy has regained attention in recent years due to multiple events: the policy upheaval following Twitter's acquisition, the community protests sparked by Reddit's API restrictions, and the sudden shutdowns of several social platforms (such as Google+, Vine, etc.). The standard POSSE practice is to first publish content on your personal website, then distribute it to various social platforms through automation tools. Simon's approach is actually closer to "PESOS" (Publish Elsewhere, Syndicate to your Own Site) — publishing on platforms first, then aggregating content back to his personal site. Regardless of direction, the core goal is ensuring the personal website serves as the authoritative archive for all content. IndieWeb protocols like Webmention and Micropub provide technical standards for this cross-site content synchronization, while Simon's Beats system is a custom engineering implementation of this philosophy.
A Pragmatic Approach to AI Programming Tools
As one of the most active tech bloggers in the AI space, Simon's approach to using AI tools is worth noting: he didn't use AI to do anything earth-shattering, but rather to accelerate a specific development task with clear boundaries. This pragmatic attitude may better represent the current best use cases for AI tools than chasing "AGI."
From a software engineering perspective, AI-assisted programming performs best in scenarios where "requirements are clear, context is well-defined, and the codebase has mature patterns." Simon's project happens to meet all these conditions: he has a Django blog system that's been running for years, the Beats framework provides a clear extension pattern, the iNaturalist API is well-documented, and he himself has thorough knowledge of the entire tech stack. The role AI tools play in this situation is more like an efficient "pair programming partner" — the developer provides direction and judgment while the AI handles rapid code generation and modification. This aligns with current industry best practices for AI programming tools: AI doesn't replace the developer's thinking but eliminates repetitive coding labor, allowing developers to focus more energy on architectural decisions and product design.
Takeaway
While this project is modest in scale, it demonstrates several noteworthy trends: AI programming tools enable individual developers to turn ideas into reality faster; mobile development experiences are improving; and the value of personal websites as content aggregation hubs is making a comeback. For developers who share a passion for both technology and photography, this might be an approach worth emulating.
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.