TripStamp: An iOS Travel Card App Built on What It Refuses to Do
TripStamp demonstrates that a privacy-respecting, fully on-device architecture is viable for a consumer iOS app in 2025, and that deliberate feature refusal can be a stronger product differentiator than feature accumulation. The Mercator projection limitation and the 9x storage bug are concrete, reusable lessons for any mobile developer working with maps or image rendering.
TripStamp is a new iOS app that converts travel photos into shareable cards by extracting embedded location data and dominant colors. The app deliberately avoids account systems, cloud sync, and server-side processing: photos never leave the device, and the privacy policy can honestly state that no user data is ever collected because no backend exists. A footprint map stitches exported locations together using only the GPS metadata already inside selected photos, sidestepping any need for location permissions.
Version 1.2.0 adds a 3D globe rendered in real-time on-device, a feature born from a practical dead end. A flat Mercator map in portrait orientation mathematically cannot frame widely dispersed locations like Lisbon and Kyoto simultaneously, so the globe became the only viable container. The monetization model is a one-time purchase, not a subscription, matching the app's low-frequency usage pattern.
Development wasn't without stumbles. A `UIGraphicsImageRenderer` default rendered thumbnails at 3x screen scale, inflating storage 9x until a single `format.scale = 1` line and a migration script brought 51.2MB down to 12.6MB. Fixing that then revealed previews were too blurry for full-screen, leading to separate size caps for list thumbnails and detail views.
Deliberately omitting features—accounts, cloud sync, location permissions—can produce a stronger privacy story and simpler architecture than adding them and then trying to mitigate their downsides.
The 3D globe wasn't a design flourish; it was the only solution to a mathematical limitation of Mercator projection in portrait mode, which is a constraint many map-using apps will eventually hit.
A single framework default (`UIGraphicsImageRenderer` scale) caused a 9x storage multiplier, and fixing it broke a downstream assumption about preview sharpness—illustrating how tightly coupled rendering and storage decisions are on mobile.
A one-time purchase is quite a bargain, but it also raises a worry—the software's survival problem.
Indeed, it's tough to manage [facepalm] a labor of love.