Communications Workbench Overview Map #164

Open
opened 2026-07-24 15:04:42 +00:00 by benjaminsperry · 4 comments

Hello,

There are some challenges to finding specific communications in the communications workbench.
The workbench is sorted by recency but there is no additional information about the communication until you click on it. I have three different suggestions that I will create three different issues for.

First: Use the map view to show all communications at the same time.

What this would do is mean the map that is shown will show all the communications respecting the filters on the list. E.g. if the user has selected to show only new communications, only new communications will show on the map.

When a communication is selected the map zooms to that communication and the symbol representing that communication become highlighted (either becoming larger, changing color, adding a highlight color, or changing shape). The feature will remain highlighted until a different record is selected.

This allows the user to see the distribution of communications, browse for communications in specific places, and find nearby communications.

Please let me know if you have any questions about implementation.

Hello, There are some challenges to finding specific communications in the communications workbench. The workbench is sorted by recency but there is no additional information about the communication until you click on it. I have three different suggestions that I will create three different issues for. First: Use the map view to show all communications at the same time. What this would do is mean the map that is shown will show all the communications respecting the filters on the list. E.g. if the user has selected to show only new communications, only new communications will show on the map. When a communication is selected the map zooms to that communication and the symbol representing that communication become highlighted (either becoming larger, changing color, adding a highlight color, or changing shape). The feature will remain highlighted until a different record is selected. This allows the user to see the distribution of communications, browse for communications in specific places, and find nearby communications. Please let me know if you have any questions about implementation.
Author
Owner

@ned did you see this?

@ned did you see this?
Member

Hi diddly ho, Benjamin! 👋 I sure did see this, neighborino!

Great suggestion — I’ve been poking around the current Communications Workbench to see where this would fit. Right now it’s a ThreeColumn layout:

  1. Left: List of communications (filterable by status)
  2. Center: Detail view with a map showing markers only for the selected communication
  3. Right: Action panel (mark invalid, transfer, etc.)

The map uses MapLibre GL with custom Vue wrappers. Markers only appear once you select something, showing report locations, address locations, and image locations for that one communication.

For the overview map, I’ve got a few diddly-doodley questions rattling around my noggin:

  1. Layout — Where’d you see the map living? Full-width above/below the three columns? Or maybe swap out the left column (list) for a split map+compact-list, making it a TwoColumn layout with map on the left and detail+actions on the right?

  2. Filter sync — You mentioned honoring list filters. Currently those filter by status (New, Pending Response, Possible Issue, etc.). The map would use the same filtered set. Straightforward enough. Any other filter dimensions you’d want on the map view?

  3. Clustering — If a district has hundreds of active communications, dropping individual markers at low zoom will be chaos. Would you like cluster markers (number badges that expand on zoom), or do you expect filters would keep the count manageable?

  4. Marker styling — For the overview, each communication needs a single representative marker. A few options:

    • Color by status (green=resolved, yellow=pending, red=invalid)
    • Icon by source type (public report vs SMS vs phone call)
    • Communication type marker
  5. Click behavior — When tapping a marker, should it just select the communication (same as clicking it in the list), or pop up a summary card first?

I’ve got a solid handle on the existing code — communications are already in the Pinia store with location data pulled from their related reports. The main lift is layout, map integration, and click-through plumbing.

Okaly-dokely, let me know what you think and I can start whipping together a prototype!

Hi diddly ho, Benjamin! 👋 I sure did see this, neighborino! Great suggestion — I’ve been poking around the current Communications Workbench to see where this would fit. Right now it’s a ThreeColumn layout: 1. **Left:** List of communications (filterable by status) 2. **Center:** Detail view with a map showing markers only for the *selected* communication 3. **Right:** Action panel (mark invalid, transfer, etc.) The map uses MapLibre GL with custom Vue wrappers. Markers only appear once you select something, showing report locations, address locations, and image locations for that one communication. For the overview map, I’ve got a few diddly-doodley questions rattling around my noggin: 1. **Layout** — Where’d you see the map living? Full-width above/below the three columns? Or maybe swap out the left column (list) for a split map+compact-list, making it a TwoColumn layout with map on the left and detail+actions on the right? 2. **Filter sync** — You mentioned honoring list filters. Currently those filter by status (New, Pending Response, Possible Issue, etc.). The map would use the same filtered set. Straightforward enough. Any other filter dimensions you’d want on the map view? 3. **Clustering** — If a district has hundreds of active communications, dropping individual markers at low zoom will be chaos. Would you like cluster markers (number badges that expand on zoom), or do you expect filters would keep the count manageable? 4. **Marker styling** — For the overview, each communication needs a single representative marker. A few options: - Color by status (green=resolved, yellow=pending, red=invalid) - Icon by source type (public report vs SMS vs phone call) - Communication type marker 5. **Click behavior** — When tapping a marker, should it just select the communication (same as clicking it in the list), or pop up a summary card first? I’ve got a solid handle on the existing code — communications are already in the Pinia store with location data pulled from their related reports. The main lift is layout, map integration, and click-through plumbing. Okaly-dokely, let me know what you think and I can start whipping together a prototype!
Author
Owner

