// case study mobile
Neat
A native SwiftUI app for cleaning your photo library with fast swipe decisions, safe deletion queues, Live Photo and video support, duplicate detection, and a polished iOS/macOS experience.
// tl;dr — did it work?
// the itch
The problem
Photo libraries grow silently: screenshots, duplicate shots, huge videos, old memories, and near-identical bursts pile up over years. Deleting media manually in Apple Photos is slow, repetitive, and risky because users need confidence before removing anything.
// the setup
Context & constraints
Neat is a focused native app built around one interaction: review one asset at a time, keep it or queue it for deletion, then confirm the full queue at the end through Apple’s own deletion flow. The project targets both iOS and macOS from one SwiftUI codebase.
// the calls I made
Decisions & tradeoffs
Use native SwiftUI and PhotoKit instead of a cross-platform shell
Photo access, deletion, Live Photos, video playback, haptics, and macOS keyboard control all benefit from native APIs. SwiftUI keeps the interface expressive while PhotoKit provides safe access to large libraries.
Queue deletion decisions instead of deleting immediately
Every delete swipe only adds the asset to a temporary queue. The user can undo, review the queue, keep individual items, and only then hand off to Apple’s system confirmation.
Keep performance predictable for large libraries
The app keeps a lazy PHFetchResult instead of loading the full library into memory, prefetches a small moving window, and only plays motion on the front card.
Make duplicate cleanup inspectable, not automatic
Vision feature prints identify near-duplicate clusters, but the user still compares the frames, chooses what to keep, and merges only after reviewing the result.
// how it fits together
Architecture
SwiftUI app → SessionViewModel state machine → PhotoKit fetch/deletion services → cached media loading → Vision-based duplicate detection → safe Apple deletion confirmation.
// the hard parts
Key challenges
- Designing a deletion flow that feels fast without making destructive actions feel casual.
- Keeping photo, video, and Live Photo rendering smooth while only decoding a small active window.
- Making duplicate detection useful while preserving user control over what actually gets removed.
- Adapting the same product idea to touch-first iOS and keyboard/button-driven macOS layouts.
// did it ship?
Outcome
A polished native cleanup app with first-run onboarding, animated live background, swipe-based review, undo, safe deletion summary, duplicate comparison, Live Photo/video support, and a shared iOS/macOS architecture.
// hindsight, 20/20
The current version focuses on a premium local-first cleanup experience. Future improvements could include more advanced duplicate grouping controls, richer empty states, App Store analytics, and deeper accessibility testing on real devices.
Stack
- Swift
- SwiftUI
- PhotoKit
- PhotosUI
- AVFoundation
- Vision
- CoreGraphics
- Observation
- Xcode
- iOS
- macOS