Simon Willison Ships Blog Wildlife Sightings Feature in Two Days Using Claude Code on His Phone

Simon Willison built a blog iNaturalist integration in two days using Claude Code on his phone.
Developer Simon Willison used the web version of Claude Code on his phone to build a "Sightings" feature for his personal blog, automatically syncing wildlife photography from iNaturalist with search, pagination, and RSS support, plus ten years of backfilled historical data. From prototype to launch in just two days, it showcases AI-assisted programming's real-world efficiency gains and the viability of mobile development.
Overview
Prominent developer Simon Willison recently shared an inspiring practice: using the web version of Claude Code on his phone, he built an entirely new "Sightings" feature module for his personal blog. This feature automatically syncs his wildlife photography shared on iNaturalist to his blog, complete with search, pagination, and RSS subscription support.
From prototype validation to full feature launch took just two days, with the entire development process completed on a phone—making this project a textbook case of AI-assisted programming applied to personal projects.
Project Background: A New Camera Sparks Creative Needs
Simon Willison recently picked up a Canon R6 Mark II camera and began extensively photographing birds and wildlife. He shares his best shots on iNaturalist but wanted this content integrated into his personal blog to form a unified content ecosystem.
Simon Willison has broad influence in the developer community. He's a co-creator of the Django web framework and the author of Datasette, a data exploration tool. In recent years, he's devoted significant energy to hands-on exploration of AI tools, continuously documenting his real-world experiences with various large language models (LLMs) on his blog. Many developers consider him one of the most valuable primary sources on AI-assisted programming. His blog itself is a long-running Django project with a rich collection of custom features, providing a mature technical foundation for the rapid integration of this Sightings feature.
iNaturalist is a global nature observation community platform jointly initiated by the California Academy of Sciences and the National Geographic Society, with over 200 million species observation records and millions of active users. Wildlife and plant photos uploaded by users undergo dual identification by community members and AI models, ultimately forming biodiversity datasets with scientific research value. iNaturalist provides a comprehensive RESTful API that allows developers to query observation records by user, species, geographic location, and other dimensions—this gave Simon the technical feasibility to sync data to his personal blog.
On May 1st, Simon completed a successful prototype validation (inat-sightings), and just one day later decided to formally integrate it into his blog system. This rapid iteration pace was largely enabled by the efficiency gains from Claude Code.
Technical Implementation Details
Content Aggregation Architecture Based on the Beats System
The Sightings feature was implemented as an extension of Simon's previously built "Beats system." The Beats system is the foundational infrastructure in his blog for aggregating external content, supporting unified display of content from different sources on the blog's homepage, date archive pages, and site search results.
From a technical pattern perspective, the Beats system embodies the typical design philosophy of a Content Aggregation architecture: by defining unified data models and display interfaces, content from various external platforms is standardized and incorporated into a single content management system. This design aligns closely with the POSSE (Publish on your Own Site, Syndicate Elsewhere) principle advocated by the IndieWeb community—that is, prioritize publishing content on your own website, then syndicate to various social platforms; or conversely, aggregate content already published on external platforms back to your personal site. The extensibility of the Beats system means that whenever Simon wants to integrate a new content source (like iNaturalist), he only needs to write a new data adapter layer without modifying the common infrastructure for homepage display, search indexing, and RSS output.
New observation records receive the same treatment as other forms of aggregated content on the blog:
- Appear in the homepage timeline
- Browsable through date archives
- Included in site search index
- Provided with a dedicated RSS feed
RSS (Really Simple Syndication) is a content subscription protocol born in the early 2000s that allows users to subscribe to and read updates from multiple websites through an RSS reader without visiting each site individually. Despite being considered in decline after the rise of social media, RSS has been experiencing a significant revival in recent years. More and more developers and content creators are re-embracing RSS as an important tool for resisting algorithmic recommendations and reclaiming control over information consumption. For personal blogs, providing an RSS feed is not just a technical tradition but a way of conveying to readers: "You can consume my content in whatever way you prefer." Simon providing a separate RSS feed for Sightings means readers interested in wildlife photography can subscribe precisely to this type of content without following all blog updates.
All Development Completed on Phone with Claude Code
The most noteworthy aspect of this project is that the entire feature was developed by Simon on his phone using Claude Code for Web. He submitted a complete PR (Pull Request #668) on GitHub, which includes the prompt records from his interactions with Claude.
Claude Code is an AI programming tool from Anthropic designed for developers. Unlike code completion plugins embedded in IDEs such as GitHub Copilot, Claude Code's core interaction mode is conversational—developers describe requirements in natural language, and the AI generates complete code change proposals after understanding the project context. It can directly read and modify project files, execute terminal commands, and run tests, making it essentially more like an "AI pair programming partner" than a simple code suggestion tool. The web version of Claude Code brings this capability to the browser, meaning developers no longer depend on a local IDE environment—they only need a browser for complete development work. For mobile scenarios, this represents a qualitative shift: the phone browser becomes a bridge connecting AI programming capabilities with remote code repositories, allowing developers to advance projects during any fragmented time.
This means developers can now accomplish quite complex feature development in mobile scenarios with the help of AI programming assistants—including data model design, API integration, frontend display, and content migration. The phone is no longer just a tool for viewing code but a genuinely usable development terminal.
Ten Years of Historical Data Backfill
Simon didn't just implement automatic syncing of new content—he also backfilled over ten years of iNaturalist historical observation records. Users can search his blog to find historical content like photos of lemurs he took in Madagascar in 2019, greatly enriching the blog's content depth and searchability.
Historical data backfill is a common but easily underestimated engineering challenge in content aggregation projects. It involves not only batch API calls and data format conversion but also handling correct timeline ordering, deduplication with existing content, and the impact of large volumes of historical records on search index performance. Simon's successful completion of ten years of data backfill is partly due to iNaturalist API's good support for historical data queries, and partly demonstrates that the Beats system's data model design has sufficient flexibility to accommodate large-scale historical content imports.
Sightings Feature Page Display
From the screenshots, the Sightings page design is clean and practical:
- Search bar and RSS icon at the top
- Supports sorting by date and paginated browsing (208 records across 7 pages)
- Each record displays observation time, species name, and photo thumbnail
- Multiple observations from the same outing can be grouped together
Displayed species include Acorn Woodpecker, Western Fence Lizard, Osprey, and White-crowned Sparrow—all common North American wildlife.
Implications for Developers
This case offers several points worth deeper reflection:
AI-Assisted Programming Has Entered Production
This isn't a demonstration demo—it's a production feature in actual use. Simon's blog receives substantial daily traffic, and this feature needs to run stably while supporting search and RSS output. Claude Code's performance in this type of real project is more convincing than any benchmark test.
Notably, Simon published the complete PR and prompt records, providing other developers with a reproducible reference path. In discussions about AI-assisted programming, the community often lacks real production environment cases—most demonstrations stay at the level of "using AI to write a Snake game." Simon's case involves integration with an existing complex system, external API interfacing, data migration, and frontend display across multiple dimensions, better reflecting the capability boundaries and applicable scenarios of AI programming tools in actual engineering.
Mobile Programming Becomes Reality
Claude Code for Web turns the phone into a usable development terminal. For developers who want to advance personal projects during commutes or while waiting, this opens up an entirely new possibility.
The Content Aggregation Value of Personal Websites
In an era of fragmented social media, aggregating content scattered across iNaturalist, Twitter, Mastodon, and other platforms back to a personal blog to regain data sovereignty—this is exactly the philosophy the IndieWeb movement has always advocated. AI tools lower the technical barrier to realizing this vision.
The IndieWeb movement originated in 2011, initiated by a group of developers concerned about Web openness. Its core argument is that individuals should own the content they publish on the internet, rather than hosting it on third-party platforms that could shut down, change rules, or restrict access at any time. The IndieWeb community has proposed a series of technical standards and practical principles, including the aforementioned POSSE, Webmention (cross-site interaction protocol), and Micropub (content publishing protocol). Over the past few years, as Twitter experienced turbulence, Reddit imposed API restrictions, and multiple social platforms changed policies, IndieWeb's philosophy has gained broader resonance. Simon Willison himself is a long-time practitioner of IndieWeb principles—his blog is not just a content publishing platform but a continuously evolving personal data center that unifies and archives his digital footprints across various platforms.
Personal Project Development Cycles Are Dramatically Compressed
From idea to prototype to launch in two days. AI tools enable individual developers to advance side projects at efficiency levels approaching professional teams—a positive signal for the indie developer ecosystem.
Conclusion
Simon Willison's project isn't large in scale, but it vividly demonstrates how AI programming tools can integrate into a developer's daily workflow. When the barrier to building a new feature drops to "a few conversational rounds on a phone," the creative potential of personal projects will be enormously unleashed.
For developers interested in IndieWeb and the personal blog ecosystem, this "Claude Code + content aggregation" pattern is worth learning from—not just the technical approach itself, but that development rhythm of "think it, build it, ship it fast."
Key Takeaways
- Simon Willison used Claude Code for Web on his phone to develop a wildlife observation feature for his blog
- The feature is built on his Beats content aggregation system, syncing photos from the iNaturalist platform to his personal blog
- Over ten years of historical observation data was backfilled, with support for search, pagination, and RSS subscription
- From prototype to official launch took only two days, demonstrating AI-assisted programming's efficiency boost for personal projects
- Reflects the trend of personal website content sovereignty—re-aggregating content scattered across various platforms
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.