A lightweight, offline-first Android notes application built with React Native, Expo Router, and SQLite. Create, edit, and manage notes enriched with photos and geolocation (GPS coordinates resolved to a human-readable address).
- Features
- Demo
- Releases & Downloads
- Requirements
- Tech Stack
- Project Structure
- Architecture Overview
- Quick Start
- Development
- Testing
- Building (APK)
- Runtime Permissions
- Create notes with title, plain body text, and an optional photo.
- Automatic geotagging (latitude/longitude) with reverse-geocoded address.
- List, view, edit, and delete notes.
- Local persistence via SQLite; works offline.
- Minimal, clean UI styled with Tailwind-like utilities (NativeWind).
Prebuilt artifacts are published on the GitHub Releases page. For convenience, a signed APK is attached to each tagged release so you can install the app on Android without the Play Store.
- Node.js ≥ 20
- npm
- Android device with Expo Go or an Android emulator.
- React Native
- Expo
- Expo Router
- Expo SQLite
- Expo Location
- Expo ImagePicker
- NativeWind (Tailwind‑style utilities)
- Vitest
app/
+not-found.tsx
index.tsx # Notes list (home)
create.tsx # Create note
note/
[id].tsx # Note details
[id]/
edit.tsx # Edit note
components/
... # Reusable UI (e.g., Note card, buttons)
lib/
utils/ # Shared helpers (image, location, formatting)
db.ts # SQLite persistence & queries
mappers.ts # DB mappers
pins.ts # Pinned notes Async Storage
- App shell & navigation: Expo Router (file‑system based routing)
- Data layer: SQLite (Expo SDK) with a thin repository in
lib/db.ts - Device capabilities: Camera (image capture) & Media Library (image pick), Location (GPS + reverse geocoding)
- Presentation: Functional RN components, NativeWind utility classes
- Testing: Unit tests with Vitest
- Clone
git clone https://github.com/begiedz/geo-notes.git
cd geo-notes- Install deps
npm install- Start the dev server (Metro)
npm run startScan the QR code with Expo Go (Android) or press "a" to launch an Android emulator.
Common commands:
Start dev server:
npm run startLaunch directly to Android emulator:
npx expo start --androidRun unit tests:
npm run testThis project uses EAS Build to produce an installable APK for quick testing and releases.
Produces an APK suitable for direct install on devices:
npx eas build -p android --profile previewThe resulting APK is ideal for testers and will be attached to GitHub Releases for convenience.
The app requests the following at runtime:
- Camera / Media Library – to capture or pick a photo for a note.
- Location – to attach GPS coordinates and resolve an address.
If a permission is denied, the corresponding feature will be degraded (e.g., notes without photos or location).