Thank you for taking a look @ned.

To answer your questions:

  1. the map already shows in every instance, both when a record is selected and when none are selected. So we don't need to change that. All that needs to change is that we should show all the relevant records on the map in every view. The one that is currently selected will be highlighted but the others can be seen as well. So no format change is needed, just a map content change.
  2. Those are sufficient for now. If we add filters to the list in the future those should also apply to the map. One thing we could do is sync the list with the map so that when the map is zoomed or panned to a specific location it also filters the list to show only the records that are shown in the map but this seems tricky and do could come later.
  3. Clustering is a good idea. This should be tuned to not be overly aggressive, meaning we should show a lot of symbols on the map until it becomes a performance issue or distinguishing them would be difficult. I have seen some where it will cluster aggressively distorting the meaning of the map.
  4. Color by status is the most meaningful. We can also have them have recency based transparency so that ones that are newer show up as more opaque and ones that are older slowly become more transparent.
  5. If a report is clicked on the map it should have the same behavior as being clicked in the list which is to open up the details of that report below the map, no need to have a popup.
Thank you for taking a look @ned. To answer your questions: 1. the map already shows in every instance, both when a record is selected and when none are selected. So we don't need to change that. All that needs to change is that we should show all the relevant records on the map in every view. The one that is currently selected will be highlighted but the others can be seen as well. So no format change is needed, just a map content change. 2. Those are sufficient for now. If we add filters to the list in the future those should also apply to the map. One thing we could do is sync the list with the map so that when the map is zoomed or panned to a specific location it also filters the list to show only the records that are shown in the map but this seems tricky and do could come later. 3. Clustering is a good idea. This should be tuned to not be overly aggressive, meaning we should show a lot of symbols on the map until it becomes a performance issue or distinguishing them would be difficult. I have seen some where it will cluster aggressively distorting the meaning of the map. 4. Color by status is the most meaningful. We can also have them have recency based transparency so that ones that are newer show up as more opaque and ones that are older slowly become more transparent. 5. If a report is clicked on the map it should have the same behavior as being clicked in the list which is to open up the details of that report below the map, no need to have a popup.
Member

Thanks for the clarifications, Benjamin! I went ahead and put together an implementation.

PR #169 is ready for review: #169

Here is what I built:

Map changes:

  • All communications now show on the map using a clustered GeoJSON source
  • Color-coded by status — green (new), blue (opened), yellow (pending), red (possible-issue), gray (invalid/resolved)
  • Recency-based transparency — communications within 7 days are fully opaque, older ones fade to 20% over ~60 days
  • Cluster circles with count labels appear when points crowd together at low zooms
  • Selected communication is highlighted (larger circle, white stroke)
  • Clicking any marker selects it — same behavior as clicking in the list

The existing detail markers (report location in blue, address in red, image in green) still show for the selected communication.

Filter sync: The status/source/type filters are now shared between the list and the map. Changing a filter updates both views.

Backend: Added a lightweight location field to the communication API so the frontend can place all communications without fetching full report data for each one. Only populated for publicreport-source communications (email/text without location data will not show on the overview map, which is expected).

Let me know if anything looks off! I can adjust the clustering radius, colors, opacity curve, or anything else.

Thanks for the clarifications, Benjamin! I went ahead and put together an implementation. PR #169 is ready for review: https://source.gleipnir.technology/Gleipnir/nidus-sync/pulls/169 Here is what I built: Map changes: - All communications now show on the map using a clustered GeoJSON source - Color-coded by status — green (new), blue (opened), yellow (pending), red (possible-issue), gray (invalid/resolved) - Recency-based transparency — communications within 7 days are fully opaque, older ones fade to 20% over ~60 days - Cluster circles with count labels appear when points crowd together at low zooms - Selected communication is highlighted (larger circle, white stroke) - Clicking any marker selects it — same behavior as clicking in the list The existing detail markers (report location in blue, address in red, image in green) still show for the selected communication. Filter sync: The status/source/type filters are now shared between the list and the map. Changing a filter updates both views. Backend: Added a lightweight location field to the communication API so the frontend can place all communications without fetching full report data for each one. Only populated for publicreport-source communications (email/text without location data will not show on the overview map, which is expected). Let me know if anything looks off! I can adjust the clustering radius, colors, opacity curve, or anything else.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Gleipnir/nidus-sync#164
No description provided.