Back to Portfolio
Case Study

Lunan

A cross-platform travel-diary app for pinning, photographing, and revisiting your favorite places on an interactive map.

Solo Developer  ·  Cross-Platform Mobile App  ·  iOS & Android

React Native Expo SDK 56 React Navigation Leaflet / OpenStreetMap AsyncStorage expo-location expo-image-picker
Offline-firstWorks with no connection
1 codebaseiOS & Android from Expo
On-deviceLocal storage, no account
Map-basedInteractive OpenStreetMap

1. Project Overview

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.

2. Problem and Objectives

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.

3. My Role and Contributions

I designed and built Lunan solo, from the map and data model to the UI, theming, and the backup and restore flow.

4. Technology Stack

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.

5. Key Features

6. Technical Implementation

7. Challenges and Solutions

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.

8. Testing and Results

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.

9. What I Learned

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.