[KongchangAI]
Tutorials· 3 min read· 1,518 words

Simon Willison Uses His Phone and Claude Code to Add Wildlife Sightings to His Blog

Simon Willison Uses His Phone and Claude Code to Add Wildlife Sightings to His Blog

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

Django co-creator Simon Willison used Claude Code for Web entirely on his phone to deeply integrate iNaturalist wildlife photos into his personal blog, including homepage display, search, RSS feeds, and more, while backfilling ten years of historical data. Built on his existing beats content aggregation framework, the project went from prototype to launch in a single day, showcasing how AI-assisted programming frees development from device and environment constraints.

Overview

Renowned developer Simon Willison recently shared an impressive project: he built a "Sightings" feature for his personal blog entirely on his phone using Claude Code for Web, automatically syncing wildlife photos from iNaturalist to his blog. This case vividly demonstrates how AI-assisted programming makes "coding anytime, anywhere" a reality.

Project Background: From Photography to Blog Integration

About Simon Willison

Simon Willison is no ordinary independent developer. He's one of the co-creators of Django, the Python web framework, having helped shape the foundations of modern web development as early as 2005. In recent years, he created the widely popular open-source project Datasette—a tool for exploring and publishing data that can instantly transform any SQLite database into an interactive web interface and API. His personal blog has been running for over twenty years and is itself a complex content management system built on Django. During the AI wave, Simon has been writing in-depth usage reports on AI tools at an extremely high frequency, and his blog has become an essential reference for the developer community to understand the real capabilities of AI programming tools. It's precisely this deep technical foundation and keen eye for new tools that enables him to quickly integrate AI programming tools into real engineering practice.

New Gear Sparks Creative Enthusiasm

Simon recently acquired a Canon R6 Mark II camera and began extensively photographing birds and wildlife. He shares his best shots on iNaturalist—a global nature observation community platform jointly initiated by the California Academy of Sciences and the National Geographic Society. iNaturalist has over 2 million registered users and has accumulated more than 200 million species observation records, making it one of the world's largest citizen science biodiversity databases. User-uploaded photos undergo dual verification through community members and AI image recognition to confirm species identity, and observations that reach "Research Grade" standards are synced to the Global Biodiversity Information Facility (GBIF) for use by research institutions. More importantly, iNaturalist provides a comprehensive RESTful API that allows developers to query and pull data by user, species, geographic location, and other dimensions—providing a solid technical foundation for Simon's blog integration. Simon wanted this content to not only live on third-party platforms but also be integrated into his own blog ecosystem.

From Prototype Validation to Official Launch

After completing a successful prototype validation on May 1, 2026, Simon decided to formally integrate this feature into his blog. The entire development process was based on his previously built "beats system"—a framework for aggregating external content, specifically designed to handle content synchronization from different platforms.

The beats system is an elegant design module in Simon's blog architecture. Its core concept treats the blog as the central hub of one's personal digital life, using scheduled tasks to pull user activity data from various external platforms (such as GitHub, Twitter/X, Mastodon, iNaturalist, etc.), storing it uniformly in the blog's Django database, and presenting it in a consistent format on the blog's timeline. Each data source is called a "beat" and has its own independent data-fetching logic and display template. The advantage of this architecture lies in its high modularity—adding a new content source only requires writing a new beat plugin without modifying the blog's core code. This also explains why Simon was able to complete the iNaturalist integration in a single day: he wasn't starting from scratch but adding a new module to a mature framework.

Technical Implementation Details

All Development Completed on Phone with Claude Code

The most striking aspect of this feature is that Simon completed all development entirely on his phone using Claude Code for Web. Without opening a computer, he implemented a complete blog feature extension purely through conversation with AI. The related code was submitted as PR #668 to his blog repository.

Claude Code is an AI programming agent tool released by Anthropic. It was initially launched as a command-line terminal tool where developers use natural language instructions in their local terminal to have AI directly read, edit, and create project files, execute tests, and perform Git operations. Claude Code for Web brings this capability to the browser—users can connect to GitHub repositories through the claude.ai web interface, where the AI can browse the project's complete code structure, understand inter-file dependencies, then directly generate code changes and submit them as Pull Requests. This means developers don't need to configure any local development environment, or even have a computer—they can perform complete code development work with just a browser. For scenarios like Simon's—pushing a project forward on his phone during breaks between outdoor photography sessions—this capability is revolutionary.

