// the find
hotosm/tasking-manager
Tasking Manager - The tool to team up for mapping in OpenStreetMap
The official coordination tool for Humanitarian OpenStreetMap Team's collaborative mapping efforts. An area of interest gets subdivided into grid tasks; volunteers claim, map, and submit for validation — preventing duplicate work across large disaster-response or humanitarian mapping campaigns. Just completed a major migration from Flask to FastAPI in v5.
- PostGIS is used properly throughout — spatial queries on task geometries, priority areas, and project boundaries are handled at the database layer rather than in Python, which is the right call for this kind't of geospatial workload.
- The service/DTO/model layering in the backend is consistent and readable. `backend/services/`, `backend/models/dtos/`, and `backend/models/postgis/` are cleanly separated — new contributors can find their footing without reading everything.
- Multiple independent production instances (TeachOSM, OSM Indonesia, OpenHistoricalMap, etc.) prove it's actually deployable as a self-hosted tool, not just theoretically open source.
- The FastAPI v5 migration shipped with a real changelog and tagged releases — the roadmap has actual delivery history behind it, not just aspirational items.
- The frontend is still Create React App with CRACO (`craco.config.js`, `frontend/package.json`) — CRA has been effectively abandoned since 2023. Anyone picking this up today inherits a dead build toolchain that will increasingly fight you on dependency upgrades.
- No TypeScript anywhere in the frontend. For a codebase this size with this many contributors, `.js` throughout means you're relying on runtime errors and code review to catch what the compiler would catch for free.
- The `docs-old/` directory sitting next to `docs/` is a tell — setup and deployment docs are split across two trees and it's not obvious which is current. The migration guide is in `docs-old/`, which is exactly where confused operators will look last.
- OSM OAuth is deeply wired into the authentication flow (`backend/api/system/authentication.py`, `backend/services/users/osm_service.py`). If you want to self-host for a non-OSM mapping workflow, you're doing surgery, not configuration.