Simon Willison Uses Claude Code on His Phone to Build a Wildlife Sightings Feature for His Blog

Simon Willison used Claude Code on his phone to integrate iNaturalist wildlife data into his personal blog.
Renowned developer Simon Willison used the web version of Claude Code on his phone to build a "Sightings" feature for his blog, automatically syncing wildlife observation records from iNaturalist to his personal website and backfilling a decade of historical data. Built as an extension of his existing Beats content aggregation architecture, this project exemplifies three converging trends: the practical application of AI-assisted programming, the revival of personal websites as content hubs, and the mobilization of development tools.
A Developer Blogger's New Experiment: Integrating iNaturalist Observation Data into a Personal Blog
Simon Willison — renowned developer and creator of Datasette — recently shared an interesting personal project: he used the web version of Claude Code on his phone to build a "Sightings" feature for his blog, automatically syncing wildlife photos he shares on iNaturalist to his personal website.
Simon Willison has deep 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 that transforms SQLite database files directly into interactive web interfaces and APIs. His personal blog runs on a custom Django application that has been iteratively evolving over the years, serving as a technical playground in its own right. This relentless pursuit of data accessibility is also reflected in his practice of aggregating data from various external platforms into his personal blog.
Behind this seemingly simple feature lies a reflection of how AI-assisted programming tools are changing the way developers work — even changing the answer to the fundamental question of "where do you write code."
Project Background: A New Camera Sparks a New Need
Simon recently acquired a Canon R6 Mark II, which led him to capture a large volume of bird and wildlife photographs. The Canon EOS R6 Mark II is a full-frame mirrorless camera released by Canon in late 2022, featuring a 24.2-megapixel sensor, up to 40fps electronic shutter burst shooting, and an advanced subject detection autofocus system with animal eye tracking. These features make it a popular choice for wildlife and bird photography — high-speed burst capture can freeze birds in flight, while animal eye-tracking AF dramatically reduces missed focus rates. For amateur naturalists like Simon, the improvement in equipment performance directly leads to a surge in high-quality photo output, which in turn creates new content management and display needs.
He had been sharing his best wildlife photos 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 observation records and millions of active users. After users upload photos of wild flora and fauna, community members and AI identification systems help identify species, and verified data is incorporated into the Global Biodiversity Information Facility (GBIF) for scientific research. The platform provides comprehensive API interfaces that allow developers to programmatically access observation records, species information, and geographic location data — this is precisely the technical foundation that enabled Simon's data synchronization.
However, this content was disconnected from his personal blog. Based on a successful prototype validation the previous day, he decided to formally integrate iNaturalist observation data into his blog system. The final result is a "Sightings" page with search functionality, displaying the time, species name, and photo for each observation, with pagination and RSS subscription support.
Technical Implementation: AI-Assisted Development on a Phone
Content Aggregation Architecture Based on the Beats System
Simon had previously built a content aggregation system called "Beats" for his blog, designed to sync content from external platforms. The core idea of the Beats system is to treat the blog as a content hub, using scheduled tasks to pull data from various external platforms (such as GitHub, Twitter/X, Mastodon, etc.), normalize it, and store it in the blog's database. Each external data source is abstracted as a "Beat" with a unified data model and display logic. This architectural design makes the marginal cost of adding new data sources very low — you only need to implement the API integration logic for a specific platform to seamlessly incorporate new types of content into the blog's timeline, search index, and RSS feed.
The Sightings feature was implemented as an extension of the Beats system. Like other forms of aggregated content on the blog, observation records appear on the homepage, date archive pages, and site search results. This means the content doesn't exist in isolation but is fully integrated into the blog's information architecture.
Claude Code Web Version in Practice
The most noteworthy technical detail is: the entire feature was built on a phone using the web version of Claude Code. Simon publicly shared the complete PR (Pull Request #668) and the prompts he used on GitHub.
Claude Code is an AI programming agent tool from Anthropic designed for developers. It originally ran as a command-line terminal application, capable of directly reading project files, executing commands, running tests, and committing code. Its web version brings this capability to the browser environment, meaning developers don't need to install any development environment locally — they can let the AI agent access GitHub repositories, understand project structure, and generate complete code changes through a browser alone. This is fundamentally different from traditional AI code completion tools (like GitHub Copilot) — the latter assists in writing code snippets, while Claude Code can autonomously complete full feature development involving multi-file modifications.
This showcases an important trend in AI programming tools: development is no longer confined to scenarios where you sit at a computer with an IDE open. When AI can understand project context and generate complete feature code, developers can advance projects on any device with a browser.
Backfilling a Decade of Historical Data
Simon didn't just implement incremental syncing — he also backfilled over a decade of iNaturalist historical data. He gave a vivid example: searching for "lemur" on the blog now surfaces photos of lemurs he took in Madagascar in 2019. This kind of cross-temporal content integration makes the personal blog a truly complete digital memory repository.
Deeper Implications
The Revival of Personal Websites and the POSSE Philosophy
In an era where social media platforms dominate content distribution, Simon's approach represents a "return to personal websites" trend. He's not abandoning iNaturalist — rather, he uses it as a data source, making his personal blog the central hub for all content.
This approach 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 online identity and content. Its most widely known strategy is POSSE (Publish on your Own Site, Syndicate Elsewhere) — first publish content on your own website, then distribute it to social platforms via automation tools to reach audiences. The counterpart is PESOS (Publish Elsewhere, Syndicate to your Own Site) — publish on third-party platforms first, then sync back to your personal site. Simon's iNaturalist integration is actually closer to the PESOS model. But regardless of which strategy is employed, the shared goal is ensuring your personal website always maintains a complete copy of your content, unaffected by platform policy changes or shutdowns. This philosophy is regaining widespread attention in the developer community, especially after platforms like Twitter/X have undergone dramatic upheavals.
AI Programming Tools Lower the Integration Barrier
In the past, integrating external API data into a custom blog system required significant development investment — developers needed to read API documentation, handle authentication mechanisms, design data models, write sync logic, handle errors and edge cases, and ensure compatibility with existing systems. Now, with AI programming tools like Claude Code, an experienced developer can quickly complete the entire process from prototype to production on a phone. This isn't AI replacing developers — it's AI enabling developers to turn ideas into reality faster.
It's worth noting that this efficiency gain rests on two prerequisites: first, the developer must possess sufficient technical judgment to review AI-generated code; second, the project must have good architectural design (like the extensibility of the Beats system) that enables AI to follow existing patterns and generate high-quality code. AI programming tools amplify capabilities developers already possess — they don't create capabilities from nothing.
The Long-term Value of Content
The decision to backfill a decade of data is particularly worth contemplating. Content on social platforms tends to sink over time — algorithm-driven feeds inherently favor new content, making old posts virtually impossible to rediscover. More seriously, platforms may adjust policies, restrict API access, or shut down entirely (like the demise of Google+), causing years of accumulated user content to vanish overnight.
Content on a personal website, however, can be searched, indexed, and preserved long-term. When your 2019 Madagascar lemur photos can be rediscovered through a blog search in 2026, the long-term value of content is realized. This also echoes a core issue in the digital preservation field: in the era of the platformized internet, how can individuals ensure their digital footprint doesn't disappear with the rise and fall of platforms.
Conclusion
Simon Willison's small project may be modest in scale, but it elegantly weaves together multiple trends: the practical application of AI-assisted programming, the return of personal websites as content hubs, and the possibility of mobile development tools. For developers following the evolution of AI programming tools, this is a real-world case worth studying — it demonstrates not the theoretical upper limits of what AI can do, but how AI integrates into a senior developer's daily workflow, creating tangible value in real scenarios.
Key Takeaways
- Simon Willison used the web version of Claude Code on his phone to build a wildlife sightings feature for his blog, integrating iNaturalist data into his personal website
- The feature extends the existing Beats content aggregation system, with observation records fully integrated into the blog's homepage, archives, and search
- The project backfilled over a decade of iNaturalist historical data, achieving long-term preservation and searchability of personal content
- This case demonstrates how AI programming tools lower system integration barriers, enabling developers to quickly complete prototype-to-production development even on mobile devices
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.