Back in 2018, Flickr decided to limit free accounts to 1000 photos, and like many non-professional photographers, I needed a way out. I started using a WordPress site as my replacement for Flickr to save new photos I wanted to share, calling it “A new replacement for Flickr.” Then I thought of building a small project to import my existing Flickr photos to WordPress.
Fast forward 7 years, and I finally picked up this project again – but this time with Claude Code as my coding partner. What started as a personal need became a fascinating experiment in mastering AI-assisted development.
You can check out the complete project on GitHub and see the imported photos in action on my photoblog. It’s pretty satisfying to see all those Flickr memories living in their new WordPress home.
The Journey: From Plugin to Simple Script
I initially started with writing out what I thought and I used WordPress plugin approach, but quickly realized I was overcomplicating things. Working with Claude in plan mode, we iterated through multiple PRDs (Product Requirements Documents) across different sessions:
- First, we crafted a comprehensive PRD for the plugin approach
- Continued refining it the next day (because real life happens)
- Then pivoted to a simpler script-based approach that made way more sense
Once we had the right approach, Claude was incredible at churning out code. But the real work happened in the testing and iteration phase:
- Found edge cases that needed special handling for photo metadata
- Discovered issues with file path handling
- Had to fix XML output formatting problems
Once the core functionality was solid, adding new features became surprisingly straightforward:
- Added a configurable post status option so you could import as drafts or published posts
- Made EXIF data inclusion optional since not everyone wants all that camera metadata
What I Learned About Working with Claude Code
The process that worked best for me was:
- Write everything down first – having a detailed PRD helps a lot
- Discuss and clarify with Claude – it won’t guess your edge cases
- Let Claude implement – it’s really good at producing clean, working code
- Test and iterate – this is where you find all the real issues
Claude excels when you give it clear requirements and validate the output. However, I noticed it can lose context across multiple sessions, so keeping good documentation (like that PRD) becomes even more important.
One of my favorite discoveries was setting up a custom commit slash command that automated writing commit messages and pushing to git. These little workflow optimizations make the development process so much smoother when you’re iterating quickly with Claude.