Nairobi Maps — Admin

User Activity

Analytics

Accounts by role
Accounts by status
Sign-ups & total accounts (12 months)
Downloads by content type
Survey Plan (FR) pipeline
Subscriptions expiring (next 90 days)

Who's online

Signed-in users active in the last 30 minutes, with their role and lifetime downloaded-elements count. Refreshes automatically every 15 seconds while this page is open.

Loading…
Site status
Loading…

Notification health

Whether approval, rejection and suspension emails actually left the server. A missing template or a mail failure used to pass silently — the admin saw “User approved” either way.

Loading…

Users awaiting admin approval

Loading…
Loading…

Latest 8 signups

Loading…

User profiles — photo directory

Every account with the passport photo supplied at signup — for putting a face to a name when reviewing an application. Read-only: use Manage on a card to jump to that user's row in Users & Approvals, where all the actions live.

Loading…

Account deletion requests

Erasure is a right under the Data Protection Act, 2019, so these are held here as a worklist rather than only as a notification. Deleting an account is permanent and cascades across payments, requests and issues — confirm the person means it before you do.

Loading…

Pending zone map purchases

Filed when a Platinum member clicks "Buy Zone Map" on a DC Policy zone. Billed per zone, like Survey Plans are billed per document. Confirm the Paybill payment, then click OK to grant a one-time unlock for that ONE zone — an invoice (NM-ZM-…) is written to their account at the same moment. Dismiss if it is a duplicate or the member changed their mind.

Loading…

Ward map requests

Two kinds. A purchase is filed when a member clicks "Buy Ward Map" on a ward that has maps: confirm the Paybill payment, then OK to unlock that ward on their account — an invoice (NM-WM-…) is written at the same moment. A sourcing request is filed when nothing is on file for the ward; it is fulfilled by uploading a map from that ward's own drawer on the map, which closes it and notifies the member with the price. Here it can only be dismissed.

Loading…

Survey Plan sourcing requests

Filed when a member clicks "Request Plan" on a parcel that has no Survey Plan on file at all — no charge is involved, so nothing here is a sale. To fulfil one, open that parcel on the map and upload the plan from its drawer: that files the document, binds it to the parcel, closes the request and notifies whoever asked, all in one step. Use Decline when the plan cannot be sourced (the requester is told), or Dismiss to close a duplicate silently.

Loading…

Pending Survey Plan (FR) requests

