Skip to content
megapromotingLet's talk
Products FlowMind

Geospatial intelligence Specialised deployment

Data about a place, seen together.

FlowMind organises maps, public sources and Copernicus products in an analysis space. We move from a background image to layers with source, date, sensor and interpretation limits.

NOTEDATALAYER ON THE MAP
How FlowMind works

FlowMind

From information to work done.

01

We choose the area

We define the territory, the period and the question: vegetation, water, terrain or urban context.

02

We process the data

We use optical, radar, thermal and atmospheric products suited to the question.

03

We compare and interpret

We display the layers on the map and keep the context needed for an informed decision.

Where it becomes useful.

Vegetation and water

Sentinel-2 and indices such as NDVI and NDWI for exploring changes.

Radar observations

Sentinel-1 complements optical information, including when there is cloud cover.

Regional context

Sentinel-3 thermal data and Sentinel-5P atmospheric data, at the resolutions specific to these products.

The data is not a continuous video stream. Interpretation depends on resolution, season, clouds and the time of observation. InSAR displacement analyses require a separate stream, currently in development.

FlowMind in detail

What you can do with this project.

FlowMind is an aggregation layer for a territory: it gathers into a single operational map what can be read about a city from public sources — Copernicus satellite imagery, OpenStreetMap geometry, public traffic cameras, incidents, weather — and shows next to each layer where it comes from and when it was last read.

The rule it is built on is called ZERO FALSE DATA in code: when a source does not respond, the platform writes OFFLINE and the reason, and does not fill the gap with a plausible value. There is an automatic guard, `noFakeLive`, which refuses to mark a layer LIVE without proof of a successful read. In today’s check it reports zero violations.

We do not have satellites. We work through Copernicus Data Space Ecosystem, with OAuth2 client_credentials credentials on identity.dataspace.copernicus.eu, and we request processed products through the Sentinel Hub API. What this means in practice: resolution, revisit frequency and clouds belong to the mission, not to us, and are visible in the text.

01

Six Copernicus layers, each with its own sensor

Sentinel-2 MSI at 10 m in three variants (true colour from B04/B03/B02, NDVI from B08/B04, NDWI from B03/B08), Sentinel-1 C-SAR VV/VH ratio at 10 m, Sentinel-3 SLSTR thermal band S8 at ~1 km and Sentinel-5P TROPOMI NO₂ at ~3.5 × 5.5 km. The collections requested in Sentinel Hub are `sentinel-2-l2a`, `sentinel-1-grd`, `sentinel-3-slstr` and `sentinel-5p-l2`.

02

Cloud mask, not cloud removal

Sentinel-2 requests filter scenes with over 40% cloud cover, and in the evalscript pixels marked by the SCL band as cloud, cloud shadow, cirrus or snow (classes 3, 8, 9, 10, 11) are returned transparent. An empty pixel means “we have not observed here”, not “there is nothing here”.

03

Radar when optics cannot

Sentinel-1 passes through clouds and works at night, at 10 m, with a revisit of about 6–12 days. It is single-scene screening, not interferometry: the VV/VH ratio shows surface and moisture differences, not millimetric movements.

04

Infrastructure inventory and sounding cameras

538 mapped road infrastructure points from OpenStreetMap (245 traffic lights, 174 pedestrian traffic lights, 61 radars, 58 cameras) and a prober that actually tests each camera stream and writes the reason when one fails.

05

3D scene without paid keys

The 3D map drapes the government orthophoto from geodata.gov.md (WMS, Agency of Geodesy, Cartography and Cadastre) over a terrain model from AWS Open Data terrarium tiles, rendered with MapLibre GL. Zero API keys, zero display cost.

06

Orbit positions calculated locally

Satellite tracks are propagated from CelesTrak TLE elements with `satellite.js` in process, with orbital data age marked fresh / stale / expired. It is a sky map, not an imagery product.

Data and operation

What enters the system. What needs to be checked.

