Place Search & Mapping for Africa

Self-improving geospatial platform built on OpenStreetMap. Ships with 54,000+ Cameroon places. Contributors validate, correct, and rank β€” data gets better with every delivery.

54,000+
Cameroon Places
51
Cities
<50ms
Search Latency
5
Microservices
360Β°
Nearby View

⚑ Quick Start

git clone https://github.com/vimex/geosplaf
cp .env.example .env
docker compose up -d
curl http://localhost:8088/health
# β†’ {"status":"ok","service":"geosplaf-api"}

curl -H "X-API-Key: your-key" \
  "http://localhost:8088/api/search/autocomplete?q=yaounde&lat=3.848&lon=11.502"

πŸ—οΈ Architecture

                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚  Nginx  β”‚  :8088 (gateway)
                    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β”‚              β”‚              β”‚
     β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”
     β”‚   API   β”‚   β”‚   Docs    β”‚  β”‚  Worker   β”‚
     β”‚  :8000  β”‚   β”‚  :8001    β”‚  β”‚  (Asynq)  β”‚
     β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
          β”‚                             β”‚
     β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”                   β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”
     β”‚PostGIS  β”‚                   β”‚  Redis  β”‚
     β”‚   :5432 β”‚                   β”‚  :6379  β”‚
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”— Key Endpoints

GET/api/search/autocomplete?q=...

Search-as-you-type across 54,000+ Cameroon places. Fuzzy matching via pg_trgm. Location-biased results.

POST/api/contributor/points

Submit a new place with GPS coordinates. Automatic duplicate detection within 500m.

POST/api/contributor/validate

The self-improving loop. Confirm, correct, or reject points from your location.

GET/api/places/{id}

Full place detail with dynamic parent hierarchy and 360Β° nearby view.

GET/api/geocode/reverse?lat=...&lon=...

GPS coordinates to nearest place. Contributor data checked first, OSM as fallback.