Filed automatically the moment a Gold/Platinum member clicks "Buy Survey @ NKsh" on a parcel. Confirm the payment (they've been asked to send proof on WhatsApp), then click OK to grant a one-time voucher for that ONE document — or Dismiss if it's a duplicate or they changed their mind.

Loading…

Reported issues — reply, resolve, archive

Loading…

🔒 Parcels Cadastre download paywall

Platinum members must pay an extra one-time top-up before they can download the full Parcels Cadastre dataset. Confirm payment, then use the Grant/Revoke Parcels button on a user's row below.

🔒 DC Policy 2026 download paywall

Platinum members must pay an extra one-time top-up before they can download the DC Policy 2026 dataset. Confirm payment, then use the Grant/Revoke DC Policy button on a user's row below.

Survey Plan (FR) download paywall

Gold and Platinum members are billed per document, not a one-time account unlock — each parcel's Survey Plan (FR) is its own Ksh charge, spent the moment they view/download that one document. Confirm payment for a specific request in the queue below, then click OK to grant just that document.

Ward map paywall

Any signed-in member can buy a ward's maps — every file filed for that ward — for one Ksh charge, unlocked on their account once you confirm payment in the queue under Requests. Unlike Survey Plans this is not a one-time view: a ward has several files, and a voucher spent on the JPG would leave the PDF locked. Switch the paywall off and ward maps are included for everyone signed in.

Survey Plan (FR) sales & invoices

Every per-document charge that has been decided. An invoice is written automatically when you grant a request, and appears on the buyer's account page — use Invoice here to view or print a copy for them. Granted means paid but not yet viewed; consumed means they have since opened it.

Loading…

Revenue & renewals

Loading…

Top-up reconciliation

Parcels, DC Policy and Survey Plan (FR) unlocks are granted by hand after payment is confirmed off-platform. This is the ledger.

Loading…

Upload a new layer

Drag & drop a .geojson, .csv or .kml file here, or click to browse.
GeoJSON (FeatureCollection, EPSG:4326) up to ~80 MB, CSV with lat/lng columns, or KML/KMZ (will be converted to GeoJSON on the server). For KML, ensure it uses WGS84 coordinates and contains valid geometry.

Optional. Shown when a visitor switches the map to Kiswahili. Leave blank and the English name is used in both languages.

Custom layers — manage map themes

Loading…

Files

Survey Plans (RIMS) — assets/data/rims

Upload a Registry Index Map PDF for a survey block. It's matched to survey_blocks.geojson by block number and shows up in the map's popup/drawer for that block automatically — no separate publish step. A block can have multiple sheets (e.g. Block 66 has 18) — uploading another sheet under the same block number and label no longer errors, it's saved alongside the others automatically. Use Delete to remove an outdated or wrong sheet; to update one, delete it and re-upload the corrected PDF.

Loading…

Parcel Survey Plans (FR) — assets/data/FRs

Upload a Survey Plan (FR / title deed reference) document for a parcel. It's matched to parcels.geojson by FR number and shows up in the map's parcel popup automatically — no separate publish step. Viewing/downloading requires a Gold or Platinum plan plus the Survey Plan (FR) top-up above. Each FR number can have only one Survey Plan — use Delete to remove it, then re-upload to replace.

⬆ Bulk upload Survey Plans (FR)

Select up to 100 JPGs at once. Each file's FR number is taken from its own filename, using a hyphen or an underscore where the FR number has a slash — 191-1.jpg uploads as FR 191/1, 33_142.jpg as 33/142, 1-78A.jpg as 1/78A. Whichever you use, the file is stored under the underscored name. Files are sent one at a time, so a bad file never blocks the rest and you get a per-file result below. Anything named differently is skipped — use the single upload above for those.
Each file must be under 10 MB. That is the live server’s real post_max_size ceiling, not this app’s preference — larger uploads are discarded before PHP sees them. Large-format plans scanned at high dpi run well past that — a 1:1000 sheet at 600 dpi is 70+ megapixels — and oversized files are rejected by the host's firewall before they reach us, which shows up as an unhelpful HTTP 403. Re-save those at a lower JPEG quality, or at about half their pixel dimensions, before uploading.

An upload is rejected when no parcel in the cadastre carries that FR number — a survey plan can only be opened from a parcel popup, so one nothing links to would be invisible. To file such a plan, update the parcel data first, then re-upload.

Loading…

Old Nairobi Maps (1880–1958) — assets/data/old_maps

Upload a historical Nairobi map image (JPG). It appears in the map's "Old Nairobi Maps" panel automatically — no separate publish step.

Loading…

City Boundary Documents — assets/data/nairobi_maps

JPG, PNG or PDF reference documents/imagery. Each upload/delete here updates assets/data/cityBoundary.docs.json (a file the server creates and owns itself, so it stays writable regardless of how cityBoundary.geojson was originally uploaded) — the map merges it into the City Boundary feature's properties for signed-in visitors, appearing as regular attributes in the popup (within its 4-property limit) and in full in the side drawer, as clickable links. Same concept as Survey Plans (RIMS) above, but bound to the whole layer rather than per-feature. Each click counts against a daily download quota (Public 1, Silver 2, Gold 3, Platinum 10 — admins unlimited); this list itself (View/Download here) is not quota-limited.

Loading…

Video Guide tutorials — video.html

Each row is one card on the public Video Guide page. Cards are fully yours to define — add as many as you like, name and describe each one, then upload an MP4 to it. A card with no upload yet shows the bundled default video so it never looks broken.

Loading…

Release notes

The app asks users to hard-refresh but never says what changed. Publish a short note here and it becomes a reason rather than an instruction.

Loading…

🔑 Generate a Data API key

Grants programmatic, key-authenticated access to every published map layer — the built-in set and any active custom upload — via data_api.php and the WFS endpoint below. No subscriber account needed. Scope which layers a key can see and its daily request budget. The raw key is shown once, right after creation — copy it immediately.

WFS endpoint — read the live map from QGIS
In QGIS: Layer ▸ Add Layer ▸ Add WFS Layer ▸ New, then paste the URL with ?key= and an active key appended. Any key below works, and a key scoped to three layers offers only those three feature types.
Read-only — editing is not exposed over WFS. Budget generously: QGIS spends a request on every pan and zoom, not just on connecting.

Issued API keys

Only the first twelve characters of each key are kept. The server stores a hash, not the key, so the full value cannot be shown again after the moment it was created — if it is lost, revoke it and issue a new one.

Loading…

Admin action history

Every consequential admin action (approvals, role/expiry changes, password resets, deletions, paywall config, Survey Plan (FR) request decisions, API key issuance) — most recent first.

Loading…

Searches that found nothing

What users looked for and did not find — the clearest signal of which data to add next.

Loading…

My notifications

Messages addressed to your own admin account — deletion requests, Survey Plan approvals and similar. The Unread — all users figure above counts every account's unread messages, not just yours, so the two will not match.

Loading…