This proves that Claude Code for Web already has sufficient capability to free developers from the constraints of traditional desktop development environments.

Deep Integration with the Blog System

The new Sightings feature isn't a simple page embed but is deeply integrated with the blog system:

  • Homepage display: Observation records appear in the content stream on the blog's homepage
  • Date archives: Organized by date, fitting into the blog's timeline structure
  • Site search: All observation records are discoverable through site search
  • RSS support: Provides an independent RSS feed
  • Filtering and pagination: Supports date sorting and paginated browsing, currently with 208 records

The RSS (Really Simple Syndication) feed support deserves special attention. In an era where social media algorithms dominate content distribution, RSS represents a way for users to actively subscribe to content without algorithmic interference. Simon's provision of an independent RSS feed for Sightings reflects his long-advocated "POSSE" (Publish on your Own Site, Syndicate Elsewhere) philosophy—publish content on your own website first, then syndicate to other platforms. This approach ensures complete control over one's own content; even if a third-party platform shuts down or changes its policies, the content remains safely preserved on one's personal site. Pulling iNaturalist data back to the blog is a textbook implementation of this philosophy.

Backfilling a Decade of Historical Data

Simon didn't just sync new observation records—he also backfilled over ten years of iNaturalist historical data. Users can now search his blog to find historical content like lemur photos he shot in Madagascar in 2019. This kind of large-scale historical data migration technically requires handling API pagination queries, data format conversion, image reference relationship mapping, and a series of other challenges, but the beats system's modular architecture and Claude Code's code generation capabilities made this process efficient and manageable.

Page Display Effects

From the screenshots, the Sightings page design is clean and functional:

  • Each record displays the observation time and species name
  • Photos are presented in a thumbnail grid layout
  • A single observation can include multiple species (e.g., a woodpecker, western fence lizard, and osprey appearing in a single record)
  • Species names are labeled below each photo

Practical Insights for AI-Assisted Programming

This case illustrates several important trends in AI-assisted programming:

Mobile development becomes possible: By describing requirements in natural language, feature development can be completed on a phone, breaking the traditional dependency on desktop environments. In the past, even the lightest code modification required developers to sit at a computer and open an IDE or terminal. Claude Code for Web transforms the interaction from "writing code" to "describing intent," making the phone's small screen and touch input no longer barriers to development.

Dramatically accelerated idea-to-launch speed: Going from prototype validation to official launch took only one day, with AI significantly accelerating the iteration cycle for personal projects.

Understanding existing architecture and extending it: Claude Code can do more than write standalone scripts—it can understand existing code architecture (like the beats system) and perform systematic extensions on top of it. This point is particularly critical—real-world development work is rarely a greenfield project starting from zero; the vast majority of time is spent modifying and extending existing codebases. Whether an AI programming tool can understand project context and follow existing code conventions and architectural patterns is the core criterion for measuring its practical value. Simon's blog repository contains hundreds of files and complex Django model relationships, and Claude Code's ability to work correctly in such a real project demonstrates that current AI programming tools' contextual understanding has reached a practical level.

Conclusion

As a deep user of AI tools, Simon Willison continuously demonstrates the boundaries of AI-assisted programming through real projects. This practice of adding wildlife sightings to his blog using his phone and Claude Code is both a project driven by personal interest and another proof of AI programming tools' practical value in real scenarios—development is no longer constrained by time, place, or device.

Key Takeaways

  • Simon Willison developed a wildlife sightings feature for his blog entirely on his phone using Claude Code for Web
  • The feature deeply integrates iNaturalist photos into the blog's homepage, archives, search, and RSS system
  • Over ten years of historical observation data was backfilled, achieving unified personal content management
  • The entire development extended an existing beats content aggregation system, going from prototype to launch in just one day
  • The case demonstrates AI-assisted programming's practical value in lowering development barriers and accelerating personal project iteration
#Claude Code#Simon Willison#AI-assisted programming#mobile development#iNaturalist#Django#Claude Code for Web
Share:

Related articles