A fully offline mobile app for learning flags, capitals, countries and map positions through daily challenges, adaptive training and an interactive geography atlas.
Geopoto is built for people who want geographic knowledge to stick. It keeps the full learning experience offline, including generated country data, maps, flags, localized names and capitals.
The app combines quick practice sessions with a daily habit loop. Users can train on country names, capitals, flags and map positions, browse a learning encyclopedia, inspect an interactive world map and come back each day for a fresh challenge.
- Offline geography data: learn from 197 countries and flags without relying on a network connection.
- Daily Challenge: one shared geography puzzle per day with streak tracking and optional local reminders.
- Adaptive training: practice history stays on device and helps prioritize questions the user misses more often.
- Custom quiz sessions: choose regions, question formats, answer formats, flag answer difficulty, question limits and infinite mode.
- Interactive map explorer: pan, zoom, select countries and connect names with real map positions.
- Learning encyclopedia: browse countries, capitals and flags, with search and flag color filters.
- Localized experience: app UI and geographic names support English, French, German, Spanish, Italian and Portuguese.
- Mobile native feel: haptics, local notifications, dark mode, keyboard-aware layouts and smooth map rendering.
- Expo SDK 55
- React Native 0.83
- Expo Router
- TypeScript
- React Native Skia for map rendering
- MMKV and SQLite for local storage
- i18next for localization
- pnpm workspaces and Turborepo
.
├── apps
│ └── mobile # Expo React Native app
├── packages
│ └── geo-data # Generated country, flag and map data
├── stores
│ ├── content # Localized store listing copy
│ ├── icons # App and store icons
│ ├── images # Marketing images
│ └── screenshots # Store screenshots
└── tooling # Shared tooling packages
- Node.js 22
- pnpm 10.26.1
- Xcode for iOS development
- Android Studio for Android development
For native setup details, follow the Expo environment guide for custom development builds.
Install dependencies from the repository root:
pnpm installStart the Expo dev server:
pnpm startUse the local or LAN variants when needed:
pnpm start:local
pnpm start:lanGeopoto uses expo-dev-client, so the first run on a simulator or device needs a native build.
Run iOS:
pnpm -C apps/mobile build:iosRun Android:
pnpm -C apps/mobile build:androidAfter the first build, everyday JavaScript and TypeScript changes can usually use the dev server:
pnpm startRebuild the native app after changing native dependencies, Expo config, notification settings, app icons or build properties.
Run the full project check:
pnpm checkRun individual checks:
pnpm lint
pnpm format
pnpm typecheck
pnpm testApply formatting fixes:
pnpm format:fixLocalized App Store and Google Play copy lives in stores/content, with marketing assets in stores/icons, stores/images and stores/screenshots.