What we ask from the provider and what we do ourselves
From Copernicus we ask for a raster already processed for an area and an interval: we send an evalscript to `https://sh.dataspace.copernicus.eu/api/v1/process` and receive an image. NDVI, NDWI and the VV/VH ratio are calculated in that evalscript, on the provider's server. What remains local: the cache, validation guards, source inventory and interpretation.
The real processing quota
The standard Copernicus Data Space account has 30,000 processing units and 30,000 requests per month. There is no counter for this quota in the application — that is the most important limit to know before a high-traffic deployment. What exists instead: a 30-minute tile cache with 200 entries, `Cache-Control` of 24 hours on the response and a custom rate limiter of 1,200 requests/minute per tile, 120/minute on JSON APIs and 30/minute on writes.
The limits we impose on requests
A tile request accepts between 64 and 2048 px per side, a box of maximum 5° on each axis and an interval of at most 31 days; beyond 15 seconds the request to Copernicus is abandoned. The default layer window is the last 7 days, ending yesterday — not the current day, because products are not ready instantly.
Revisit and what it means
The product registry in the code states: Sentinel-2 ~5 days per constellation (useful product at ~2 days when there is a cloud-free scene), Sentinel-1 ~6–12 days, Sentinel-3 thermal daily to multi-daily, Sentinel-5P NO₂ daily. A cloudy winter can leave weeks without a usable optical scene; that is where radar comes in.
What is not a satellite product
The map background is only for visual orientation, and orbit tracking is not an imagery product — both are explicitly marked `basemapIsSatelliteProduct: false` and `orbitTrackingIsMapProduct: false` in the product API response.
Persistence
Operational data (incidents, reports, camera status) are stored in JSON files on disk, not in a database. It is a deliberate choice for the current scale, with daily backup via cron; for a client with retention requirements, it is changed before installation.

From exploration to implementation

How we prepare a project with FlowMind.

01

1. We define the question and the area

What is the territory, what does the team want to track (vegetation, water, land, air, infrastructure) and at what scale is the decision made. The resolution suitable for a district does not describe a plot.

02

2. We inventory the real sources in the area

We check which cameras, geoportals, transport flows and public registers actually exist and respond. Each source enters the platform with its licence, attribution and status; those that do not respond remain visible as OFFLINE with the reason, they do not disappear from the list.

03

3. We connect Copernicus to the client's account

An OAuth2 client is created in the Sentinel Hub Dashboard from CDSE and `CDSE_CLIENT_ID`, `CDSE_CLIENT_SECRET` and `CDSE_INSTANCE_ID` are set in the application environment. The quota of 30,000 PU/month remains the client's, which means that they see it and control it.

04

4. We install and verify with the guards on

Installation is carried out on the client's server (Next.js under systemd, nginx in front). The acceptance check is `/api/worldview/source-health`: if `noFakeLive` reports any violation, the installation is not finished.

05

5. What is closed before public access

The current reference installation runs over HTTP without TLS and without read authentication. For a publicly exposed deployment, TLS and authentication are separate works, explicitly planned — they are not assumed to be included.

Questions worth clarifying.

Which satellites do you use, specifically?

Sentinel-1, Sentinel-2, Sentinel-3 and Sentinel-5P, through Copernicus Data Space Ecosystem. In code the collections are called exactly `sentinel-1-grd`, `sentinel-2-l2a`, `sentinel-3-slstr` and `sentinel-5p-l2`. We do not have our own satellites and we do not buy commercial high-resolution images — if you need 30 cm, that is a different discussion and a different provider.

Do I get a live image from the satellite?

No, and no one can give you that with Sentinel. Sentinel-2 passes over the same place roughly every 5 days, Sentinel-1 every 6–12 days, and the product needs processing time. That is why the default window of the layers is the last 7 days, ending yesterday. What you receive is the best available scene in the requested interval, with its declared date.

What happens when it is cloudy?

