Full Record: Simon Willison Develops Blog Wildlife Sighting Feature Using Claude Code on His Phone

Simon Willison built an iNaturalist wildlife sighting sync feature for his blog using Claude Code on his phone.
Renowned developer Simon Willison used Claude Code for web on his phone to build a complete "Sightings" feature for his blog, syncing over a decade of wildlife observation records from iNaturalist. Built on his beats content syndication system, the feature supports full-text search, RSS feeds, and paginated browsing. This case demonstrates AI programming tools breaking free from physical device constraints, while reflecting the IndieWeb trend of developers re-aggregating scattered content to personal websites and taking ownership of their own data.
Overview
Simon Willison (renowned developer and creator of Datasette) recently added a "Sightings" feature to his blog, syncing wildlife photos he shares on iNaturalist to his personal blog. The entire feature was developed using Claude Code on his phone — a detail remarkable enough in itself.
Project Background: From Birding to Blog Feature Development
Simon recently picked up a Canon R6 Mark II camera and began extensively photographing birds and wildlife. He's been sharing his best shots on iNaturalist.
iNaturalist is a global citizen science platform jointly operated by the California Academy of Sciences and the National Geographic Society, with over 150 million observations and millions of active users. Wildlife photos uploaded by users undergo dual identification through community members and AI algorithms, ultimately forming biodiversity datasets with genuine scientific research value. The platform provides a comprehensive API that allows developers to programmatically access observation records, species information, and geolocation data — this is precisely the technical foundation that enabled Simon to sync his data to his personal blog.
Building on a successful prototype from the previous day, he decided to formally integrate this iNaturalist content into his blog system.
The feature is built on top of his previously developed "beats system." The beats system is a content syndication framework for aggregating external content. Its core concept draws from the IndieWeb movement's POSSE principle (Publish on your Own Site, Syndicate Elsewhere) — but in reverse — pulling content from external platforms back to his personal site. In terms of technical implementation, the beats system defines unified data models and rendering templates for each external content type, pulls data from external APIs via scheduled tasks or Webhooks, and then indexes and displays it alongside native blog content (articles, links, etc.). The architecture's advantage lies in its high extensibility: adding a new content source only requires defining the corresponding data adapter and template, with no changes to the core framework. Through this system, observation records can appear on the blog homepage, date archive pages, and site search results, just like blog posts, external links, and other content types.
Technical Highlights
Entire Development Completed on a Phone with Claude Code
The most impressive aspect of this project: Simon used Claude Code for web to complete the entire feature's development and deployment on his phone.
Claude Code is an AI coding agent tool from Anthropic designed for developers. It originally ran as a command-line terminal application and later expanded to the web (Claude Code for web), allowing users to access it directly through a browser. Unlike traditional AI code completion tools (such as GitHub Copilot), Claude Code is more akin to a programming partner with full contextual understanding — capable of reading project file structures, understanding the entire codebase, and executing the complete development workflow from writing code to Git commits. The launch of the web version means developers are no longer constrained to local development environments; a phone browser can serve as a legitimate development terminal.
This wasn't a simple configuration change — it involved a complete feature module encompassing data synchronization, page rendering, and search integration.
For developers accustomed to writing code in front of large screens, this case demonstrates that AI-assisted programming tools are changing the physical constraints of development — you no longer need to be sitting at a computer to accomplish meaningful programming work.
He submitted the complete PR on GitHub, including the prompts used and the final code. Interested developers can review the full implementation process directly.
Backfilling a Decade of Historical Data
Simon didn't just implement real-time syncing of new content — he also backfilled over ten years of iNaturalist observation records. This means users can now search for "lemur" on his blog and find photos of lemurs he took in Madagascar in 2019.
Backfilling a decade of historical data is far from a simple one-time API call. iNaturalist's API has rate limits (typically 60 requests per minute), and pulling large volumes of historical data requires implementing paginated traversal, request throttling, and checkpoint/resume mechanisms. Additionally, URLs for historical photos may have changed, taxonomic species names may have been revised, and timezone and date formats may be inconsistent across records from different periods — all edge cases that need handling during the data backfill process. Simon chose to complete the full backfill at launch rather than adopting progressive loading, ensuring users get a complete browsing and search experience from their very first visit.
This data backfill strategy means the new feature launches with rich historical content, delivering a complete user experience from day one.
Sightings Page Feature Overview
In practice, the Sightings page includes the following features:
- Full-text search
- RSS feed support
- Sorting and filtering by date
- Paginated browsing (208 records across 7 pages)
- Each record displays observation time, species name, and photo thumbnails
The records cover a wide variety of species including Acorn Woodpecker, Western Fence Lizard, Osprey, White-crowned Sparrow, and many more — quite a rich collection.
Takeaways for Developers
A Real-World AI-Assisted Programming Workflow
This case demonstrates a typical AI-assisted programming workflow in a real project: the developer has a clear requirement (sync iNaturalist data to the blog), describes the intent to the AI in natural language, the AI generates the code implementation, and the developer reviews and deploys it. From prototype validation to official release took just one day.
The key point is that Simon didn't hand everything over to the AI. He has an intimate understanding of his blog system's architecture, knows how the beats system works, and is clear on how data should flow. The AI plays the role of an efficient executor here, not an architectural decision-maker. This collaborative model — "humans handle architectural decisions and quality control, AI handles code generation and implementation details" — is becoming the dominant paradigm for how effective developers use AI tools. It requires developers to have sufficient technical judgment to evaluate the quality of AI output, and it also means the ceiling of AI tools' value largely depends on the technical depth of the person using them.
The Return of Personal Websites as Content Hubs
This project also reflects a clear trend in the independent blogging community: re-aggregating content scattered across various platforms back to personal websites. Simon's beats system is essentially a personal content hub, unifying the management and display of blog posts, external links, social media updates, and nature observation records.
This approach deeply aligns with the core philosophy of the IndieWeb movement. IndieWeb is a decentralized web community movement that began in 2011, advocating for individuals to own their own domain names and content rather than hosting their digital identity and creative output on third-party platforms. This philosophy has gained increasing attention in recent years, especially in the wake of Twitter being acquired and rebranded as X, Reddit's API policy tightening, and frequent algorithm and policy changes across multiple social platforms. More and more developers are reinvesting in personal website infrastructure, using it as an anchor for their digital identity. The development of open protocols like Webmention, Micropub, and IndieAuth has also provided technical standards for interconnection between personal websites.
In an era of constant social media platform upheaval, "owning your own data" is no longer just a slogan — it's becoming a practical choice for an increasing number of developers.
Conclusion
Behind this seemingly simple blog feature lie several trends worth paying attention to:
- Mobile viability of AI programming tools: Claude Code makes completing real development work on a phone a reality
- Personal websites as content hubs: Re-aggregating scattered data onto platforms you control
- Data ownership awareness: Developers' continued commitment to the philosophy of "owning your own data"
Simon Willison has long been an active practitioner and evangelist of AI tools. This experience of completing a full feature development with Claude Code on his phone wasn't about showing off — it was the natural result of integrating AI tools into his daily workflow. For other developers, this may be a signal: the barriers to entry and use cases for AI-assisted programming are even lower and broader than we might imagine.
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.