← Projects
MappaVita

MappaVita

A SwiftUI travel journal that turns where you've been into a map you can browse — automatic location tracking, photo GPS import, memories, and achievements.

Type
Other
Role
Solo
Status
Archived
Tech
Swift SwiftUI MapKit Core Location PhotoKit Core Data Firebase Auth Cloud Firestore Firebase Storage MVVM
Started
Apr 2025
Ended
May 2025
MappaVita's map view — recorded places pinned across North America

Overview

Travel is easy to accumulate and hard to keep. A year later the places blur together, and the photos that would remind you are buried in a camera roll sorted by date rather than by where you were. MappaVita is an iOS travel journal built around the opposite index: the map is the primary view, and everything — photos, notes, statistics — hangs off a place.

MappaVita screens — map, memories, achievements, and profile

Key features

  • Automatic location recording — background Core Location updates with a distance filter, so a new point is only written once you’ve actually moved.
  • Photo GPS import — scans the photo library for EXIF location metadata and drops those places onto the map, handling the large share of images that carry no GPS tag at all.
  • Manual places — add somewhere by hand with a photo, a date, and a note; reverse geocoding fills in the place name from the coordinates.
  • Map first — every place as an annotation, with clustering so a dense city doesn’t turn into a pile of overlapping pins.
  • Memories — photos and journal entries attached to a place, browsable as a timeline.
  • Statistics and achievements — countries visited, longest distance, most-visited places, consecutive travel days, and badges unlocked from those milestones.
  • Share and export — a single place or a rendered snapshot of your whole world map, through the iOS share sheet.

Stack

  • SwiftUI + MVVM — 45 Swift files across views, view models, models, and a small core of managers (location, photo location, auth, persistence).
  • MapKit — annotations, custom photo annotation views, and MKClusterAnnotation for density.
  • Core Data — local store for places, photos, and memories, so the app works fully offline.
  • Firebase — Auth for accounts, Firestore and Storage for sync and photo hosting.

Why archived

MappaVita was a course project, shipped with a written report and a presentation, and it stopped where the semester did. It runs, and the core loop — record, revisit, remember — works; it just never went through the App Store round of polish, permissions copy, and sync hardening that a real release needs. The idea has held up better than the code, and I still think a place-indexed journal beats a date-indexed one.

Say hi 👋