Skip to content
Geospatial control plane

Open data is not a dataset.It is a claim to check.

DjiniousMap harvests geospatial data, measures what it actually contains, and refuses to draw it until the coordinates support a reading. What survives that becomes a live map, a spatial analysis, a workflow — or an answer an AI agent gives your team.

  1. Harvest
  2. Profile
  3. Compose
  4. Act
A dataset detail page showing EPSG:4326 declared, EPSG:2154 inferred at 100% confidence, a warning that the two disagree, a full profile, quality findings, and its points drawn over Provence-Alpes-Côte d'Azur.A dataset detail page showing EPSG:4326 declared, EPSG:2154 inferred at 100% confidence, a warning that the two disagree, a full profile, quality findings, and its points drawn over Provence-Alpes-Côte d'Azur.
A harvested dataset whose publisher declared EPSG:4326 while its coordinates measure as EPSG:2154. Both readings are kept, the disagreement is stated, and the map is drawn from the inferred CRS — the only one supported by evidence.Seeded development stack
What it is

A catalogue, a map studio, and an analysis engine that share one tenancy model

Most geospatial stacks are three products stitched together: something that ingests, something that draws, something that computes. Each keeps its own copy of who may see what. DjiniousMap is one control plane, and the isolation is enforced underneath all three.

  • Harvested catalogue

    data.gouv.fr · your own sources

    A harvester pulls public datasets and registers them with their source URL, licence and classification. Registered is not the same as present: nothing is copied into the platform until you materialize it, and the catalogue says plainly which is which.

  • CRS inference

    EPSG · declared vs measured

    The publisher's declared coordinate reference system is treated as a claim. The platform measures the coordinates, names the CRS they are actually in, and reports its confidence. When the two disagree, both are kept and the disagreement is shown.

  • Quality findings

    with remediation, and with 'undetermined'

    Excess coordinate precision, stale data, invalid or null geometry — each finding explains what was measured, why it matters, and what to do. When there is nothing to judge by, the verdict is Undetermined rather than a guess dressed as a result.

  • Map studio

    deck.gl · IGN basemaps

    Compose materialized datasets into layers, style them, filter them, and add category, histogram, formula or time-series widgets that cross-filter the map. A map is a versioned asset, so a view can be published, shared and rolled back.

  • Spatial analysis

    isochrones · routing · geocoding

    Run isochrones, routes, forward and reverse geocoding, and spatial joins against materialized layers. Results land back in the catalogue as datasets of their own, so an analysis output is a first-class input to the next one.

  • Workflows and automation

    event and schedule triggers

    Author a pipeline on a canvas, publish it as a versioned asset, and trigger it on a schedule or on an event — `dataset.refreshed`, for instance. Runs execute on a leased job queue and stream their progress live.

2
stores, one tenancy guarantee
SurrealDB PERMISSIONS · PostGIS RLS
FORCE
row-level security, owner included
nosuperuser · nobypassrls
0
request headers read for identity
session cookie only · no dev stub
100%
CRS inference confidence, above
declared 4326 · measured 2154
The pipeline

Four stages, and the platform will not skip one

The order matters, and it is enforced rather than recommended. A dataset cannot be drawn before it is profiled, because until it is profiled the platform does not know what projection its numbers are in — and drawing them anyway is how a layer ends up in the Gulf of Guinea.

01 · Harvest

Harvest

Register a dataset from the public catalogue or from one of your own connections. Registration records where the data lives, who publishes it, how it is licensed and how it is classified — public, internal, restricted or confidential. No features have moved yet.

  • Public harvest from data.gouv.fr, with the publisher's own identifiers preserved
  • Your own sources through connections, registered the same way
  • Registered but not materialized is a first-class state, shown as such in the catalogue
The DjiniousMap dataset catalogue listing fourteen registered datasets with their source, classification and state, and per-row actions for geocoding, reverse geocoding, isochrones and routing.The DjiniousMap dataset catalogue listing fourteen registered datasets with their source, classification and state, and per-row actions for geocoding, reverse geocoding, isochrones and routing.
The catalogue distinguishes Registered from Profiled. Six reference datasets here are registered with a source URL and nothing else; the eight below them have been materialized and profiled, which is what unlocks the spatial actions on the right.Seeded development stack
02 · Profile

Profile

Materializing copies the features into the platform and profiles them: feature count, geometry types, spatial index, null and invalid geometry rates, the temporal columns, and the coordinate reference system the numbers are actually in. The profile is what everything downstream trusts.

  • The declared CRS is a claim; the inferred CRS is a measurement, reported with a confidence
  • A disagreement between them is surfaced, never silently corrected
  • Where no CRS can be inferred, the dataset is refused for mapping and the table preview still works
A dataset detail page showing EPSG:4326 declared, EPSG:2154 inferred at 100% confidence, a warning that the two disagree, a full profile, quality findings, and its points drawn over Provence-Alpes-Côte d'Azur.A dataset detail page showing EPSG:4326 declared, EPSG:2154 inferred at 100% confidence, a warning that the two disagree, a full profile, quality findings, and its points drawn over Provence-Alpes-Côte d'Azur.
The publisher declared WGS 84 while the coordinates measure as RGF93 / Lambert-93 at 100% confidence. The platform keeps both values, states the contradiction, and draws the map from the inferred one.Seeded development stack
03 · Compose

