Nortik

Case Study · Azulfy

Environmental monitoringpowered bysatellite data.

Azulfy is a Coimbra Earth Observation company that helps local governments monitor pollution from orbit. Its platform turns Copernicus satellite data into daily air, water and soil readings, reports and alerts for the municipalities responsible for them. Our team handled features across the entire platform, from the ingestion and processing pipelines underneath it to the maps and dashboards the readings arrive on.

Municipalities and organizations supported
20+Municipalities and organizations supported
Environmental measurements processed
10K+Environmental measurements processed
Air, water and soil indicators monitored
20+Air, water and soil indicators monitored

Engagement Overview

Azulfy, in Coimbra, Portugal, describes itself in a single line: it helps local governments monitor pollution using satellite data. It came out of a hackathon, first in Portugal and second at the European final, and has been backed since by ESA’s Business Incubation Centre, Portugal Space, Portugal Ventures and Coimbra City Lab.

The product is a pollution monitoring platform on Copernicus Earth Observation data. It watches rivers, reservoirs, coastlines and urban areas, tracks water, air and soil indicators, and turns them into daily readings, reports and alerts rather than imagery somebody has to interpret. The buyer is a municipality, so the output has to stand up to EU environmental legislation and to a council meeting.

A satellite hands over scenes, not answers, and everything between a Sentinel product and a town hall reading “the reservoir is fine this week” is engineering. That is the part we worked on: the backend processing that turns Earth Observation data into environmental measurements, and the frontend visualisation that puts them in front of a municipality. It was the core of the engagement and the hardest part of it. The figures on the right describe the platform, not a single release.

20+
Municipalities and organizations supported
10K+
Environmental measurements processed
20+
Air, water and soil indicators monitored
Engagement
AI Consulting + End-to-end implementation
Team
Engineers across backend, data and frontend
Focus
Satellite data processing
Working model
Embedded in Azulfy’s delivery

Stack

Frontend

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • Radix UI
  • RSuite
  • Mapbox GL
  • Chart.js
  • TipTap
  • Zustand
  • SWR
  • i18next

Backend

  • Laravel
  • PHP
  • MySQL
  • Redis
  • Sanctum
  • Spatie
  • DomPDF

Data processing

  • Laravel Brain API
  • PostgreSQL
  • Redis Queues

Infrastructure & DevOps

  • Docker
  • Laravel Sail
  • AWS Lambda
  • API Gateway
  • AWS S3
  • Flysystem

Earth Observation

  • Sentinel Copernicus (CDSE)
  • Earth Observation processing
  • Python

Security & integrations

  • Homomorphic encryption microservices
  • Sentinel / CDSE
The Earth photographed at night from orbit, city lights scattered across the dark landmasses and a thin lit atmosphere along one limb

The Challenge

Earth Observation data is large and it is not an answer. A Sentinel product is a scene: bands of raster imagery over a strip of the planet at a moment in time. What a municipality needs is a sentence about a specific reservoir this week. Getting from one to the other means moving a lot of bytes and doing real work on them before anybody asks a question.

And the data does not arrive from one place or on one clock. Several sources, each with its own cadence and its own failure modes, all of which had to be pulled in, queued, processed asynchronously and validated before a single measurement was allowed in front of a user. Nothing here can be computed on request, so scheduling and reliability are the product, not an operational detail behind it.

Then there is the other end. All of this is geospatial, so the interface has to hold maps, layers, time series and thresholds at once, for people who are environmental officers rather than analysts. And it has to keep doing that as municipalities are added, which means onboarding a new one cannot be a project every time.

The Solution

One path, followed end to end: a satellite product comes down, gets processed into an environmental measurement, and ends up as a map, a report or an alert on somebody’s desk at a town hall. Azulfy built the platform. We built features along that path, on both sides of it.

A large radio telescope dish silhouetted against a deep blue sky at dusk, with a second dish on the horizon behind it

Ingestion, on a clock rather than on request

The first job was getting environmental data in reliably and improving the pipelines that already did it. Data comes from several sources on their own schedules, so the work is queueing rather than calling: jobs put on Redis queues, run asynchronously, retried when a source is slow or a product is late, and checked before anything is written. A measurement that reaches a municipality has already passed validation, and one that fails it does not silently become a gap in a chart.

  • Ingestion Pipelines
  • Redis Queues
  • Asynchronous Processing
  • Scheduled Runs
A spacecraft module against the curve of the Earth seen from orbit, cloud systems and ocean filling the frame below it

Earth Observation processing, off the main application

Turning Sentinel products from the Copernicus Data Space Ecosystem into measurements is heavy, bursty work, and it has no business sharing a process with the application serving a dashboard. We contributed to the Earth Observation processing infrastructure running on AWS Lambda behind API Gateway, with results landing in S3 and a separate Laravel Brain API and PostgreSQL holding the processed environmental data. The web application reads results. It does not compute them.

  • AWS Lambda
  • API Gateway
  • Sentinel / CDSE
  • Brain API & PostgreSQL
An aerial view straight down onto autumn woodland with a river running through it over a shallow rocky bed

Reports and alerts a council can act on

At the other end sit the people the platform is for, and they are environmental officers rather than analysts. We built reporting and alerting workflows for municipalities: measurements assembled into reports and exported as documents, thresholds that raise an alert when an indicator moves out of range, and the geospatial frontend those arrive on, with Mapbox GL carrying the maps and layers, Chart.js the time series, and i18next the several languages this has to be read in.

  • Reporting Workflows
  • Threshold Alerts
  • Mapbox GL
  • Multi-Language

And the part nobody sees

A platform that generates its own data on a schedule is only as good as what happens when a run goes wrong at four in the morning. Three pieces of the engagement exist for that.

  • Onboarding automation

    Bringing a new municipality onto the platform had to stop being a project. We worked on automating that setup so the territory, its indicators and its schedule are configuration rather than a deployment.

  • Operational monitoring

    Pipelines that run on a schedule fail on a schedule too, and quietly. Monitoring around the automated processing is what turns a silent gap in the data into something somebody is told about.

  • Validation in the pipeline

    Checks around the automated processing, so a bad or partial input is caught where it enters rather than surfacing later as a measurement a council has already read and acted on.

Two Nortik engineers at adjacent desks in the Novi Sad office, reviewing work on screen together

Business Impact

Municipalities monitor environmental conditions across their own territory through automated reports, dashboards and alerts generated from satellite data, without anybody in the building having to know what a Sentinel product is. That is the whole point of the platform, and it is a small thing to say and a large thing to be true: an environmental officer opens a web application and reads the state of a river, and behind that sentence is a pipeline that ran overnight and checked itself.

The architectural half of that is what we are proudest of. The ingestion and processing tiers scale on their own terms, separate from the application serving the interface, so adding a municipality adds work to a queue rather than pressure to a web server. And because the automated processing is monitored and validated rather than merely scheduled, the thing a council ends up trusting is not the satellite. It is that the number in front of them arrived, on time, and was checked on the way.

View it from our angle.

Get In Touch
Bojan JovanovićNortik logo
Bojan Jovanović
Sr. Software Engineer, Nortik
This project combined backend processing, automation and frontend visualization into a single workflow. The biggest lesson was that reliable monitoring is just as important as the data pipeline itself because users depend on timely environmental alerts. Looking back, investing in observability made ongoing maintenance much easier.

Nortik’s Impact

Features across Azulfy’s satellite environmental monitoring platform: ingestion and Earth Observation processing pipelines, reporting and alerting workflows for municipalities, and the geospatial frontend they arrive on.

Your AI team is ready.Are you?

Let's shape the future of AI, together.