A privacy-first personal location notebook for Android and iOS. Save places, restaurants, viewpoints, and hidden gems — all stored locally on your device.
Google Maps “Saved Places” is cluttered, hard to search, and forces you into their ecosystem. GeoVault lets you save the context around a place — what to order, what to avoid, the best time to visit — and find it again years later with full-text search.
| Layer | Technology |
|---|---|
| Framework | React Native (Expo SDK 54, development builds) |
| Database | expo-sqlite + FTS5 |
| Routing | expo-router |
| Styling | NativeWind v4 (Tailwind CSS) |
| State | Zustand |
| Auth | @react-native-google-signin/google-signin |
| Background | expo-background-fetch + expo-task-manager |
| Language | TypeScript (strict, no any types) |
git clone <repo-url>
cd GeoVault
npm install
# Generate native projects
npx expo prebuild
# Android (requires Android Studio)
npx expo run:android
# iOS (requires Xcode)
npx expo run:ios
Note: This app uses native modules (Google Sign-In, Background Fetch) and requires development builds. It does not work with Expo Go.
node node_modules/typescript/bin/tsc --noEmit
app/ # Screens (file-based routing)
(tabs)/ # Tab navigator — Places, Search, Settings
place/ # Place CRUD — detail, new, edit
src/
db/ # SQLite layer — database, migrations, repositories, seed
services/ # URL parser, export, Google Drive, backup, auto-backup
stores/ # Zustand state (places, search, settings, backup)
components/ # Reusable UI components
constants/ # Categories, tags, theme
types/ # TypeScript interfaces
utils/ # UUID, date helpers
Each saved place contains:
| Field | Description |
|---|---|
| name | Place name |
| location | Location string (city, area, etc.) |
| coordinates | Latitude/longitude |
| category | One of 9 categories |
| tags | Status tags + custom tags |
| notes | Must Order, Avoid, General — three separate fields |
| extraFields | Category-specific fields (entry fee, trek time, etc.) |
| sourceUrl | Original maps link |
| timestamps | Created, updated, last visited |
Data is stored locally in SQLite with a FTS5 virtual table for instant full-text search. Queries are paginated (30 per page) with infinite scroll.
Backup uses Google Drive’s appDataFolder — a hidden, app-specific storage area. The user’s regular Drive files are never accessed.
drive.appdata (non-sensitive, no full Drive access)Requires a Google Cloud project with OAuth credentials. See CLAUDE.md for detailed setup instructions.
GeoVault has no backend server. Zero data leaves your device unless you explicitly export or back up to your own Google Drive. No analytics, no tracking.
All rights reserved.