About the Project Tailor is a private, on-device iOS app that turns a pet owner’s existing photo library into a meaningful life archive. It helps people rediscover important moments, organize them into chapters, edit a memory book, and export the finished story as a PDF or video. Inspiration Pets leave behind thousands of small moments—first days at home, ordinary walks, quiet afternoons, and final memories. These photographs are often scattered across years of camera-roll history, making them difficult and emotionally demanding to organize. Tailor was inspired by the idea that technology could help preserve those memories without taking ownership of them. Privacy became a core principle: photos should remain on the user’s device, and automated recognition should assist the user rather than make irreversible decisions. How We Built It Tailor is built natively for iOS using Swift and SwiftUI. It uses: PhotoKit for controlled access to the user’s photo library. Apple Vision for on-device animal detection and visual similarity matching. SwiftData for persistent local archives, scan progress, editing decisions, and export history. StoreKit 2 for the one-time album unlock. Core Graphics and PDFKit-compatible output for PDF rendering. AVFoundation for local video generation. The app follows a service-oriented architecture. Scanning, storage, purchases, and exporting are defined behind protocols, allowing production implementations to be replaced with deterministic demo services during automated testing. The memory-book editor uses a shared document model consisting of pages and elements. The editor, reader, validation system, and PDF exporter consume the same layout, typography, and crop information. This helps keep the final export consistent with what the user edited. Challenges We Faced One of the largest challenges was recognizing a specific pet—not simply detecting that an image contains a dog or cat. Tailor combines species detection, multiple reference photographs, feature-print similarity, confidence thresholds, and user confirmation. It also preserves manual decisions so a later scan cannot silently reverse the user’s choices. Large photo libraries presented another challenge. Scanning thousands of assets must remain responsive, pause safely when the app enters the background, and resume without starting over. We introduced persistent checkpoints, processed-asset identifiers, local feature indexes, duplicate detection, and incremental rescanning. Building a visual editor also required careful coordination between SwiftUI previews and PDF rendering. Text wrapping, image crops, rotations, page sizes, and template styles must behave consistently across different rendering systems. We addressed this with shared render plans, explicit text-layout snapshots, export-time document snapshots, and automated geometry tests. Privacy and failure handling influenced nearly every technical decision. Tailor must behave safely when photo access is limited or revoked, an iCloud asset is unavailable, local storage cannot open, a purchase is pending, or an export is interrupted. What We Learned We learned that privacy is more than avoiding a server—it also requires clear permissions, recoverable actions, transparent failure states, and strict separation between production data and test fixtures. We also learned that automated recognition works best as a collaborative tool. Confidence scores alone are not enough; users need understandable review groups, the ability to exclude content permanently, and confidence that their decisions will persist. Finally, we learned that “preview matches export” is an architectural requirement rather than a final visual-polish task. Sharing document models, render contracts, typography measurements, and crop geometry from the beginning makes consistency much more achievable. What’s Next The next phase is focused on real-device validation: calibrating recognition with labeled photo sets, testing large libraries, strengthening legacy archive compatibility, completing visual comparisons between the editor, reader, and exported PDF, and validating StoreKit and permission-recovery flows for release.
Built With
- avfoundation
- combine
- computer-vision
- core-graphics
- core-image
- core-ml
- ios
- local-storage
- on-device-ai
- pdf-generation
- pdfkit
- photokit
- photos
- privacy
- storekit-2
- swift
- swift-concurrency
- swiftdata
- swiftui
- uikit
- video
- vision
- xcode
- xctest
- xcuitest
Log in or sign up for Devpost to join the conversation.