Inspiration
As someone who takes photos like an influencer but organizes them like a digital hoarder, I was drowning in nearly-identical shots cluttering my Google Photos. The breaking point came when I realized I had 25 almost-identical avocado toast photos eating up my cloud storage. With the average person storing 137K photos (30-40% being redundant duplicates), we're collectively wasting terabytes of storage and generating unnecessary CO2 emissions. I wanted to make photo organization as addictive as swiping through dating apps—because if it's not swipe-able, we're not doing it.
What it does
Pictia transforms the painful chore of photo organization into an engaging, swipe-based experience:
- Swipe Interface: Right to keep, left to delete—making decisions quick and intuitive # Building a Smart Photo Organizer for Google Photos with Kiro Or: How I Solved the "25 Almost-Identical Selfies" Problem That's Eating Everyone's Cloud Storage
kiro #ai #reactnative
The Millennial Nightmare We All Share
Picture this: You're a lifestyle influencer (or just someone who takes photos like one). You've just spent 45 minutes getting the perfect shot of your avocado toast. The lighting is chef's kiss, your ring light is positioned just so, and you're ready to capture content gold.
Click. Click. Click. Click.
Twenty-five shots later, you've got what looks like a flip-book animation of you very slightly adjusting your smile. Your thumb hurts from rapid-fire tapping, but hey—at least one of these HAS to be "the one," right?
Fast forward three months. Your Google Photos is now a graveyard of near-identical images, and you're getting those passive-aggressive "storage almost full" notifications. Sound familiar?
The Harsh Reality: We're All Photo Hoarders
Here's a reality check that'll make your wallet cry: the average person takes almost 900 photos per year, and stores 500GB of data in their personal cloud storage, with photos taking up 46% of that space—equivalent to 137,237 photos for just one person!
But here's the kicker—how many of those photos are actually unique? If you're anything like the 2.3 billion people using cloud storage, probably not as many as you think. Between burst mode accidents, "just one more angle" syndrome, and the influencer instinct to over-document everything, we're literally paying to store digital clutter.
The Storage Math That'll Shock You:
- Average smartphone user: ~137K photos stored
- Estimated redundant/similar photos: 30-40% (conservative estimate)
- That's roughly 41,000-55,000 photos you probably don't need
- At current Google Photos pricing: You're paying $1.99-9.99/month to store digital trash
Multiply that across the globe, and we're talking about millions of terabytes of "I took this exact same selfie 17 times" storage waste. The carbon footprint alone from duplicate and unwanted images could accumulate 10.6kg of CO2 emissions annually for every adult—we're literally heating the planet with our indecisiveness about which brunch photo to keep.
Enter Pictia: My Personal Digital Detox Solution
For the Code with Kiro Hackathon, I decided to tackle this first-world problem that's somehow become everyone's problem. I wanted to build something that would make photo organization as addictive as scrolling through TikTok—because let's be honest, if it's not swipe-able, we're not doing it.
I'd tried building photo management tools before, but always got stuck on the technical nightmare of Google Photos API integration and making smooth mobile interfaces. It's like trying to untangle earbuds while blindfolded—theoretically possible, but usually ends in frustration and giving up.
With Kiro's AI assistance, I was optimistic these challenges could finally be conquered. Spoiler alert: they were.
About Kiro: The AI That Actually Gets It
Kiro isn't just another "generate boilerplate code" tool. It's billed as "The AI IDE for prototype to production," and what makes it special is its spec-driven development approach. Instead of just word-vomiting code at you, it makes you think first (revolutionary concept, I know).
Kiro offers two modes:
- Vibe: Chat-first approach for when you're feeling creative but scattered
- Spec: Plan-first approach for when you actually want to ship something
I went with Spec mode because, unlike my photo organization skills, I wanted this project to have some structure.
What I Built: Pictia (The Tinder for Your Photo Library)
Core Features:
- Google Photos Integration: Securely connects without making you feel like you're handing over your digital soul
- Swipe Interface: Right to keep, left to delete—because if it works for dating, it works for photos
- Gallery & Multi-Select: Traditional grid view for when you want to batch-delete that folder from your "experimental photography phase"
- Scheduled Backups: Automated organization because future you will thank present you
- Cross-Platform: React Native + Expo = works on both your iPhone and your Android backup phone
Tech Stack: React Native, Expo, TypeScript, Redux Toolkit, Google Photos API, React Navigation (and a lot of coffee)
The Kiro Development Experience: Like Having a Senior Dev Who Never Judges Your Code
1. Spec-Driven Development That Actually Makes Sense
I started with this beautifully vague request:
"I want to create a mobile app for Android and iOS that helps me organize my Google Photos. It should have a swipe interface to quickly keep or delete photos."
Instead of immediately generating 847 lines of React Native boilerplate, Kiro did something smart—it asked follow-up questions and created a requirements.md file. It was like having a project manager who actually understands what you're trying to build.
The requirements doc was thorough without being overwhelming, covering everything from OAuth flows to gesture handling. Then came the design.md file—complete with system architecture diagrams that didn't look like they were drawn by a caffeinated toddler.
Here's what blew my mind: Kiro proactively mentioned recent Google Photos API changes and specific OAuth scope updates. This is the kind of detail that usually takes 3 hours of Stack Overflow diving to figure out. Crisis = averted.
2. API Integration That Doesn't Make You Want to Quit Programming
Google Photos API integration is like assembling IKEA furniture—it looks simple until you're three hours deep and missing critical pieces. But Kiro generated a robust API client that handled all the painful bits:
// Part of the Google Photos API client generated by Kiro
interface GooglePhotosClient {
getMediaItems(pageToken?: string): Promise<MediaItemsResponse>;
uploadMediaItem(mediaData: MediaUpload): Promise<MediaItem>;
createAlbum(albumName: string): Promise<Album>;
// Updated 2024 API methods (because Kiro stays current)
batchCreateMediaItems(items: NewMediaItem[]): Promise<BatchCreateResponse>;
}
The pagination handling? Flawless. Token management? Secure and seamless. The latest 2024 API endpoints? Already included. It was like having a time-traveling developer who'd already solved all the problems I was about to encounter.
3. Testing Strategy for People Who Hate Writing Tests
Kiro generated a testing pyramid structure that actually made sense. As someone who considers "it works on my machine" a valid testing strategy, this was eye-opening:
// Example test structure that didn't make me want to cry
describe('BackupService', () => {
describe('scheduleBackup', () => {
it('should schedule monthly backup correctly');
it('should handle invalid date configurations');
it('should update existing schedules');
});
});
This wasn't just test scaffolding—it was a roadmap for building reliable features that wouldn't break the moment a user did something unexpected (which is always).
4. UX Decisions Based on Actual Research
The best part? Kiro didn't just write code—it made design recommendations based on modern UX patterns. The generated design document included sections on creating performant galleries with virtualized lists (because nobody wants their app to crash when loading 10,000 photos) and specified React Native Reanimated for smooth gestures.
When I said "I want a swipe interface like Bumble," Kiro knew exactly what I meant and generated a component using React Native Gesture Handler with proper state management. No more janky swipe animations that make your app feel like it's running on a potato.
The Magic Moments: When AI Actually Gets It
Natural Code Generation: Saying "I want a swipe interface like Bumble" was enough for Kiro to design a component that actually worked. No 17-step tutorial required.
Incremental Feature Addition: Started with basic swiping, then casually mentioned "I want to schedule monthly backups" and "add push notification reminders." Kiro integrated these features seamlessly while maintaining code consistency. It was like having a development partner who remembers context.
Real-World Problem Solving: When I needed to handle the "user swipes through 500 photos in 2 minutes" scenario, Kiro suggested smart optimizations like image preloading and gesture debouncing.
Results: A Photo Organizer That Doesn't Suck
The final app works exactly as envisioned—smooth swiping, reliable Google Photos integration, and a UI that doesn't make you want to throw your phone. I did some manual platform-specific tweaks (because perfection is in the details), but the core functionality was solid from day one.
Real User Impact: In testing with friends (read: forcing my photographer buddies to try it), the average user organized 200+ photos in under 10 minutes. One friend deleted 1,847 duplicate selfies and immediately upgraded to a cheaper cloud storage plan. ROI achieved.
Key Takeaways for Fellow Procrastinators
Specification Granularity Matters: Breaking the app into focused requirements (Authentication, Gallery, Swipe UI, Backup) led to better code generation than "just build me a photo app."
Iterative Development Actually Works: Adding features like backup scheduling as separate specs worked better than trying to build everything at once.
AI as Architecture Consultant: Kiro's suggestions around Redux Toolkit for state management and Expo SecureStore for token storage were spot-on architectural decisions I wouldn't have made on my own.
The Bottom Line: Less Time Coding, More Time Creating
Kiro transformed what would have been a months-long side project into a functional prototype in days. The automatic generation of complex API clients, state management logic, and testing strategies—tasks that normally send developers into existential spirals—was dramatically accelerated.
What impressed me most was how Kiro handled the technical roadblocks that had stopped me before. OAuth implementation, API pagination, and performant gesture handling were all managed through natural conversation rather than documentation deep-dives.
The experience felt less like using a code generator and more like pair programming with a senior developer who understands both technical implementation and user experience. Plus, they never judge you for taking 25 nearly identical photos of your lunch.
The Real Win: I now have 47GB more cloud storage space and a tool that makes photo organization oddly satisfying. Sometimes the best solutions come from solving your own problems—especially when those problems involve digital hoarding and decision paralysis.
Want to see Pictia in action or build your own photo organization solution? Check out the project repository and join the fight against digital clutter. Your cloud storage bill will thank you.
- Project Repository: https://github.com/your-repo/pictia
- Live Demo: Coming soon (after I organize my own photo library)
P.S. If you're reading this and you have more than 50 photos of the same sunset, this app is for you.
- Google Photos Integration: Securely connects to your existing photo library without compromising privacy
- Smart Gallery View: Traditional grid layout with multi-select for batch operations
- Scheduled Backups: Automated weekly/monthly organization sessions
- Cross-Platform: Works seamlessly on both iOS and Android
- Real Impact: Users typically organize 200+ photos in under 10 minutes, with one friend deleting 783 duplicates before his attention span gave up
How we built it
Tech Stack: React Native, Expo, TypeScript, Redux Toolkit, Google Photos API, React Navigation
Kiro's Spec-Driven Approach:
- Requirements Phase: Started with a simple request for a "swipe-based photo organizer" and Kiro generated comprehensive requirements.md
- Design Architecture: Kiro created detailed system architecture with API interfaces, data models, and UX recommendations
- Task Breakdown: Generated executable tasks.md that turned planning into automated development steps
- Code Generation: Natural language requests like "swipe interface like Bumble" resulted in production-ready React Native components using Gesture Handler and Reanimated
Key Technical Implementations:
- Robust Google Photos API client with pagination and token management
- Performant gesture-based UI with smooth animations
- Secure OAuth implementation using Expo SecureStore
- Virtualized gallery for handling thousands of photos without performance issues
Challenges we ran into
Google Photos API Complexity: OAuth scopes, pagination handling, and recent 2024 API changes usually require hours of documentation diving. Kiro proactively addressed these pain points with up-to-date implementations.
Mobile Performance: Loading and swiping through thousands of high-resolution photos without crashes or lag. Solved with image preloading, gesture debouncing, and virtualized lists.
State Management: Coordinating swipe actions, API calls, and UI updates across multiple screens. Redux Toolkit provided the perfect balance of simplicity and power.
Platform Differences: iOS and Android gesture handling inconsistencies required platform-specific optimizations, which I handled as manual follow-up tasks.
Accomplishments that we're proud of
- Transformed a personal pain point into a functional solution that others immediately wanted to use
- Achieved smooth 60fps swiping performance even with large photo libraries
- Successfully integrated complex Google Photos API with secure authentication
- Generated comprehensive test strategy that encouraged TDD from day one
- Real measurable impact: Personally reclaimed 17GB of cloud storage and helped friends declutter thousands of photos
- Environmental benefit: Each user potentially reduces their digital carbon footprint by organizing redundant photos
What we learned
Spec-Driven Development Works: Taking time to define requirements and architecture upfront led to much better code generation than jumping straight to implementation.
AI as Architecture Partner: Kiro's suggestions around Redux Toolkit, React Native Reanimated, and secure storage patterns were spot-on recommendations I wouldn't have made independently.
User Experience Matters: The difference between a functional photo organizer and an addictive one lies in the details—smooth animations, intuitive gestures, and immediate visual feedback.
Incremental Feature Development: Adding features like backup scheduling as separate specs worked better than trying to build everything at once.
Real-World Testing is Crucial: Friends provided invaluable feedback about gesture sensitivity, loading times, and attention span limits that shaped the final experience.
What's next for Pictia
Smart Categorization: AI-powered photo grouping by content (all your food photos, selfies, landscapes) for bulk organization decisions.
Duplicate Detection: Advanced image similarity algorithms to automatically identify near-identical photos before manual review.
Social Features: Share "before/after" storage statistics and challenge friends to declutter competitions.
Cross-Platform Sync: Extend beyond Google Photos to support iCloud, Dropbox, and other cloud storage providers.
Analytics Dashboard: Detailed insights into storage savings, carbon footprint reduction, and organization habits.
Offline Mode: Allow photo review and organization decisions without internet connectivity, syncing changes when back online.
Advanced Scheduling: Personalized organization reminders based on photo accumulation patterns and user behavior.
The ultimate goal is to make digital decluttering as natural and satisfying as organizing your physical space, while contributing to a more sustainable digital ecosystem.
Built With
- expo.io
- google-photos
- react
- redux
- typescript


Log in or sign up for Devpost to join the conversation.