← All work

Large public security organization

Security leaders trace each alert to its outcome, seeing only approved records

We built a geospatial system that links alerts, incidents and responses from many teams on one map. One central access layer decides who sees what, and a record reaches maps and charts only after approval up the chain.

Government, Legal & DefenseGeospatial situational awareness platformBuilt from zero

Security leaders trace each alert to its outcome, seeing only approved records

The challenge

Alert, incident and response records came from many teams with uneven verification, nothing tied an alert to its outcome, and each user could see only what their role allowed.

What we did

We built access and approval once, in a central layer every module inherits, linked alerts to incidents and responses with suggested matches, and gave leaders a dashboard on approved data.

The outcome

Every core module, the linkage, access control, approvals and the leadership dashboard shipped, and the requirements added in later rounds, from profile approval to keyword search, were delivered too.

What shipped
Alerts, incidents, responses, links, dashboard
Data shown
Only records approved at defined levels
Visibility
By team, region and headquarters group
Rules enforced
Once, in one central access layer

The starting point

A large public security organization needed one place where its leaders could see security alerts, the incidents that followed and the responses, across many teams and regions. Leaders use it to spot hotspots, trace each alert to its outcome and decide where to act.

What had to change

Records came from many teams with different levels of verification, and nothing tied an alert to what happened next. Leadership needed one verified picture, while each team saw only its own data.

What could not break

  • Each user sees only the records their team, region or headquarters group allows
  • Nothing appears on a map or chart before approval at the defined levels
  • The most sensitive fields can be entered by one designated role only
  • A record is locked once it receives final approval
  • Every module, including ones added later, follows the same rules

The calls we made

We treated who sees what, and when, as the core of the product, so access and approval were built once and every module inherits them.

  1. 01

    One access layer, not one per module

    A permission middleware and a generic role based data filter apply the same rules to alerts, incidents, responses, sensitive fields and profiles, so a new module starts with the same protection.

    Ruled out

    Visibility checks written screen by screen, where one missed check exposes data.

  2. 02

    Approval before display

    Records move up from team to region to headquarters, rejected ones go back down the chain to the people who entered them, and final approval locks them.

    Ruled out

    Showing records on maps as soon as they are entered and correcting them later.

  3. 03

    Link records, then suggest links

    Alerts link to incidents and to responses, with suggested matches from dedicated APIs, so leaders can trace each alert to its outcome.

    Ruled out

    Three separate registers that leadership would have to reconcile by hand.

  4. 04

    Groups decide, not one off exceptions

    Headquarters users sit in groups that see specific regions, and group permissions take priority over settings on a single user, so access stays predictable as people change roles.

    Ruled out

    Granting access person by person, which drifts out of step with the organization.

  5. 05

    Scores people can act on

    Alert severity went from ten levels to four and updates automatically through a scheduled job, and responses carry an efficiency score shown in four bands, from High to Low.

    Ruled out

    The ten level severity scale.

How the system fits together

new recordsapprove, rejectrole checkedfinal approvalapproved onlylinked database layersrole filteredhotspots,trendsrejectedTeam clerksEnter alerts,incidents, responsesApproversTeam, regional andheadquarters levelsCentral accesslayerPermissionmiddleware,…Approval workflowUp the chain, backdown if rejectedLinkedrecordsAlerts, incidents,responses, profilesGoogle MapsBase layers underevery mapMaps and reportsGeoJSON layers,clusters, heat mapsLeadershipdashboardKPIs, correlations,trends, mapsLeadersSee only what theirrole allows
PeopleBuilt by DaticsData storeOutside serviceEvery request passes the same central access layer, and only records approved up the chain reach the maps, reports and dashboard.

What we built

Linkage and approvals

Alert to incident and alert to response links with suggested matches, and a hierarchical approval flow with rejection back down the chain and final locking.

A submitted record opens for review with its location, linked incidents and history, ready to approve or reject.

Leadership dashboard

KPI cards, alert to incident correlation, response assessment, trends, zone cards and a map section, taken from design to static screens to live data in four iterations.

A zone review dashboard shows the zone boundary on the map, period totals and month by month incident profiles.
03

Alerts, incidents and responses

Entry with unique IDs and four alert types, listings, maps with layers, clusters, heat maps, drawing and annotation, and charts and reports for each module.

04

Access control and profiles

Roles, permissions and groups, protected routes, sensitive fields limited to one designated role, and profile records with four approval levels and version history.

05

Reports and search

Incident and response reports by region, and a universal keyword search that also reads descriptions.

How it works

Enter

A team clerk records an alert, incident or response with its location on the map.

Approve

The record moves up through team, regional and headquarters approval, or goes back down for edits if rejected.

Link

Approved alerts are linked to incidents and responses, with suggested matches to confirm.

Filter

Each user sees only the records their role, team, region or group allows.

Decide

Leaders read hotspots, trends and outcomes on the maps, reports and dashboard.

A closer look

One approved alert in the GeoJSON feedSample data
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [12.34, 56.78]
  },
  "properties": {
    "alert_id": "ALR-0418",
    "alert_type": "Info report",
    "severity": 3,
    "approval": "Final, locked",
    "linked_incidents": ["INC-0192"],
    "linked_responses": ["RSP-0077"],
    "suggested_incidents": ["INC-0201"]
  }
}

What changed

The client has one system where alerts, incidents and responses are linked, approved and filtered by role, with every core module, access control, approvals and the leadership dashboard delivered. Requirements added in later rounds, from profile approval to keyword search and regional groups, were delivered too, and the system went to the client as an on premise release.

Under the hood

Datics role
Product built by Datics
Access control
JWT authentication with token refresh, a permission middleware, role based filtering in every API's queryset and protected routes in the front end.
Sensitive fields
The most sensitive fields are writable by one designated role only, records lock after final approval, and profiles keep their version history.
Maps
Google Maps base layers, GeoJSON feeds for alerts, incidents and responses, clustering, heat maps, drawing and annotation, and admin managed boundary sets.
Scoring
Alert severity on four levels, recalculated by a scheduled job, and a response efficiency score shown in four bands from High to Low.

Apps and APIs

DjangoDjango REST APIsReact

Also in the stack

JWTshadcn/uiGoogle MapsGeoJSON

How it shipped

  1. Design and a thin slice

    Database design, JWT sign in and a first end to end slice: alert entry, listings and a proof of concept map on Google Maps.

  2. First milestone

    The alerts module with maps, drawing and annotation, search and reports, after client feedback added charts and a severity formula.

  3. Second milestone

    Incidents, responses, linkage with suggested matches, profiles, and historical records loaded through import scripts.

  4. Access, approvals and dashboard

    The central access layer, hierarchical approvals and the leadership dashboard, tested role by role in a QA walkthrough with the client contact.

  5. New requirements, then regression

    Profile approval with four data levels, keyword search across descriptions and headquarters groups limited to specific regions, then full regression before the on premise release.

A thin slice first

We started with the design and an end to end slice of sign in, alert entry and a proof of concept map, then showed working builds on a regular rhythm.

Feedback into the next sprint

Each round of client feedback went into the following sprint, including major change requests such as hierarchical approvals, linkage and a new response module.

Scope kept visible

When scope grew, we presented progress against the original milestone plan in three reviews and proposed how to handle the added work.

What this unlocked

AI assisted parsing, a chatbot and OCR entry were planned and then held out of scope. The verified, permission filtered and linked data they would read is already in place.

Have a product with the same kind of constraints?

Tell us what already exists and what you want it to do. We will tell you what it takes.

Book a 30-minute Product Review