Dagbanli Language Dictionary (Gamify) — Django Web App & REST API (Wikimedia TeamChallenges Paris 2026)
# Dagbanli Dictionary — Django Web App (Wikimedia TeamChallenges Paris 2026)
A Django web companion to the Dagbanli Dictionary Flutter
app —
built for the Wikimedia TeamChallenges Paris 2026. Browses Dagbanli (Dagbani)
lexeme data live from Wikidata via SPARQL and
the Wikidata Action API, with the same word-view stats, streak/badges,
favourites, and friend-challenge features as the Flutter build, mirrored
screen-for-screen as Django pages.
## Features
- **Live Wikidata lookups** — search, category browse, and lexeme detail
all call the Wikidata SPARQL endpoint / Action API directly, with a
local cache (`Lexeme`, `LexemeSense`, `LexemeForm` models) to avoid
re-fetching on every page view.
- **Word-view stats** — every detail-page open is logged with a *source*
(search / reveal image / category tab), surfaced as a bar breakdown on
the Dashboard and Statistics pages.
- **Seen/New marker & favourites** — each session's per-word engagement
(times seen, starred/unstarred) shown right on the word detail page.
- **Streak & badges** — a 30-day star grid (small star = daily practice,
big star = a completed 7-day run) plus six milestone badges with
progress bars, seeded via `manage.py seed_badges`.
- **Friend challenges & anonymous help requests** — send a word challenge
to a friend by username, or post an anonymous "ask for help" request to
the helper queue, both via HTMX modals/buttons on the word detail and
image-reveal pages.
- **Image reveal game** — pulls a random Dagbanli word that has a
Wikimedia Commons sense image, blurred/hidden behind a tap-to-reveal
overlay.
## Tech stack
- **Django 5** (MVT) + **Django REST Framework** (`AllowAny` API)
- **Bootstrap 5** + **htmx** for progressive-enhancement interactivity
(live search, favourite toggle, challenge/help-request forms) without a
JS framework
- **SQLite** by default (swap to MariaDB via `DATABASE_URL` for
production — see below)
- **WhiteNoise** for static file serving (no separate nginx needed on
Toolforge)
- …