Simon Willison Built a Wildlife Sightings Feature for His Blog Using Claude Code on His Phone

Simon Willison built a wildlife sightings feature for his blog using Claude Code on his phone.
Django co-creator Simon Willison used Claude Code for web on his phone to build and ship a "Sightings" feature for his personal blog in just two days, automatically syncing wildlife photography from iNaturalist and retroactively importing a decade of historical data. Built on his Beats content aggregation system, the project embodies IndieWeb data sovereignty principles and demonstrates how AI programming assistants are profoundly changing developer workflows and productivity.
Background: A Developer's Blog Evolution
Simon Willison — renowned developer and creator of Datasette — recently added a "Sightings" feature to his blog, showcasing wildlife photography he's shared on iNaturalist. What makes this particularly noteworthy is that the entire feature was built using Claude Code for web on his phone.
Simon Willison is one of the co-creators of the Django web framework, the most popular web development framework in the Python ecosystem. He later created Datasette — an open-source tool for exploring and publishing data that can instantly transform SQLite databases into interactive APIs and web interfaces. Simon is also one of the most active tech bloggers in the AI space, with his blog widely regarded as a bellwether for AI adoption in the developer community, known for its thorough documentation of LLM tool experiences and AI-assisted programming practices.
Behind this seemingly simple feature lies a deeper trend: AI-assisted programming is fundamentally changing how developers work.
Feature Deep Dive: Content Aggregation from iNaturalist to Personal Blog
What Are Sightings?
Simon recently picked up a Canon R6 Mark II camera and began extensively photographing birds and wildlife. The Canon EOS R6 Mark II, released by Canon in late 2022, is a full-frame mirrorless camera renowned for its exceptional autofocus tracking capabilities (particularly animal eye detection) and 40 frames-per-second electronic shutter burst speed, widely considered one of the best value-for-money wildlife photography bodies available. For birding photography, fast and precise autofocus combined with high-speed continuous shooting are essential for capturing birds in flight.
He shares his best shots on iNaturalist (a global nature observation community platform), then automatically syncs this content to his personal blog through the newly developed feature. 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. After users upload wildlife photos, community members and AI models assist with species identification. The platform's data is widely used in ecological research and biodiversity monitoring, and its API is open and well-documented, making it straightforward for developers to integrate data into third-party applications.
From the page display, the Sightings page supports search and filtering, showing observation records for species including Acorn Woodpecker, Western Fence Lizard, Osprey, White-crowned Sparrow, and more, with each record containing the time, species name, and photo.
Technical Architecture: An Extension of the Beats System
The Sightings feature wasn't built from scratch — it's based on Simon's Beats system launched in February, a general-purpose framework for aggregating external content. The Beats system is designed to unify content from different platforms into a personal blog, with Sightings being its latest content type extension.
The Beats system draws inspiration from the 'lifestream' concept — aggregating one's digital footprints from across the internet into a unified timeline. From a technical perspective, such systems typically include: cron jobs polling various platform APIs for new content, a unified data model for standardized storage of different content formats, and an adapter layer integrating with the blog's existing template and search systems. Simon's implementation is built on Django and PostgreSQL, where each content type (such as music listening history, bookmarks, and now wildlife observations) is a plugin-style extension under the Beats framework.
Like other aggregated content on the blog, observation records appear in:
- The blog homepage
- Date archive pages
- Site search results
Even more notably, Simon retroactively imported over a decade of iNaturalist historical data. This means you can now search his blog for "lemur" and find photos of lemurs he took in Madagascar in 2019. This practice of re-aggregating personal data scattered across platforms back to one's own platform is a core tenet of the IndieWeb movement.
IndieWeb is a decentralized web movement that began in 2011, with core principles including: owning your own domain and content, publishing first on your own site (POSSE — Publish on your Own Site, Syndicate Elsewhere), and enabling inter-site connectivity through open standards. The movement is a response to social media platforms monopolizing personal content — when Google Reader shut down, Twitter/X policies shifted dramatically, or platforms frequently adjusted their algorithms, users who hosted content on their own platforms remained unaffected. The IndieWeb community has developed protocols like Webmention and Micropub to support this philosophy.
AI-Assisted Development: Full-Stack Programming on a Phone
Claude Code for Web in Practice
The most striking detail about this project is the development environment — Simon completed the entire feature development on his phone using Claude Code for web. From prototype validation to the final PR submission (GitHub PR #668), the entire workflow was accomplished with the help of an AI programming assistant.
Claude Code is an AI programming agent tool from Anthropic, originally running as a command-line terminal application capable of directly reading and writing files, executing commands, and interacting with Git. Claude Code for Web is its browser-based version, allowing users to interact with codebases through a web interface (including mobile browsers), where the AI agent can autonomously complete code writing, test execution, PR submission, and other full development workflow tasks. This means developers don't need to configure local development environments — all they need is a browser to direct the AI through complex software engineering tasks.
This isn't a toy project or a demo — it's a real feature deployed to production, involving data model design, API integration, frontend display, search indexing, and more. Simon completed the prototype validation on May 1st and shipped the full feature the very next day — a remarkable pace of development.
Implications for Developer Workflows
This case study highlights several trends worth noting:
-
Decentralization of development devices: Traditional full-stack development requires a complete desktop environment, but AI programming assistants are reducing dependence on local development setups, making even a phone a viable productivity tool. Previously, mobile programming was constrained by screen size, keyboard input efficiency, and local computing resources, but when an AI agent handles the actual code writing and execution, the developer's role shifts to "architect and reviewer" — work that demands far less from input devices.
-
Accelerated path from prototype to production: AI-assisted programming dramatically compresses the cycle from idea to deployment. One day to validate the prototype, one day to complete deployment — this would be nearly impossible in traditional development workflows. In conventional processes, environment configuration, dependency management, test writing, and code review alone could consume several days, whereas an AI agent can handle all these steps in one pass after understanding the project context.
-
The renaissance of personal projects: When development costs drop significantly, developers become more willing to invest effort building custom features for personal blogs rather than relying on third-party platforms. This echoes the spirit of early internet personal homepage culture — where everyone's website was a unique, handcrafted digital space, rather than a cookie-cutter social media template.
The Deeper Significance: Data Sovereignty and the Return of Personal Websites
Simon's approach represents a resurgent philosophy: your content should live on your own platform. iNaturalist is an excellent community platform, but syncing a decade of observation data to a personal blog ensures this content won't disappear due to the rise or fall of any given platform.
This emphasis on data sovereignty is especially relevant today. Over the past decade, we've witnessed countless platforms die or undergo dramatic shifts: Vine shut down, Tumblr changed hands with massive content loss, Twitter's transformation into X tightened API policies causing the collapse of its third-party ecosystem, and Reddit's API pricing controversy forced numerous community tools offline. With every platform change, years of accumulated user content and social connections face risk. Owning your own copy of data is the most reliable strategy against this uncertainty.
Combined with the Beats system's general-purpose design, Simon has effectively built a personal content aggregation hub — regardless of where content was originally published, it ultimately converges on his blog. This pattern has become unprecedentedly easy to implement with the help of AI tools.
For developers following the evolution of AI-assisted programming, this small project is a highly compelling real-world case: AI isn't just helping you write code snippets — it's transforming the entire process of how developers conceive ideas, validate prototypes, and ship products.
Key Takeaways
- Simon Willison used Claude Code for web on his phone to develop a wildlife Sightings feature for his personal blog, going from prototype to production in just two days
- The feature is built on his Beats content aggregation system, automatically syncing photos and observation data from iNaturalist to his blog, with support for search and archiving
- The project retroactively imported over a decade of historical data, embodying the IndieWeb philosophy of re-aggregating scattered content to one's own platform
- This case demonstrates how AI programming assistants are lowering development barriers, compressing the idea-to-production cycle, and even changing dependencies on development hardware
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.