Optics is lost. We filter scenes with over 40% cloud cover and mask the pixels marked by the SCL band as cloud, shadow, cirrus or snow — they appear transparent, not invented. When optics cannot help, Sentinel-1 remains: radar passes through clouds and works at night, at the cost that its reading is different — it sees roughness and moisture, not colour.

Do you measure slope or building displacement?

No. That requires InSAR: pairs of scenes, precise orbits, DEM and phase unwrapping. In code this product is listed with the status `requires_pair_processing` — meaning declared as not implemented, not hidden. What we do instead: screening. There is a landslide triage module that presents itself as `flowmind-landslide-screening-v0`, heuristic, with the warning written in the API response that it is not confirmed detection.

How many road cameras can you bring into Moldova?

Few, and it is better to hear it from us. A proprietary OSINT survey from July 2026 found a ceiling of approximately 34 live public road cameras across the whole country — 12 ANDSA plus 22 at the border. At today’s check, out of 116 surveyed streams, 13 were responding, all refreshed JPEG images, zero video streams. The rest are declared for the following reasons: expired subscription, rotated token, missing folder, inaccessible port. If someone promises you 150 cameras in Moldova, ask for the list.

Do you control traffic lights?

No, and there is no way to do so in the current form. The 245 traffic lights are mapped as points in the data, from OpenStreetMap — the platform sees them on the map, it does not command them. Active control would mean integration with the physical controllers and safety responsibility, which is a separate project, with other partners.

Are there machine learning models in production?

No. There is no trained model in the repository and no machine learning code is called by the application; the `ml/gnn` and `ml/forecasting` directories are empty. The RL and GNN architecture in ARCHITECTURE.md is the target, marked as such in that very file.

How much does satellite traffic cost me?

The standard Copernicus account comes with 30,000 processing units and 30,000 requests per month, free of charge. Each requested tile uses some of them. The platform reduces consumption through cache (30 minutes in memory, 24 hours in response) and through limits on request size and interval, but it does not have a quota counter — if the installation has high public traffic, metering and a paid plan are things to decide beforehand, not afterwards.

Illustrative example

Checking a suspicion of deforestation on 40 hectares

A use case, without client data or attributed commercial results.

Initial situation

A town hall receives a report that forest was cut in a hard-to-reach area and wants to know whether it is worth sending a team.

How it works

The Sentinel-2 NDVI layer is requested over the area bounding box, for a window before the report and a recent one — maximum 31 days each, with a 40% cloud filter. Pixels marked as cloud or shadow by the SCL band remain transparent. If both windows are cloudy, it switches to Sentinel-1 VV/VH, which passes through clouds. Overlaying with the OSM geometry shows whether the area with the low value is indeed forest and on which parcel it falls.

Rezultatul

A dated pair of images, at 10 m, with the outline of the area where the vegetation index dropped between the two windows, and with the approximate area of that zone. A 10 m pixel means that a cut below approximately 0.1 ha cannot be distinguished from noise — you see a parcel, not a tree.

What is required:A Copernicus Data Space account with an OAuth2 client (free) and a time window in which there is at least one scene with clouds below the threshold. The result is a reason for field verification, not a legal finding.

Collaboration possibilities

FlowMind, in the context of your organisation.

Territory observation

Analysis of satellite images and indicators for planning, environment or agriculture, with mention of the resolution, date and limits of each source.

Private companies

We define a pilot around a real process: users, data, integrations, costs and acceptance criteria. Expansion follows after evaluating the result.

State institutions and companies

We establish the requirements for accessibility, hosting, data protection and interoperability. Any connection to AGE or STISC services requires validation of eligibility, access and approvals.

These are adaptation scenarios, not statements about existing contracts or partnerships. The proposed functions are confirmed within the project scope.

Discuss a pilot

We also look beyond the map.

See how we use Copernicus observations and how we explore satellite orbits.

Explore the data and the cosmos

Part of an ecosystem.

What would you want to work better?

Tell us about your process. Together we decide what is worth building, what we can connect, and how we check the result.

Let's talk