ByteNest Book a free call

Case study 04Citizen reportingClient: Promet i prostorLive

Popravimo

A citizen issue-reporting app, rewritten from scratch in Flutter.

The Karta tab for Grad Sveta Nedelja: a Google map with report clusters marked 50+ and 10+ and single report pins in green and brown
The empty Nova prijava form: an add-photo card with a Slikaj button, a 200-character description field, the location Grad Sveta Nedelja and a disabled send button
The newest build in a read-only guest session.

Citizens report potholes, broken lights and other problems with a photo and their GPS position. For Promet i prostor we rewrote Popravimo from scratch in Flutter and shipped it to both app stores, with a clustered live map.

Role
Rewrite and release, both stores
Client
Promet i prostor
Status
Live

App Store (opens in a new tab) Google Play (opens in a new tab)

The brief

One app for every city on the client's platform.

Popravimo lets citizens report what is broken in their city and follow it on a public map. The client, Promet i prostor, runs the platform behind it for several cities. We rebuilt the app from scratch in Flutter: camera-first reports, guest mode, Croatian and English, dark mode, and one build that serves every city.

System map

How it fits together

Popravimo app on the client platformCitizens report issues with the Popravimo app, rewritten from scratch in Flutter and shipped to both app stores. A GPS geofence call loads the right city's configuration, so one build serves every city. Reports carry a photo and the GPS position, and a live map clusters them natively. Everything goes to the PiPGIS API, Promet i prostor's own platform, which ByteNest did not build.01 PEOPLE02 APP03 IN THE APP04 CLIENTCitizensreport issuesfrom the streetPopravimo appFlutter rewriteboth app storesCity configGPS geofence callone build, every cityReportscamera first,photo and GPSLive mapnative clusteringup to 30 per tapPiPGIS APIthe client's ownplatform123 Popravimo app on the client platformCitizens report issues with the Popravimo app, rewritten from scratch in Flutter and shipped to both app stores. A GPS geofence call loads the right city's configuration, so one build serves every city. Reports carry a photo and the GPS position, and a live map clusters them natively. Everything goes to the PiPGIS API, Promet i prostor's own platform, which ByteNest did not build.01 PEOPLE02 APP03 IN THE APP04 CLIENTCitizensreport issuesfrom the streetPopravimo appFlutter rewriteboth app storesCity configGPS geofence callone build, every cityReportscamera first,photo and GPSLive mapnative clusteringup to 30 per tapPiPGIS APIthe client's ownplatform123
System map of Popravimo. The four stages next to it describe each layer in words.
  1. 1
    Citizens on the streetCamera-first reports with a photo and the GPS position
  2. 2
    One build, the right cityA GPS geofence call loads the city, a native clustered map shows reports
  3. 3
    The client's platformReports go to the PiPGIS API, Promet i prostor's own platform
  4. 4
    Three hard partsMany cities, one app

Three hard parts

Many cities, one app

  1. One build, every city

    Each city has its own setup, but nobody should install a different app. A GPS geofence call picks the right city configuration, so a single build serves each city.

  2. A map that stays quick

    The map has to stay smooth with many reports. Native marker clustering; tapping a cluster zooms in and batch-loads up to 30 of its reports.

  3. Shared reports open in the app

    A link to a report should land on that report. app_links deep links open /reports/<id> and /auth/verify straight in the app.

On screen

The newest build

The Prijave feed for Grad Sveta Nedelja in guest mode: report cards with a photo, an Otvoreno status badge, the date, a title and a blurred address
The public feed for one city, guest mode.
One report opened: its photo, the Otvoreno status badge, the title, the description with the address blurred, and a small map with the location pin
One report: its photo, status, description and map.

Stack

  • Flutter
  • Riverpod
  • Retrofit
  • Dio
  • freezed
  • Sentry
  • app_links

Our role: rewritten from scratch, shipped to both stores.

Book a free call Back to all work