Minka's public homepage hero, showing a diver photographing marine life under the headline "Take action for a Sustainable future!"

What did we do?

Working alongside CSIC's EMBIMOS team, who set the priorities and run the science, MarsBased has led application development and technical leadership on Minka since early 2023, as part of ANERIS, a Horizon Europe project coordinated by CSIC that brings together 25 partners across 13 countries with close to €10 million in EU funding to build the next generation of tools for sensing and monitoring marine life. Minka is the part of ANERIS that brings people into that picture, so that what a diver, a student or a neighbour spots on the coast ends up in the same body of evidence as what a research vessel measures.

A small, stable MarsBased team has stayed on the project since the start, which matters on a codebase this size: a Rails monolith with more than 90 controllers and over 140 models, plus a separate Node read API. The work has run mainly along three lines:

  • Making the platform its own: replaced the inherited land taxonomy with a marine one, built a custom icon set to match, and added taxonomic profiles so Minka adapts to whether a user is interested in marine life, land species, or a selection of their own. Years of inherited third-party references were worked through and removed, and the legal and consent layer was rebuilt end to end: cookie consent, policy acceptance, Consent Commons, and specific handling for minors and their guardians.

  • Cutting the platform loose from commercial dependencies: replaced Google Maps across the whole platform with Leaflet and OpenStreetMap tiles, after a single month in 2023 saw Minka make more than 50,000 requests to the Google Maps API and get billed over €300 for it. Satellite imagery moved to a far cheaper provider, MapTiler, switchable off per environment.

  • Rebuilding identity around a single source of truth: integrated Minka with Keycloak, the central identity provider used across the research infrastructure, so the platform stops storing sensitive user data such as names and email addresses, keeping only a username, an ID and an avatar. That meant rebuilding sign-in, sign-up, password recovery and profile editing, plus a full account deletion flow with a grace period, a downloadable export of the user's own data, and anonymisation of past contributions.

Along the way, MarsBased also shipped a first version of AI-assisted species identification, reconnected Minka to the City Nature Challenge so observations sync with the global event, and retired sections of the product that no longer served anyone, while shifting planning from large releases that could sit unreleased for months towards smaller increments that reach users sooner.

Minka's Places explorer, showing a world map built with Leaflet and OpenStreetMap

Tech stack

The technologies at the core of the platform

Ruby on Rails

The monolith at the heart of Minka, inherited from iNaturalist and kept current so it could keep evolving instead of being rewritten.

PostgreSQL

The main database, extended with PostGIS for the geospatial queries behind every observation, place and map layer.

React

The interactive side of the interface: the observation and species explorers, the upload flow and the maps.

Leaflet

The open-source mapping library that replaced Google Maps across the platform, drawing OpenStreetMap tiles with no per-request bill.

Keycloak

The central identity provider of the research infrastructure, now the single source of truth for who a Minka user is.

Node.js

A separate read API that runs alongside the Rails monolith, documented with OpenAPI.

Why this stack

Minka did not start from a blank page. It inherited iNaturalist's stack, and with it a Rails monolith, a PostgreSQL database with PostGIS, a search layer on Elasticsearch, Redis for caching and Delayed Job for background work. Replacing all of that wholesale was never on the table: the citizen scientists already using the platform needed it to keep working day to day. So we kept the foundations, brought them up to date, and focused our effort on the parts that actually held Minka back: the maps, the identity layer and the taxonomy.

Where we did swap a technology out, the question was always what a publicly funded platform can afford to depend on. Leaflet and OpenStreetMap took over from Google Maps because they are open and free to serve at any volume, with MapTiler as an optional and far cheaper satellite layer. Keycloak took over user identity because the wider research infrastructure already ran on it, and OpenID Connect let Minka stop storing personal data altogether. The whole platform ships as Docker containers deployed through GitHub Actions, with media served from AWS S3 and CloudFront.

Results

Between April 2023 and March 2026, MarsBased shipped 48 tagged releases and closed more than 400 issues on Minka. The platform people use today is substantially different from the one the team inherited.

Minka has gone from a general-purpose, land-first fork of iNaturalist to a platform built around marine science: its own taxonomy, its own maps, and its own identity layer.

The collaboration with CSIC continues today, as MarsBased keeps supporting Minka through the rest of the ANERIS project.

Challenges

When MarsBased joined in early 2023, Minka was a fork of iNaturalist: a proven foundation, but one built for a different purpose. Its taxonomy and iconography were designed for land species. Parts of the interface still pointed at services Minka had no relationship with. Its maps ran on a commercial API billed per request, the wrong shape for publicly funded infrastructure. And its user accounts lived in its own database, disconnected from the identity system the wider research infrastructure was moving towards.

CSIC needed the platform to become its own thing: marine first, sound on privacy and consent, free of commercial dependencies it never chose, and affordable to run on public money for the long term, all without disrupting the citizen scientists already relying on it day to day.

Key wins

Maps, without Google

A 178-file migration replaced Google Maps with Leaflet and OpenStreetMap, turning a recurring per-request bill into an optional layer.

Identity in one place

Minka now holds no passwords, names or emails at all, thanks to the Keycloak integration.

Marine, not borrowed

Custom marine taxonomy and icons replaced the inherited land-first defaults.

Privacy on solid ground

Consent handling for minors, terms acceptance tracking, and Creative Commons licensing across data and images.

A lighter codebase

Dead sections removed, and a decade of inherited assumptions steadily unwound.

Minka's observations explorer, showing a grid of Mediterranean marine species with their observation counts
Work with us

Let's work together

We work with a select number of clients each year. Let's see if there's a fit.

Schedule a call