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, each row carrying its source, classification and state, with per-row actions for geocoding, reverse geocoding, isochrones and routing on the rows that have been profiled.The DjiniousMap dataset catalogue, each row carrying its source, classification and state, with per-row actions for geocoding, reverse geocoding, isochrones and routing on the rows that have been profiled.
The catalogue distinguishes Registered from Profiled. A reference entry carries a source URL and nothing else; a profiled one has had its features copied in and measured, 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 API tokens tab of DjiniousMap settings, listing three minted MCP tokens — a laptop client, a scheduled audit and a read-only notebook — each with its creation date, last-used state and its own Revoke control.The API tokens tab of DjiniousMap settings, listing three minted MCP tokens — a laptop client, a scheduled audit and a read-only notebook — each with its creation date, last-used state and its own Revoke control.
MCP tokens are minted per agent and scoped, so revoking one agent's reach does not disturb another's.Seeded development stack
Use cases

What people actually build with it

Each of these runs on the demo stack, against French public data. They are not personas — they are the projects, workflows and automations the seed creates, described as the work they do.

  • DVF · Cadastre

    Property and land value

    Reconcile transaction records against cadastral boundaries and publish the result as a layer the whole team reads the same way.

    HarvestMaterializationWorkflowsMap studio

    The DVF register lists every French property transaction; the cadastre gives the parcels and communes they sit in. Neither is useful alone, and joining them by hand produces a spreadsheet nobody else can reproduce. Here the join is a published workflow: it counts mutations per commune, averages their declared value, and writes a derived dataset back into the catalogue — profiled like any other, so the next question starts from it.

    • Register DVF and the cadastral communes from the public catalogue
    • Materialize both; the profiler reports their CRS, geometry and quality findings
    • Publish a workflow that joins mutations to communes and aggregates by value
    • Compose the output as a choropleth layer with a category widget on the commune
  • Isochrones · routing

    Access and service coverage

    Answer 'what is within twenty minutes of here' for every site in a layer, and keep the answer current as the source moves.

    IsochronesJob queueAutomationsSharing

    Coverage questions are asked once and then quietly go stale. An isochrone run over a whole layer produces travel-time polygons as a dataset of their own, which means it can be styled, filtered, shared and — crucially — rebuilt. An automation bound to `dataset.refreshed` re-runs the whole thing when the underlying sites are re-harvested, so the coverage layer is never older than the data it describes.

    • Run isochrones over every feature in a site layer, not one point at a time
    • The result lands in the catalogue as a dataset, profiled and mappable
    • Bind an automation to `dataset.refreshed` on the source layer
    • Every re-harvest rebuilds the coverage without anyone remembering to
  • Trees · cycle networks · sports facilities

    Municipal asset inventories

    Bring the small, messy, locally-published datasets together — and find out which of them can be trusted before you draw them.

    CRS inferenceQuality findingsSuitabilityMap studio

    A municipality's own open data is where CRS problems live: a layer served in Lambert-93 but declared as WGS 84, another with coordinates carrying nine decimal places of false precision, a third whose newest date is from 2005. The profiler reports each one, with the reasoning and the remediation, and refuses to place the ones it cannot read. That refusal is the feature: a map that silently drew them would put a cycle network in the Gulf of Guinea.

    • Register each source and materialize it
    • Read the quality card: declared vs measured CRS, precision, freshness
    • Fix or accept each finding — the platform never silently corrects one
    • Compose what survives into one map, with cross-filtering widgets
  • BD TOPO® · IGN

    National reference data, in three dimensions

    Extrude a building layer by its own height attribute and read the city as volume rather than as outlines.

    3D extrusionMap studioVersioned assetsSharing

    BD TOPO ships building footprints with a measured height on every feature. Extruding by that column turns a polygon layer into a massing model — useful for anything where what matters is above ground: sightlines, solar exposure, shadow, or simply explaining a site to somebody who does not read plans. The extrusion is part of the saved map document, so the view is versioned and shareable like any other.

    • Extract the departmental BD TOPO layers and materialize them
    • Add the building layer and set 'Extrude by' to its height column
    • Pitch the camera; the layer renders as volume, cross-filtered like any other
    • Publish the map version and share it
  • In-app assistant · MCP

    Agent-assisted catalogue review

    Put the question to an agent that can read every profile, and get an answer with the tool calls that produced it.

    AssistantPlan-firstMCPConversation mirroring

    Reviewing a catalogue is exactly the kind of tedious, mechanical reading a person does badly and an agent does well: open each profile, check whether a CRS was inferred, note the findings. The assistant works the same API under the same tenancy model, proposes before it acts, and shows every call it made. An external agent gets the same reach through MCP, and its transcript can be mirrored back into the app so the team sees the work.

    • Ask the assistant which datasets cannot be placed on a map
    • Watch the tool calls resolve, including the ones that return nothing
    • Get the answer with the catalogue's own cards inline, not a paraphrase
    • Mirror an external agent's session in if the work happened elsewhere

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.