[KongchangAI]
Tutorials· 2 min read· 1,328 words

Simon Willison's Full Journey: Building a Wildlife Sightings Feature for His Blog Using Claude Code on His Phone

Simon Willison's Full Journey: Building a Wildlife Sightings Feature for His Blog Using Claude Code on His Phone

Simon Willison built and deployed a blog wildlife sightings feature using Claude Code entirely on his phone.

Renowned developer Simon Willison used Claude Code for web to develop and deploy an iNaturalist wildlife sightings aggregation feature for his personal blog in just one day—entirely from his phone. The feature is deeply integrated into the blog's homepage, date archives, and search system, with over a decade of historical data backfilled. This case demonstrates both the practical impact of AI coding tools in lowering development barriers and the POSSE philosophy of aggregating scattered content back to a self-owned website.

A Tech Blogger's Nature Observation Journey: Project Background

Simon Willison is a well-known developer and founder of Datasette. He recently picked up a Canon R6 Mark II camera and started photographing birds and wildlife extensively. He shares his best shots on the nature observation platform iNaturalist, which sparked an idea: integrate these observation records into his personal blog.

As one of the co-creators of the Django framework, Simon has deep expertise in web development. His later creation, Datasette, is an open-source tool that instantly transforms SQLite database files into interactive APIs and web interfaces, widely used in data journalism and open data. He's also one of the most active tech bloggers in the AI/LLM space, with his blog consistently documenting and reviewing practical applications of various AI tools. iNaturalist itself is a citizen science platform jointly operated by the California Academy of Sciences and the National Geographic Society. After users upload wildlife photos, community members and AI algorithms assist with species identification. The platform has over 150 million observation records, making it one of the world's largest crowdsourced biodiversity databases, with its data widely used in academic research and ecological conservation decisions.

After completing a prototype validation, he used Claude Code for web to finish the entire feature development and deployment directly on his phone.

Implementing the iNaturalist Sightings Feature: From Prototype to Production

Content Aggregation Architecture Based on the Beats System

Simon's blog already had an established system called "beats" specifically for aggregating and displaying content from external platforms. This new iNaturalist Sightings feature is an extension module of that system.

The term "beats" borrows from the newsroom concept of a reporter's beat—each beat is responsible for tracking content from a specific source. In technical implementation, each beat module typically includes a data fetcher (periodically pulling data from external APIs), a data model (standardizing external data for storage), and a set of display templates. This modular design means adding a new content source (like iNaturalist in this case) only requires developing a new beat module without modifying the blog's core architecture.

Once the new feature went live, each observation record includes the following information:

  • Observation time and date
  • Species name (e.g., Acorn Woodpecker, Western Fence Lizard, Osprey)
  • Corresponding wildlife photo
  • Support for search, pagination, and RSS subscription

From the page screenshots, the design is clean and functional—208 records displayed across 7 pages, with each record clearly labeled with species information and capture time.

Deep Site-Wide Integration

This isn't an isolated display page. Like other aggregated content on the blog, observation records are deeply integrated into multiple locations:

  • Homepage timeline: Mixed chronologically with blog posts
  • Date archive pages: Wildlife observations visible when browsing by date
  • Site search results: Searching species names surfaces relevant photos

Even more notably, Simon also backfilled over a decade of iNaturalist historical data. This means searching "lemur" brings up photos he took of lemurs in Madagascar in 2019. This approach of fully archiving one's digital footprint to a self-owned platform clearly demonstrates a commitment to data sovereignty.

Programming with Claude Code on a Phone: Development Approach Explained

Perhaps the most striking aspect of this feature isn't the feature itself, but how it was developed. Simon explicitly stated that he completed the entire development process on his phone using Claude Code for web.

Claude Code is an AI coding agent tool from Anthropic. It originally ran as a command-line terminal tool, then launched a web version (Claude Code for web) that allows users to interact with code repositories directly through a browser. It can read project context, write and modify code, run tests, and commit Git changes—essentially an AI pair programming partner that understands an entire codebase. The web version's launch means developers no longer need a local development environment; any device that can open a browser—including a phone—can serve as a development terminal.

As a real-world case study of AI-assisted programming, this project has several noteworthy characteristics:

  1. Extremely low barrier to entry for the development environment: No need to open a laptop—a phone browser handles the entire workflow from coding to submitting PRs
  2. Production-grade code quality: This isn't a toy project but a feature deployed directly to a personal blog, involving data model design, API integration, frontend display, and search indexing across multiple technical layers
  3. Sound engineering practices: Simon submitted a complete PR on GitHub, including code changes and the prompts used

It's particularly worth noting that Simon publicly documents the prompts used in his PR—a practice with pioneering significance in the AI-assisted programming field. In traditional software engineering, code review focuses on the quality of the code itself; in the era of AI-assisted programming, prompts have effectively become a new form of "source code"—they determine what kind of code the AI generates. Recording prompts not only helps others reproduce and learn but also provides valuable firsthand material for future discussions about AI programming best practices.

Going from prototype validation to feature launch in just one day fully demonstrates the practical impact of AI coding tools like Claude Code in accelerating personal project development.

The Personal Website Renaissance: POSSE Philosophy and Data Sovereignty

This project reflects a larger trend—personal websites are making a comeback as digital identity hubs. Simon didn't settle for just posting photos on iNaturalist; instead, he aggregated content back to his own blog, making his personal website the unified entry point for all his creative output.

In an era of increasingly fragmented social media platforms, this "POSSE" (Publish on your Own Site, Syndicate Elsewhere—publish on your own site first, then distribute to other platforms) philosophy is being adopted by more and more developers. POSSE is one of the core principles of the IndieWeb movement. IndieWeb is a decentralized web community movement that began in 2011, advocating that individuals own their own domain names and content rather than hosting their digital identity on third-party platforms. Beyond POSSE, IndieWeb also promotes open standards like Webmention (cross-site comment protocol) and Micropub (standardized publishing API). The practical driver behind this philosophy is the instability of social platforms—from Google+ shutting down to the upheaval at Twitter/X—all proving the risks of depending on a single platform.

The maturation of AI coding tools has dramatically lowered the technical barrier to implementing these kinds of personalized features—to the point where all development can be done on a phone. In the past, building a complete content aggregation system required developers to be familiar with API integration, database design, frontend templating, and multiple other skills. Now, with AI coding agents, developers can describe requirements in natural language and quickly generate usable code, transforming the IndieWeb philosophy from a practice of the technical few into an accessible choice for many more people.

Conclusion: AI Coding Tools Are Redefining How We Develop

Simon Willison's project may seem small, but it simultaneously touches on AI-assisted programming, personal data sovereignty, and content aggregation—all topics worthy of deeper exploration. When an experienced developer can complete the development and deployment of a full feature using natural language commands on a phone, our understanding of what "programming" means genuinely needs updating.

For developers looking to try similar practices, this case study provides a clear reference path: choose the right AI coding tool, start with small features, and gradually aggregate personal content scattered across various platforms back to your own website.

Key Takeaways

  • Simon Willison used Claude Code for web on his phone to develop an iNaturalist wildlife sightings aggregation feature for his blog
  • The feature is deeply integrated into the blog's homepage, date archives, and site search, with over a decade of historical data backfilled
  • The entire development from prototype to launch took just one day, showcasing AI coding tools' potential for accelerating personal project development
  • The project embodies the POSSE philosophy of aggregating personal content scattered across platforms back to one's own website, while AI tools are lowering the technical barrier to realizing this vision
#Claude Code#Simon Willison#AI-assisted programming#iNaturalist#POSSE#personal website#AI coding tools
Share:

Related articles