“A location-based onchain review system using zero‐knowledge proofs and geofence verification.”
This project enables users to prove their physical presence at a location and submit reviews tied to that geolocation, in a privacy-preserving, trust-minimized manner. Users can also switch to an “Explore” mode to see aggregated labels (residential, office, university, etc.) around them from crowdsourced data. The backend verifies proofs, stores review metadata and hashed proofs, and serves region summaries and label data for display.
We built this using:
Frontend / Mobile (iOS, SwiftUI)
Uses MapKit / Map SwiftUI APIs for map display and annotations.
A bottom action bar UI to trigger proof & submit reviews.
A second “Explore” tab that reads a JSON geographic dataset (e.g. delhi_labels.json), decodes into models, and displays map pins / polygons / overlays.
We compute a proof hash (e.g. using Keccak-256 on the proof bytes) and send that with reviews — not the full proof — to save bandwidth and protect privacy.
Backend / Server
Validates the proof hash + proof when needed, stores review records (place, rating, comment, proof hash), and stores or indexes the geo-labels.
Exposes APIs such as /postReview, /getRegionSummary, /getLabels etc.
Database / Storage / Walrus
We use Walrus (a programmable storage / decentralized blob store) to host geospatial label data, version it, and allow transparent, verifiable reads.
Onchain references (e.g. storing the final hashes, indices, or proof anchors) can be used to tie data immutably.
Crypto / ZK Proofs
You already have the proof generation pipeline (in your geofence prover) — the UI interacts with that, hashes the result, and we only send the hash.
This ensures that data integrity and location proof validity are maintained, without leaking underlying proof details.
Data pipeline
The delhi_labels.json (or future city label sets) is versioned in Walrus.
Backend reads label files, preprocesses into region cells / polygon overlays and stores them.
The Explore UI fetches relevant label slices as needed (e.g. bounding box around user) to reduce payload.
UI & UX decisions
Single “Prove & Submit” button in the bottom bar for simplicity.
Tabbed navigation: one tab for proof + review, another for exploring region data.
Safe area insets to prevent overlap with the tab bar.
Filter chips to toggle label categories (residential, office, university, others).

