- Platforms
- Data & Research
One continent, one board — a pan-African chess league played on Lichess and settled on one table.
- Role
- Founder & builder
- Year
- 2026
- Status
- Live

Hover to scroll the page
01The problem
Cross-border chess in Africa depends on travel, funding, venues and coordination that most players and clubs cannot easily access. Online play exists, but nothing gave African clubs a shared competition, a shared table and a shared record.
African players are separated by borders: competing across them usually means travel, funding and venues most clubs cannot reach. AFCL makes the continent a single league, with the research built into it.
02My role
Founder and sole engineer. I designed the competition model, built the web apps, the API and the sync worker, run the seasons, and wrote both papers on it.
03Approach
- 01A league whose matchdays are Lichess team-battle arenas: every club enters the same tournament, and club points accumulate across the season.
- 02A separate API service (Fastify, MongoDB) that owns competition structure, scoring and derived standings, with a worker that syncs results from Lichess and flags drift between the two.
- 03A connected ecosystem around the league: rated puzzle ladders that score speed and accuracy, live FIDE ratings for every rated African player, and an open statistics portal.
- 04A news pipeline that scrapes African chess federations and media twice a day into MongoDB, taking only what is new.
- 05An admin portal for seasons, clubs, recruiting and sync logs — and a season calendar generated from four answers rather than typed by hand.
- 06Research into participation and cross-border reach, published as two preprints, so evidence guides how the league grows.
04Results
Registered players
Countries with registered players
Games played in league arenas
Of arena entrants had played an earlier arena
Source: Live figures from data.afcl.africa, 23 September 2026 — 16 arenas since launch on 22 August 2026.
- Launched publicly in August 2026 after four months of closed beta with 20 users.
- In the first 28 days, fourteen countries competed and every member entry was in a multinational field (study window, 18 Aug–14 Sep).
- The research also showed what did not follow automatically: a third of registrants never played, and the most active tenth produced over half of all appearances.
05In the wild



06Decisions that shaped it
Lichess plays the chess. AFCL keeps the score.
Identity, gameplay and fair play stay on Lichess. AFCL owns the competition model — structures, scoring rules, standings and public reporting — and checks its derived scores against Lichess’s own.
A matchday is one arena everybody plays in
No fixtures and no pairings: a season is a calendar, not a draw. Nobody wins a matchday; a club’s score is the sum of what its members scored, and the table is those sums over the season.
The frontend holds no database
Every byte the site renders comes over HTTPS from the API. Sessions are httpOnly cookies set cross-origin, so CORS names each origin explicitly instead of using a wildcard.
The calendar is generated, not typed
Organisers give the opening day, playing times, length and number of matchdays; the dates are derived. Asking for weekday slots had once put the arithmetic on people, and a season finished months late.
07Stack
- Next.js
- TypeScript
- Tailwind CSS
- Framer Motion
- Lottie
- Fastify
- MongoDB
- Mongoose
- Lichess API
- chess.js
- Python
- GitHub Actions
- Render
- Vercel
Research behind it



