Skip to content
All work

Personal project

VIGIA

An operational picture that connects incidents to the decisions around them.

Built with
Node.js · PostGIS · MapLibre · OSRM · Docker
Context
Independent system · Portugal first

Behind the interface

Architecture & tools.

Source adapters feed an operational model that separates observations from consequences and planning. The public console reads through a restricted gateway backed by the API and geospatial storage.

Runtime & data

JavaScript · Node.js · PostgreSQL · PostGIS

Run the API and domain engines with durable spatial queries and a shared operational model.

Maps & routing

MapLibre · OSRM

Render geographic context and support route analysis around incidents and restrictions.

Packaging

Docker · Docker Compose · esbuild

Build the web surface and isolate API, operator and supporting services in repeatable environments.

Verification

Node.js test runner · fast-check

Exercise domain invariants with property tests and dedicated race, crash and replay checks.

  1. 01

    Observe

    Normalize source data with provenance and freshness.

  2. 02

    Connect

    Relate incidents, facilities and route restrictions.

  3. 03

    Evaluate

    Apply deterministic consequence and planning logic.

  4. 04

    Inspect

    Present the result in a read-only operator console.

Provenance, stale data and uncertainty remain part of the model. The public gateway exposes a restricted evaluation surface; it does not authorize dispatch or certify safe routes.

VIGIA’s operational intelligence workspace with incident context and a Portugal map.
VIGIA Intelligence. Captured public evaluation interface; the poster is stored with this portfolio.

The challenge

A map can show an incident without explaining its consequences. An operator also needs to know which roads and facilities matter, what changed, what support is available, and what remains uncertain.

Decisions that shaped the product

Interaction study

When information expires.

A simplified, fictional observation. No live incident or route data.

Road access observation

Source: demonstration feed · Updated 2 minutes ago

Current

The source and age are visible before the observation can be inspected.

This study uses a 15-minute expiry to show the transition. It does not specify the product’s source-specific freshness policy.

01

Start with what changed.

Incident context, affected services and the next useful inspection stay close to the operational view, so the map supports the task rather than becoming the task.

The tradeoff. A focused incident view exposes less information at once than an all-layers dashboard.

02

Keep uncertainty visible.

Observations carry provenance and freshness. Expired information cannot silently continue to look current.

The tradeoff. A clear unknown can be less visually satisfying than a definitive answer, but it is the more useful state.

03

Give the public demo a firm boundary.

The portfolio experience exposes a controlled evaluation of the console and its decision logic. Unsupported operational actions stay unavailable.

The tradeoff. The public experience cannot represent every production integration or field condition.

The outcome

An explorable operator interface supported by consequence and planning logic. The public portfolio scenario lets visitors inspect the product’s decisions without treating it as an operational emergency system.

The public demo is an evaluation surface. Its scenarios do not establish current emergency conditions, safe passage or dispatch authority. Availability depends on its separate deployment.

Next case study

Mirror AI