GeoLingo
Project Overview
GeoLingo is a Duolingo-style geography learning app. It turns world knowledge into a gamified skill tree with 47 nodes and hundreds of interactive exercises — map tapping, shape matching, flag quizzes, landmark identification, and more.
The project uses a hybrid .NET architecture: a shared UI layer in Blazor, a WebAssembly client, a MAUI mobile app, and an ASP.NET Core API backed by SQLite. Content is versioned JSON that auto-reseeds while preserving learner progress.
Key Features
- 47 skill nodes, 364 exercises — L1 to L5 difficulty, served in smart sessions
- Interactive maps — Natural Earth GeoJSON, continent/ocean views, theme-aware styling
- Exercise types — Map tap, shape match (drag & drop), multiple choice, typing, pairs, visual ID
- Gamification — Hearts, XP, streaks, crowns (1–5), daily quests, leagues, achievements
- Practice modes — Mistake review queue, timed drills, heart recovery
- Cross-platform — Blazor WebAssembly + MAUI Blazor Hybrid with offline cache
- Landmarks & flags — Curated SVG landmarks and flag quiz generator
Architecture
The solution is split into focused projects:
GeoLingo.Shared— models, DTOs, answer validators, content validationGeoLingo.Api— ASP.NET Core backend, SQLite persistence, lesson delivery, gamification servicesGeoLingo.UI— shared Blazor components, map renderers, exercise hostsGeoLingo.Web— Blazor WebAssembly clientGeoLingo.Mobile— .NET MAUI Blazor Hybrid with offline support
Content lives in a single JSON pack that the API reseeds on startup. Map data uses GeoJSON; landmark illustrations are local SVGs.
View the Project
GeoLingo web app is served from this portfolio at /geolingo/. The backend API is configured separately.
Live path on this site:
https://oli-adams.uk/geolingo/
Quick start (one command):
dotnet run --project tools/GeoLingo.DevHost
Or run the API and Web separately:
# Terminal 1 — API
dotnet run --project src/GeoLingo.Api --launch-profile http
# Terminal 2 — Web (after first build)
dotnet run --project src/GeoLingo.Web --launch-profile http
Then open the local web client:
The web UI loads from /geolingo/, but lessons need the API deployed (see geolingo/DEPLOY-API.md). Update netlify.toml with your API URL after deploying on Render.
Repository
Synced from GeoLingo — click folder names or ▶ arrows to expand. Use Expand all / Collapse all in the toolbar.