Compose

Bring materialized datasets together as layers on a map: style them, order them, filter them, and add widgets that cross-filter every other layer. The map is a document, versioned like any other asset, so a published view is reproducible and a bad edit is one version away from undone.

  • Category, histogram, formula and time-series widgets, each cross-filtering the map
  • Time replay over any column the profiler identified as temporal
  • IGN and other basemaps, with the layer paint drawn from the product's own design tokens
The DjiniousMap studio showing Lyon arrondissements as orange polygons and the Rillieux-la-Pape cycle network as blue lines over the Plan IGN basemap, an Arrondissement category widget, and a time replay rail.The DjiniousMap studio showing Lyon arrondissements as orange polygons and the Rillieux-la-Pape cycle network as blue lines over the Plan IGN basemap, an Arrondissement category widget, and a time replay rail.
Two materialized layers composed over Plan IGN, with a category widget cross-filtering by arrondissement and a time replay rail bound to the layer's own date column.Seeded development stack
04 · Act

Act

Run an analysis, publish a workflow, schedule it, share the result. Work that takes time runs on a leased job queue with heartbeats, so a worker that dies mid-run releases its lease instead of stranding the job — and every mutation lands in an append-only audit log on the way past.

  • Isochrones, routing, forward and reverse geocoding, and spatial analysis over materialized layers
  • Workflows authored on a canvas, published as versioned assets, triggered by schedule or event
  • Public share links and embeddable maps, including a conversational embed
The DjiniousMap automations page listing event- and schedule-triggered automations with their target workflow, trigger and last run status.The DjiniousMap automations page listing event- and schedule-triggered automations with their target workflow, trigger and last run status.
An automation binds a trigger to a published workflow version. This one fires on `dataset.refreshed` for the BD TOPO harvest and rebuilds the aerodrome access isochrones.Seeded development stack
Tenancy

Two stores, two enforcement mechanisms, and neither of them is application code

A cross-tenant read in DjiniousMap does not fail a check in a request handler. It returns nothing, because the database was never willing to produce the rows. That is a different class of guarantee from a well-reviewed `if` statement, and it is the reason the platform is built on two stores rather than one.

  • SurrealDB evaluates a PERMISSIONS clause per verb against the record the connection signed in as — a denied read returns nothing and a denied write returns nothing to check.
  • PostgreSQL uses row-level security with FORCE, which applies to the owning role too: it is nosuperuser and nobypassrls, so there is no principal that can read past a policy.
  • Every request opens its transaction through a helper that sets the organization first. A request with no resolved organization cannot open a transaction at all.
  • The isolation suite derives its expectations from the grants rather than from a hand-written list, so a table added without a policy fails the walk instead of passing unnoticed.

Identity comes from an HttpOnly session cookie whose SHA-256 hash is all the platform stores. Request headers are not consulted for identity at all, so a caller cannot claim an organization by asking for one. There is no override and no development stub.

AI & agents

An agent that works the catalogue, not a chat box bolted to the side

The assistant runs against the same API and the same tenancy model you do. It searches the catalogue, reads a quality card, proposes an analysis plan before running anything, and shows every tool call it makes as it makes it. External agents get the same surface through an MCP server with scoped tokens.

  • Plan first: the agent proposes an analysis and waits, rather than running and reporting
  • A live trace of every tool call, argument and result — including the ones that failed
  • An MCP server with per-token scopes, so an outside agent gets exactly the reach you granted it
  • Conversation mirroring: an external agent's transcript renders in the app's own assistant
The DjiniousMap settings page showing MCP token management alongside organization settings.The DjiniousMap settings page showing MCP token management alongside organization settings.
MCP tokens are minted per agent and scoped, so revoking one agent's reach does not disturb another's.Seeded development stack
What it does not do

The limits, stated here rather than discovered later

A platform that measures data honestly should describe itself the same way. These are real constraints of the product as it stands, not a modesty section.

  • It is not a tile server

    Materialized datasets are served as vector tiles for the studio's own rendering. It is not a general-purpose tile hosting product and does not try to be one.

  • Inference has a confidence, and sometimes it is zero

    When nothing in the coordinates supports naming a CRS, the platform says so and refuses to place the dataset on a map. The table preview still works. That is the designed outcome, not a failure to handle.

  • Freshness is a hint, not a verdict

    A stale-data finding is derived from a column identified as temporal by the shape of its values. A dataset that is genuinely current can carry an old date for an unrelated reason, and the finding says so in as many words.

  • The mirrors can drift, so there is a command that checks

    Three PostgreSQL rows are projected from SurrealDB records. That is the one thing in the architecture that can go out of step, so a reconcile command enumerates both sides and exits non-zero when they disagree.

See it against your own data

The fastest way to judge a catalogue is to point it at something you already know is messy. Bring a dataset you have argued about, and we will profile it live.

DjiniousMapCatalogue · Map studio · Spatial analysis

Harvest the data, profile it honestly, compose it into a map, and act on it — with tenancy enforced by the database rather than by application code.

  1. Harvest
  2. Profile
  3. Compose
  4. Act

Every screenshot on this site is a capture of the running platform.