Simon Willison Uses Claude Code on His Phone to Add Wildlife Observation Features to His Blog

Simon Willison built a wildlife observation sync feature for his blog using Claude Code on his phone.
Renowned developer Simon Willison used Claude Code's web version directly on his phone to add a "Sightings" feature to his personal blog, syncing wildlife photos from iNaturalist. Built on his blog's existing Beats content aggregation system, the feature backfilled 208 observation records spanning a decade. Going from prototype to production in just one day, it demonstrates how practical AI programming tools have become in mobile and personal project scenarios.
A Developer Builds a New Blog Feature with AI Coding Tools on a Phone
Simon Willison—renowned developer and creator of Datasette—recently shared an interesting personal project: he used the web version of Claude Code, directly on his phone, to add a "Sightings" feature to his blog that syncs wildlife photos he shares on iNaturalist to his personal site.
Simon Willison is one of the co-creators of the Django web framework, the most popular web development framework in the Python ecosystem. Django was originally created in 2003 by the development team at the Lawrence Journal-World newspaper, with Simon Willison and Adrian Holovaty as core developers. Django uses the MTV (Model-Template-View) architectural pattern and comes with built-in ORM, admin interface, form handling, and other components, known for its "batteries included" design philosophy. It powered early versions of well-known sites like Instagram, Pinterest, and Mozilla. After leaving Django core development, Simon shifted his focus to data tools and AI, though his blog system is still built on Django—which serves as the technical foundation for the Beats system and Sightings feature discussed in this article.
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. Datasette's core philosophy treats SQLite database files as a data publishing format. SQLite is the most widely deployed database engine in the world, storing entire databases as single files without requiring a separate server process. Datasette leverages this characteristic, allowing users to automatically generate a browsable web interface and JSON API simply by providing a .db file. This "data as product" approach has deeply influenced Simon's subsequent project designs, including how the Beats system in his blog handles data aggregation and presentation.
He is also one of the most active technical bloggers in the AI space, consistently documenting and reviewing the real-world performance of various large language models and AI development tools.
While this case may seem lightweight, it demonstrates the depth to which AI-assisted programming tools have penetrated actual development workflows—even covering scenarios like mobile devices and personal projects.
Project Background: From a New Camera to a Blog Feature
Simon recently picked up a Canon R6 Mark II and started extensively photographing birds and wildlife. The Canon R6 Mark II is a full-frame mirrorless camera released by Canon in late 2022, known for its excellent autofocus system and 40 frames-per-second electronic shutter burst speed. The model features deep learning-based animal eye detection AF that can identify and track the eyes of birds, cats, dogs, and other animals, making it a popular choice among wildlife photography enthusiasts.
He had been sharing his wildlife photos on iNaturalist, a global nature observation community platform. 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. After users upload wildlife or plant photos, community members and AI models assist with species identification. Its identification system combines computer vision models with manual review by community experts—the AI model is trained on convolutional neural networks and can identify over 76,000 species, but final "research-grade" identification requires at least two community members to reach consensus. The platform uses a RESTful API design, supporting queries by user, species, geographic range, time interval, and other dimensions. The returned JSON data contains rich metadata (such as taxonomic hierarchy, observation quality grade, Creative Commons license type, etc.), providing great convenience for developers building downstream applications—and this is precisely the technical foundation that enables Simon's automatic synchronization.
After completing a successful proof of concept on May 1st, he decided to formally integrate these observation records into his blog system. Once the new feature went live, visitors can browse wildlife observation records on his blog complete with photos, species names, capture times, and other information.
Technical Implementation: Beats Content Aggregation System + Claude Code
Building on an Existing Content Aggregation Architecture
Simon's blog has a content aggregation system called "Beats," designed specifically for syncing content from external platforms into his blog. The Beats design draws inspiration from the newsroom concept of a "beat reporter"—each Beat corresponds to an external content source (such as GitHub stars, Mastodon posts, bookmarks, etc.), pulling data via scheduled tasks and storing it uniformly in the blog database.
This architecture implements the reverse of the POSSE (Publish on your Own Site, Syndicate Elsewhere) philosophy—aggregating content scattered across platforms back to a personal site, ensuring long-term control and discoverability. More precisely, what Simon practices is what the IndieWeb community calls a PESOS (Publish Elsewhere, Syndicate to your Own Site) strategy. The IndieWeb movement emerged in the early 2010s as a response to social media platforms' monopoly over user content, with the core principle that individuals should own the primary copy of their published content. PESOS acknowledges that content is first created on third-party platforms but uses technical means to retrieve it to one's personal site. This approach is often more pragmatic than pure POSSE, since many platforms (like iNaturalist) provide unique community value and AI-assisted features, giving users good reason to publish content there first.
The Sightings feature was built as an extension of this system. Synced observation records appear alongside other content in:
- The blog homepage
- Date archive pages
- Site search results
Completing All Development on a Phone with Claude Code
The most noteworthy detail: the entire feature was developed on a phone using Claude Code for web.
Claude Code is an AI programming assistant product from Anthropic, initially released as a command-line tool before launching a web version (Claude Code for web). Unlike traditional code completion tools (such as GitHub Copilot's inline suggestion mode), Claude Code can understand the context of an entire code repository and execute the complete development workflow from requirements analysis, code writing, and test generation to committing Git changes.
To understand this tool's positioning, it helps to know the technical evolution of AI programming tools. The first generation, represented by GitHub Copilot (2021), primarily provided line-level or function-level code completion based on OpenAI's Codex model. Second-generation tools like Cursor and Windsurf—AI-native IDEs—began supporting multi-file editing and project-level context understanding. The third generation, represented by Claude Code, Devin, OpenAI Codex agent, and others, operates in agent mode—capable of autonomously planning tasks, reading and writing file systems, executing terminal commands, running tests, and iteratively fixing issues based on results. Claude Code was initially released in February 2025 as a research preview and iterated rapidly. Its web version allows AI to directly operate on connected GitHub repositories, creating branches, committing code, and opening Pull Requests, making "development without a local environment" possible.
The web version's release means developers don't need a local development environment—they only need a browser to drive AI through complex programming tasks. This is precisely why Simon was able to complete the entire feature development on his phone.
Simon publicly shared the complete code changes and prompts used in GitHub PR #668. This practice itself carries significant methodological value. A Pull Request is a collaborative code review mechanism introduced by GitHub—developers complete changes on an independent branch, then request to merge those changes into the main branch via a PR, where other team members can review code line-by-line and suggest modifications. In the context of AI-assisted programming, publishing prompts and generated code allows other developers to evaluate the AI's actual output quality, understand prompt engineering techniques, and judge which types of tasks are suitable for delegating to AI. This transparency is crucial for building the community's calibrated understanding of AI programming tools—it provides evidence from real projects rather than carefully curated demo cases.
This means the entire workflow—from requirements description, code generation, to submitting the PR—was completed on a mobile device through AI assistance. For a feature involving data synchronization, page rendering, and search integration, this demonstrates that current AI programming tools have reached a remarkably high level of practical utility.
Backfilling a Decade of iNaturalist Observation Data
Simon didn't just implement incremental sync—he also backfilled over a decade of iNaturalist observation records. This means photos of lemurs he took in Madagascar in 2019 can now be found through the blog's search function. The system currently contains 208 observation records, covering species including Acorn Woodpeckers, Western Fence Lizards, Ospreys, White-crowned Sparrows, and more.
AI-Assisted Programming Is Becoming Routine
The significance of this case isn't in its technical complexity, but in the trend it represents:
1. De-desktopification of development scenarios: Traditionally, writing and committing code required sitting at a computer—developers relied on local IDEs, terminals, Git clients, and other desktop toolchains. Claude Code's web version allows developers to do meaningful programming work on any device; phone-based programming is no longer just an emergency fallback. This aligns with the trend of cloud development environments (such as GitHub Codespaces and Gitpod). GitHub Codespaces runs a complete development environment in a cloud VM based on VS Code's remote development architecture; Gitpod employs a container-based instant development environment approach. These tools solve the "works on my machine" environment consistency problem but still require developers to possess traditional code writing abilities and IDE operation skills. AI's addition further reduces dependence on complex interaction interfaces—when AI can understand natural language instructions and autonomously complete code writing, the interaction interface between developer and code simplifies from an IDE to a chat box. Operating a traditional IDE on a phone's small screen is nearly impossible, but typing a few natural language prompts presents no obstacle whatsoever. This is what truly opens up mobile programming possibilities.
2. AI tools integrating into personal development workflows: As a deep participant in the AI space, Simon has adopted AI programming tools as his default choice for everyday development, not just for demos or experiments. This represents a shift from "trying it out" to "relying on it"—when developers find that AI tools produce sufficiently reliable output in real projects, they naturally become part of the workflow.
3. Dramatically compressed prototype-to-production cycles: From prototype on May 1st to official launch on May 2nd, AI-assisted programming significantly shortened the time from idea to implementation. In traditional development workflows, even for experienced developers, a feature involving API integration, data model design, template rendering, and search integration would typically require several days of development. AI tools handle boilerplate code, API call logic, test writing, and other repetitive work automatically, allowing developers to focus their energy on architectural decisions and product design.
Conclusion
Simon Willison's small project is a microcosm of AI-assisted programming applied in real-world scenarios. When an experienced developer chooses to build a blog feature using Claude Code on their phone—and the result is good enough to deploy directly to production—that itself validates the maturity of current AI programming tools. As these tools continue to evolve, developers' ways of working are undergoing substantive change—programming is gradually transforming from a professional activity requiring specific environments and toolchains into creative work that can be driven by natural language, anytime and anywhere.
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.