Reports
Reference Specification
Functional walkthroughs and developer integration endpoints.
User Guide
The Reports page helps you find, filter and inspect reports on a map or in a list. Use the filters and map controls together to focus on the reports you care about, then open any report to view details or create a follow-up.
Main concepts
- Filters: narrow results by timeframe, category/topic, status (open/closed), area/place, assigned team, and free-text search. Combine filters to focus results and reduce noise.
- Map & list sync: the map and the list are linked — selecting a row highlights its marker on the map, and clicking a marker highlights the corresponding row.
- Map bounds: when the page is configured to respect map bounds (or a "Limit to map" control is enabled), the list of reports is restricted to the current map viewport. Panning or zooming the map updates the list and query; toggling the control disables this behaviour so the list shows all filtered results regardless of viewport.
- Clusters: when many reports are close together at the current zoom level, markers are grouped into a cluster showing a count. Click a cluster to zoom in or expand its contents to reveal the individual reports it represents.
- Stacks: multiple reports at the exact same coordinates are shown as a stacked marker (a small stack or offset indicator). Clicking a stacked marker lets you inspect each report in that stack.
- Map-pin column: the list may include a small map-pin column or button on each row. Clicking the map-pin recenters and zooms the map to that report's location, and may open a quick panel with the report summary.
How to go from list to a report
- 1Use filters or the map to locate reports of interest.
- 2Click a row's title, action button, or its map-pin to open the report details page.
- 3From a report detail you can view attachments, read activity, and follow any actions or updates.
Tips & behaviour
- Use clusters to quickly understand hotspots; zoom in to inspect the underlying reports.
- If many pins overlap, try toggling map layers or using search filters to reduce overlap.
- Turning on "Limit to map" is useful for local area inspections; remember to turn it off when you need a global view of all matching results.
- Export or save filter URLs when you want to share a specific filtered view with teammates.
Developer Spec
Typical components and code paths
src/app/[locale]/reports/page.tsx— main Reports page (server or client composition depends on implementation).- Map and marker components — charting or map wrapper (Leaflet/Mapbox/GoogleMaps) used for rendering markers, clusters and handling bounds events.
- Reports list component — table or list that shows rows, the map-pin column, and row actions.
API endpoints and queries
GET /reports— list reports. Support query parameters forfrom,to,category,status,area,bbox(map bounds),q(free-text),assigned,page, andpageSize.GET /reports/:publicId— fetch a single report's details.
Developer notes
- Implement clusters on the client (map) using a library's clustering plugin and/or server-side aggregation for performance-sensitive workloads.
- The
bbox(bounding box) parameter should be a conservative filter: server queries should use indexed geospatial queries to restrict results by the viewport when requested. - When the map viewport changes, debounce updates before firing requests to avoid excessive load.
- Stacks (multiple reports with identical coordinates) can be rendered by offsetting markers or by exposing a stack UI that lists the items under the same location.
- The map-pin column should not fetch additional data; it should focus the already-loaded report row and trigger a pan/zoom on the client map.
If you want this page to appear in the help index, the slug to match is reports.