Back to Projects

GeoLingo

Gamified Geography · .NET Blazor · Maps & Learning

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 validation
  • GeoLingo.Api — ASP.NET Core backend, SQLite persistence, lesson delivery, gamification services
  • GeoLingo.UI — shared Blazor components, map renderers, exercise hosts
  • GeoLingo.Web — Blazor WebAssembly client
  • GeoLingo.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.

My Role

Solo developer on this project. I was responsible for:

  • Designing the skill tree, exercise model, and answer validation engine
  • Building map components and GeoJSON rendering with Blazor + JS interop
  • Implementing gamification (hearts, streaks, leagues, crowns, daily quests)
  • Creating the shared Blazor UI layer used by both web and mobile
  • Developing the ASP.NET Core API and SQLite data layer
  • Building the Blazor WebAssembly client and MAUI hybrid mobile app
  • Writing content validation, tests, and deployment scripts

Technologies Used

C# .NET 7 ASP.NET Core Blazor WebAssembly MAUI SQLite Razor GeoJSON

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:

Open http://localhost:5085

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.