A cross-platform travel-diary app for pinning, photographing, and revisiting your favorite places on an interactive map.
Lunan is a self-directed cross-platform mobile app for keeping a private travel diary. You drop pins on an interactive map, attach photos, notes, categories, and ratings, and come back to revisit the places that mattered — all stored on your device, with no account required.
I wanted a travel journal that respected privacy and worked anywhere, including places with no signal. That meant an offline-first design: everything lives on the device, nothing depends on a login or a server, and the map, photos, and notes all stay usable on the road.
I designed and built Lunan solo, from the map and data model to the UI, theming, and the backup and restore flow.
React Native and Expo provide the cross-platform app foundation. React Navigation manages screen flow, Leaflet and OpenStreetMap provide the map, AsyncStorage persists diary data, and Expo location and image-picker APIs support native device features.
The core constraint was keeping a map-based travel diary useful without an account or dependable connection. I used an offline-first data model with AsyncStorage, retained user-created content on the device, and added JSON export and import so data could be backed up or moved.
The source repository and application screenshots are available for review. The current project material does not include a formal usability score or performance benchmark, so no unsupported metric is claimed.
Lunan strengthened my experience with offline mobile state, location and media permissions, map-based interaction, and designing import and export flows around user-owned data.