Skip to main content

Map Layer

The Map Layer enables location-based mission discovery and geofence verification.

Features​

Mission Discovery​

  • Browse missions on an interactive map
  • Filter by category, reward, distance
  • Real-time updates when new missions are created
  • Clustering for dense areas

Geofence Verification​

  • Verify performer presence at mission location
  • Configurable geofence radius per mission
  • GPS accuracy tolerance built-in

Location Privacy​

Horizon prioritizes user privacy in location handling:

Before Mission Acceptance:

  • Neighborhood-level precision shown
  • Exact address hidden
  • Approximate location for browsing

After Performer Accepts:

  • Full coordinates revealed to performer only
  • Real-time tracking available (opt-in)
  • Location shared only between poster and performer

Data Minimization:

  • Location data purged after 30 days
  • No background tracking
  • Explicit consent required for live updates

API Endpoints​

Get Nearby Missions​

GET /missions/nearby?latitude=38.72&longitude=-9.14&radius=5000

Returns missions within radius (meters) of the given coordinates.

Verify Presence​

POST /missions/:id/verify-presence
{
"latitude": 38.7225,
"longitude": -9.1395,
"accuracy": 10
}

Checks if the performer is within the mission's geofence.

WebSocket Events​

Subscribe to Area​

socket.emit('subscribe:area', {
latitude: 38.72,
longitude: -9.14,
radius: 5000
});

New Mission in Area​

socket.on('mission:created', (data) => {
// { missionId, category, rewardAmount, location }
});

Mission Status Update​

socket.on('mission:updated', (data) => {
// { missionId, state, performerId }
});