Cross-platform mobile and web client for the GeoGami location-based game platform.
GeoGami is a location-based game built by the Spatial Intelligence Lab (SIL) at the Institute for Geoinformatics, University of MΓΌnster. The app lets users play and create map-based games in the real world or in a virtual environment, with the goal of training and studying spatial cognition.
This repository contains the front-end client β an Angular + Ionic application that runs as a web app, an iOS app, and an Android app from a single codebase.
Looking for the other components?
- Backend API:
../geogami-server- Analytics dashboard:
../geogami-dashboard- Virtual environment:
../geogami-virtual-environment-dev
- Tech stack
- Prerequisites
- Getting started
- Configuration
- Available scripts
- Project structure
- Building for mobile (iOS / Android)
- Internationalisation
- Class QR codes (instructor sharing)
- Contributing
- Map Features and Task Types in GeoGami
- Contact
- License
| Area | Technology |
|---|---|
| Framework | Angular 12, Ionic 6 |
| Native shell | Capacitor 3 (iOS, Android) |
| Maps | Leaflet, Mapbox GL |
| State / forms | Reactive forms, RxJS |
| UI components | Angular Material, Ionic Components |
| i18n | @ngx-translate/core |
| HTTP | Angular HttpClient (JWT bearer) |
- Node.js 14.x β 16.x (Angular 12 isn't compatible with newer Node versions)
- npm 6+ or yarn 1.x
- Ionic CLI:
npm i -g @ionic/cli - For mobile builds:
- iOS: macOS, Xcode 14+, CocoaPods
- Android: Android Studio with SDK 33+
git clone <repo-url>
cd geogami-ui
npm install
ionic serve # opens http://localhost:8100The dev server proxies API calls to the URL configured in src/environments/environment.ts.
Per-environment configuration lives in src/environments/:
| File | Used when |
|---|---|
environment.ts |
ionic serve, dev builds |
environment.prod.ts |
ionic build --prod |
Typical values:
export const environment = {
production: false,
apiURL: 'http://localhost:3000', // GeoGami server
dashboardURL: 'http://localhost:3838', // Shiny dashboard
mapboxAccessToken: '<your-mapbox-token>',// Required for Mapbox GL map rendering
// Virtual environment (only required for virtual-world games)
uiURL: 'http://localhost:8100', // UI origin used by the embedded WebGL view
webglURL: 'http://localhost:50544' // Unity WebGL build served locally
};| Command | Purpose |
|---|---|
npm start / ionic serve |
Run dev server with live reload |
npm run build |
Build the web bundle into www/ |
npm run build-browser |
Production browser build |
npm test |
Run Karma unit tests |
npm run lint |
TSLint check |
ionic capacitor sync ios |
Copy www/ into the iOS Xcode project |
ionic capacitor sync android |
Copy www/ into the Android Studio project |
src/app/
βββ pages/
β βββ play-game/ # Real-world & virtual game playback
β βββ create-game/ # Author new games (real + VR)
β βββ edit-game/ # Modify existing games
β βββ analyze-game/ # Track listing + dashboard launcher
β βββ multiplayer/ # Real-time multiplayer flows
β βββ user/ # Login, register, profile, verify-email,
β β # reset-password, user-management (admin)
β βββ showroom/ # Map / task / world demos
β βββ handbook/ # In-app help
βββ services/ # AuthService, UtilService, β¦
βββ models/ # TypeScript interfaces and shared models
βββ interceptors/ # JWT refresh handling
ionic capacitor build ios # opens the Xcode project
ionic capacitor build android # opens Android StudioThe ios/ and android/ folders are tracked in this repo so push notifications, plugins, and signing settings stay reproducible.
Translation files live at src/assets/i18n/<locale>.json. Currently shipped: en, de, fr, pt, ar. Add a new key under the appropriate namespace; the UI uses Angular | translate pipes everywhere, including dynamic strings such as toasts.
A logged-in user viewing a single-player game can open a Class QR code (the QR button in the game-detail header). The QR/link encodes the game plus the sharing user's id and display name, so it doubles as a classroom hand-out:
- A student who scans it (phone camera or the in-app scanner) lands on the game with it pre-selected.
- Data-sharing consent is forced on and locked, with a note naming the instructor β the play must be shared for the teacher to receive it.
- When the session ends, the track is saved with that user as its instructor, so the play appears in the instructor's dashboard rather than the game creator's.
Multiplayer games are unchanged β they keep their existing room-based QR (limited, fixed participant count). Normal solo plays (no instructor in the link) still attribute to the game creator as before. Who can see which track, and per-track sharing, are handled server-side β see the server README's "Class sharing (instructor QR) & track access" section.
- Branch from
dev(PRs targetmaster), open a PR, and reference an issue when applicable. - Please run
npm run lintand the unit tests before pushing. - Bug reports and feature requests: https://github.com/geogami-team/geogami/issues.
The sections below describe the gameplay primitives the UI exposes β useful both for new players and for contributors implementing changes to game authoring or playback.
GeoGami groups task types into Navigation tasks and Thematic tasks, plus a standalone Information module that lets game creators give the player hints, rules, or context before play.
Navigation tasks direct the player to a new location.
| Navigation to flag | Navigation with arrow | Navigation via text | Navigation via photo |
|---|
Thematic tasks are location-specific tasks that probe specific spatial skills.
| Self-location | Object location | Direction determination | Free task |
|---|
Free tasks let game creators freely combine question and answer types to build quizzes or custom thematic challenges.
Supported question types
| Type | Description |
|---|---|
TEXT |
Plain text question |
MAP_FEATURE |
Question referencing a map feature |
MAP_FEATURE_FREE |
Free-form map-feature question |
MAP_FEATURE_PHOTO |
Map-feature question with a photo |
MAP_TARGET |
Question targeting a specific map location |
MAP_DIRECTION |
Question about a map direction |
MAP_DIRECTION_MARKER |
Direction question shown via a map marker |
MAP_DIRECTION_PHOTO |
Direction question shown via a photo |
NAV_INSTRUCTION |
Navigation instruction prompt |
NAV_INSTRUCTION_PHOTO |
Navigation instruction shown via a photo |
PHOTO |
Photo-based question |
INFO |
Informational prompt (no question) |
Supported answer types
| Type | Description |
|---|---|
POSITION |
Player provides their current position |
MAP_POINT |
Player picks a point on the map |
DIRECTION |
Player indicates a direction |
MAP_DIRECTION |
Player indicates a direction on the map |
PHOTO |
Player submits a photo |
DRAW |
Player draws on the map |
MULTIPLE_CHOICE |
Multiple-choice answer |
MULTIPLE_CHOICE_TEXT |
Multiple-choice with text options |
TEXT |
Free-text answer |
NUMBER |
Numeric answer |
INFO |
Informational acknowledgement (no answer) |
Each task can be configured with a combination of map settings and marker / overlay settings.
| Setting | Options |
|---|---|
Zoom |
manual Β· zoom to task Β· zoom to game Β· off |
Map Section |
movable Β· automatically-centered Β· static |
Map Rotation |
manual Β· automatic Β· automatic on-demand Β· fixed to north |
Map Type |
standard Β· map selection Β· satellite Β· satellite on-demand Β· satellite swipe Β· 3D Β· 3D on-demand Β· blank Β· blank + satellite swipe |
Reduced Information |
strips non-essential map details to test orientation in minimal-information settings |
Switch Layer (virtual worlds) |
toggles between map material and satellite layer inside the Unity virtual environment |
| Setting | What it does | Modes |
|---|---|---|
Location Marker |
Shows the player's current position | on Β· on-demand Β· at start of task Β· off |
View Direction Marker |
Shows the device's current heading | on Β· on-demand Β· at start of task Β· off |
Track Recording |
Records the player's route | for the entire game Β· for the current task Β· also for the next task |
Buffer |
Reveals a circular section of the map around the player | configurable diameter, 20β100 m |
Highlight Landmarks |
Highlights landmarks near the destination (with optional explicit landmarkFeatures list) |
on Β· off |
Highlight Street Section |
Highlights the street segment at the destination | on Β· off |
GeoGami games can be played in two environments:
- Real world β outdoor play using the device's GPS and compass.
- Virtual world β indoor / remote play in a Unity-based 3D environment.
Both environments support single-player and multiplayer modes, with the same task and map-feature catalogue.
Spatial Intelligence Lab (SIL) β Institute for Geoinformatics, University of MΓΌnster
| Address | HeisenbergstraΓe 2, 48149 MΓΌnster |
| geogami(at)uni-muenster.de | |
| Website | https://geogami.uni-muenster.de |
| Team | https://geogami.uni-muenster.de/kontakt.html#team |
GeoGami is published under the MIT License. Β© 2026 β GeoGami. See the root project for full attribution and citation information.