Simon Willison Builds Wildlife Sighting Feature for His Blog Using Claude Code on His Phone

Simon Willison built an iNaturalist wildlife sighting sync feature for his blog using Claude Code on his phone.
Django co-creator Simon Willison used Claude Code's web version directly on his phone to build a "Sightings" feature for his personal blog, automatically syncing wildlife observation records from iNaturalist. Built as an extension of his Beats content aggregation system, the feature backfills over a decade of historical data. This case demonstrates how AI programming agents are changing development scenarios, transforming coding from a heavy desktop-dependent activity into a lightweight creative activity possible anytime, anywhere.
Overview
Prominent developer Simon Willison (Django co-creator and Datasette author) recently shared an interesting personal project: using the web version of Claude Code directly on his phone, he built a "Sightings" feature for his blog that automatically syncs wildlife photos he shares on iNaturalist to his personal site.
Simon Willison has broad influence in the developer community. He's one of the co-creators of Django, the Python web framework, and later created Datasette—an open-source tool for exploring and publishing data. Over the past two years, he's become one of the most active practitioners and documenters in the AI-assisted programming space. His blog records daily insights and technical analyses of various LLM tools, and his TIL (Today I Learned) series has become an important information source for many developers tracking AI tool developments.
Behind this seemingly simple feature lies a demonstration of AI-assisted programming in everyday development scenarios, as well as a design philosophy of the personal blog as a content aggregation hub.
Project Background: From a New Camera to a New Blog Feature
Simon recently picked up a Canon R6 Mark II camera and started extensively photographing birds and wildlife. The Canon R6 Mark II is a full-frame mirrorless camera released by Canon in late 2022, featuring a 24.2-megapixel sensor and an advanced Animal Eye AF system capable of recognizing and continuously tracking the eyes of birds, cats, dogs, and other animals. Combined with electronic shutter burst speeds up to 40fps, it has become a popular choice for wildlife photography. This type of camera has significantly lowered the technical barrier for wildlife photography, enabling amateur enthusiasts to capture sharp photos of birds in flight.
He has been sharing his best wildlife photos on iNaturalist—a globally renowned community platform for nature observations. iNaturalist is jointly operated by the California Academy of Sciences and the National Geographic Society, with over 2 million registered users and more than 150 million cumulative nature observation records. The platform's core feature is its community-driven species identification mechanism: after users upload photos, the platform first provides species suggestions through a computer vision model (trained via deep learning), followed by manual verification from community experts and enthusiasts. When multiple users reach consensus on an identification, the observation is marked as "Research Grade" and can be incorporated into global biodiversity databases (such as GBIF) for scientific research. iNaturalist provides comprehensive API endpoints supporting queries by user, species, geographic location, and other dimensions—this is the technical foundation that enabled Simon's data synchronization.
After completing a successful prototype on May 1st, he decided to formally integrate these observation records into his blog system. The final result is a "Sightings" page with search functionality, displaying over 208 observation records including photos of woodpeckers, ospreys, white-crowned sparrows, and various other species.
Technical Implementation: Developing with Claude Code on a Phone
Content Aggregation Architecture Based on the Beats System
This feature wasn't built from scratch but rather extends Simon's previously developed Beats system—a framework for aggregating external content. The core design philosophy of the Beats system is to unify content scattered across various platforms by syncing it to a personal blog, making the blog a true content hub.
This design philosophy aligns with the PESOS (Publish Elsewhere, Syndicate to Own Site) pattern advocated by the IndieWeb community. The core idea of PESOS is: even when you publish content on third-party platforms (like Twitter, Instagram, iNaturalist), you should sync copies of that content back to a site you control. The corresponding pattern is POSSE (Publish on Own Site, Syndicate Elsewhere), where you publish on your own site first, then distribute to other platforms. Simon's Beats system is essentially a PESOS implementation framework—it uses scheduled tasks to call various platform APIs, pull new content, and convert it into a unified data format stored in the blog's database. The advantage of this architecture is clear: even if third-party platforms shut down or change their policies, the user's content remains safely stored on their own server.
Wildlife observation records, as a new content type, are seamlessly integrated into this system. Like other aggregated content, observation records appear in:
- The blog homepage
- Date archive pages
- Site search results
All Development Completed on a Phone with Claude Code
Here's a notable detail: Simon explicitly mentioned that this feature was completed using Claude Code for web on his phone. This means the entire development workflow—from requirement description to code generation, debugging, and committing—was accomplished through AI conversation on a mobile device.
Claude Code is an AI programming agent tool from Anthropic that differs fundamentally from traditional code completion tools (like GitHub Copilot). Traditional code completion tools offer line-level or function-level suggestions as you write code, whereas Claude Code is a full-capability AI agent: it can read project files, understand codebase structure, write new code, run tests, execute shell commands, and even directly commit Git changes. Claude Code was initially released as a command-line tool requiring terminal access; the web version (Claude Code for web) brings these capabilities to the browser, where users simply describe requirements in natural language and the AI completes code writing, testing, and committing in the cloud. This means developers no longer need local IDE installations or development environment configurations—a browser is all it takes for complete software development. This is precisely the technical foundation that enabled Simon to complete the entire feature development on his phone.
He submitted the complete PR (#668) on GitHub, which includes the prompts he used. This transparent development approach itself serves as documentation and advocacy for AI-assisted programming practices.
Backfilling a Decade of iNaturalist Data
Simon didn't just implement incremental syncing—he also backfilled over ten years of iNaturalist observation data. This means his photos of lemurs taken in Madagascar in 2019 can now be found through the blog's search function. This data backfilling capability reflects the completeness of the system design.
From a technical perspective, backfilling involves paginated queries to the iNaturalist API, timestamp handling for historical data, and image URL validity verification. The iNaturalist API supports querying all historical observation records by user ID, returning data that includes taxonomic classification information (the complete classification tree from kingdom through phylum, class, order, family, genus, and species), geographic coordinates, observation timestamps, photo URLs, and community identification status—rich structured data. After transformation, this data is stored in the blog's Django database with appropriate indexes to support search and chronological browsing.
Real-World Insights for AI-Assisted Programming
Changing Not Just Coding Efficiency, But Development Scenarios
Simon's case demonstrates an important dimension of AI-assisted programming: it changes not just coding efficiency, but the scenarios and methods of development. Completing a full feature development on a phone during fragmented time slots was nearly unimaginable under traditional development paradigms.
The web version of Claude Code frees developers from desktop IDE dependency—as long as you can open a browser, you can start a development task. The efficiency gains for personal project advancement are obvious.
The deeper significance of this shift is that programming is gradually evolving from a "heavy" activity requiring specific environments and large time blocks into a "light" creative activity that can happen anytime, anywhere. Just as smartphones transformed photography from a professional pursuit into an everyday activity, AI programming agents may be driving a similar democratization of software development. Of course, this doesn't mean all development work is suitable for phones—complex system architecture design, performance optimization, large-scale refactoring, and similar tasks still require traditional development environments. But for feature iterations in personal projects like Simon's, this new development approach has already demonstrated clear advantages.
Best Practices for Personal Projects
For individual developers, this case offers several ideas worth adopting:
- Prototype validation first: Simon completed a prototype the day before, confirming feasibility before formal development
- Extend existing systems: Leveraging the Beats framework's extensibility rather than reinventing the wheel
- Data completeness: Backfilling historical data to ensure the feature's full value
- Openness and transparency: Publishing PRs and prompts publicly to provide references for the community
Conclusion
Although this project isn't large in scale, it's a typical microcosm of AI-assisted programming being integrated into daily development workflows. As a deep user and evangelist of AI tools, Simon Willison continuously demonstrates the practical value of these tools through his own practice—not replacing developers, but enabling them to convert ideas into implementations with less friction across more scenarios.
For developers following the evolution of AI programming tools, Simon's public PR and prompts are excellent learning materials worth studying closely—how he organizes requirement descriptions and how he collaborates with Claude Code to complete a full feature's development. From a broader perspective, this case also reflects the new positioning of personal websites/blogs in the social media era: no longer merely places for publishing original articles, but aggregation hubs for one's digital life, gathering digital footprints scattered across the internet into a space under one's complete control.
Related articles
TutorialsChatGPT Plus Subscription Guide: Are GPT-5.5, image-2, and Codex Worth the Upgrade?
A detailed look at ChatGPT Plus features — GPT-5.5, image-2, and Codex — with a Plus vs Pro comparison and a complete step-by-step subscription guide for users outside the US.
TutorialsHarness AI Engineering in Practice: Using Claude Code to Master Enterprise-Level E-Commerce Development
Deep dive into Harness AI Engineering: master enterprise e-commerce development with Claude Code using the Rules, Skills, Wiki, and Changes framework.
TutorialsCursor + Codex Dual-IDE Collaboration: A Practical Methodology for Open-Source Project Customization
A complete methodology for open-source project customization based on real-world experience, detailing the Cursor+Codex dual-IDE workflow, seven-stage process, MVP validation, and AI source code reading techniques.