Engineers Clinic
BeginnerSoftware trackFP-CS-05

Offline-first field app that syncs when the power comes back

Build a mobile app that lets meter readers record readings offline and syncs them safely once the network returns, with no lost and no duplicated readings.

Software & Web DevFlutter
5 Guided Steps35h Internship TierSubmit: GitHub repo with the mobile app, the sync server, a test data generator and a sync report + READMEVerified CertificateAI Rubric Graded
Program Overview

Industry project · for Amanzi Meters, a Cape Town water utility whose meter readers lose signal and mains power for hours at a time

Amanzi Meters sends readers to record water meters across Cape Town. Two things keep breaking their current app. Signal drops in many areas, and scheduled power cuts take mobile towers and the office offline for two to four hours at a time. The app they have assumes the network is always there, so readers lose a morning of work when it is not, and sometimes the same reading is uploaded twice and a household is billed oddly.

Each reader records about 120 meters a day: a meter id, a reading, a timestamp and sometimes a photo. The utility needs an app where a reader can work for a whole shift with no network at all, and where everything they recorded reaches the server exactly once when the network returns, even if the app was closed and reopened in between.

You will build the app and a small sync server. The app stores every reading in a local database first and shows the reader whether each one is saved locally, syncing or confirmed by the server. A background sync sends pending readings when the network is available, retries on failure, and uses an id the app generates so the server can reject duplicates. You will generate test readings and simulate flaky network and power cuts, because you cannot take a bus around Cape Town. Done looks like a reader completing a 120-meter shift fully offline, then watching every reading sync once when the network returns, with a counter that proves none were lost and none were duplicated.

Offline-first designLocal databasesBackground syncConflict and duplicate handlingMobile developmentState on flaky networks
What you submit

GitHub repo with the mobile app, the sync server, a test data generator and a sync report + README

Stack: Flutter or React Native, SQLite or a local store, A small sync API, A test network simulator

How it is graded
  • Works fully offline30

    A reader can record a full shift with no network and lose nothing when the app is closed and reopened.

  • Exactly-once sync30

    When the network returns every reading reaches the server once, with none lost and none duplicated, shown by a count.

  • Status is clear20

    Each reading shows whether it is saved locally, syncing or confirmed, and the states are always truthful.

  • Tested and documented20

    Flaky network and power cuts are simulated in tests and the README explains the sync design.

Pass 60% · Merit 75% · Distinction 90%

Learning Outcomes
Store data locally first and sync later
give each record an id so uploads are exactly once
show sync status to a user
test an app against a flaky network and power cuts
Target Audience

Engineering Students

Diploma, B.Tech, B.E., BCA, MCA, or M.Tech students seeking practical experience.

Aspiring Developers

Developers who want to build proof-of-work capstone projects for tech resumes.

Job Seekers

Graduates looking for AI-evaluated code review & verified industry credentials.