I build apps thatkeep working whenthe signal doesn't.

I'm Winfred, a senior Flutter engineer in Ghana. I build apps for delivery riders, field agents and small merchants in Ghana, Nigeria and Côte d'Ivoire: people who need the app to keep working on a patchy network, in the middle of a job.

GitHubLinkedIn[email protected]

10:24

Field agent

Today's onboarding

  • KNKwame NyarkoMampongSynced

Turn the signal off and add a few farmers. Nothing is lost, and it all syncs when the signal comes back.

Problems I've solved

Most of my work is the part users never notice: rules that change per country, data that has to survive a dead network, photos that need checking before they're sent. Here are five pieces I'm proud of.

  • The problem
    When Wegoo expanded from Ghana into Nigeria and Côte d'Ivoire, every market wanted something different: payment providers, services, onboarding, wallet features, rider flows. If each of those changes needed a new build, we'd be shipping constantly, and every release would be a risk.
    What I did
    I built a configuration layer on Firebase Remote Config. At startup the customer and Captain apps read the cached config, pick the rules for the user's country and account type, and expose them through one shared layer. Feature code asks that layer what's allowed instead of checking the country itself, so there are no country checks scattered through the UI.
    What changed
    Product and ops can switch services, payment options, referrals and rider payment flows on or off per market without waiting for an app-store review. We shipped fewer emergency releases, and the code stayed readable while requirements kept moving.
    Wegoo home screen
    Wegoo create delivery screen
  • The problem
    Velociti was built offline-first for agents onboarding farmers where coverage is poor, so agents synced by hand. When the app expanded to traders, many agents were working in towns with good signal, and tapping sync after every create, edit or delete got old fast.
    What I did
    I kept local writes as the source of truth and added a sync queue on top. When the app has a connection, it syncs right after each change and refreshes local data. When it doesn't, everything works exactly as before and waits.
    What changed
    Agents in town move faster, and agents in remote areas didn't lose anything. We got there without rewriting the data model. The demo at the top of this page is a simplified version of the same idea.
    Velociti home screen
  • The problem
    During onboarding, agents photograph the customer and their national ID. A lot of those photos were too dark, overexposed or had the ID in the wrong place, and every bad one held up verification.
    What I did
    I trained a lightweight image classifier with Google Teachable Machine and TensorFlow, and it runs on the phone. The app checks each photo right after it's taken and turns the result into a plain warning the agent can act on, with no network round trip.
    What changed
    Fewer photos fail review, verification moves faster, and agents find out about a bad photo while the customer is still standing in front of them.
    Velociti photo check warning
  • The problem
    Agents record GPS coordinates for a farmer's or trader's home and for their farm or shop. They usually meet people at one of those places, and the other can be far away, so finishing an onboarding often meant a second trip.
    What I did
    The agent sends a request over WhatsApp, and the farmer or trader shares their location the next time they're there. In the app, the missing location becomes a pending task the agent can check and complete, without breaking the offline-first model.
    What changed
    Fewer repeat trips, more onboardings actually finished, and a flow that fits how rural fieldwork really happens.
    Velociti add coordinate screen
  • The problem
    We were releasing quickly, and some users stayed on old versions with bugs and logic the backend no longer expected.
    What I did
    At launch, the app compares its version with minimum versions set separately for Android and iOS in remote config. It shows either an optional update prompt or a required update before the user reaches anything that depends on newer APIs.
    What changed
    We can retire a broken version the same day, support sees fewer stale-app problems, and backend changes don't wait for every last user to update.

Rebuilding the Wegoo apps

I rebuilt both Wegoo apps, the customer app and the Captain app riders use on the road. Pick a screen and drag across it to see the old version next to the one I shipped.

The old app opened on a single delivery. The new home shows a rider's middle-mile, pickup and return jobs at a glance, with search and a list of deliveries waiting to be picked up.

Captain home, old version
Captain home, version I shipped
BeforeAfter

Drag across the screen to compare

Apps you can download today

Where I've worked

I studied Computer Science at KNUST and have been shipping Flutter apps since. Some of these roles overlap: I co-founded two companies while working as an engineer.

  1. 2026 to now

    Relayed, Co-founder

    A logistics startup built on shared parcel lockers: riders drop many parcels at one stop, and people collect nearby instead of a rider calling around for directions. I'm building the merchant intake flow, parcel states and a pickup simulation.

    userelayed.com
  2. Sep 2024 to now

    AgroCenta (Velociti), Senior Flutter Developer

    I maintain the offline-first app agricultural agents use for loan applications, savings groups (VSLAs), meetings and attendance. The sync, GPS and photo-check work above is from here.

    agrocenta.com
  3. Jun 2024 to now

    Wegoo Delivery, Senior Flutter Developer

    I rebuilt the Wegoo customer app and the Captain rider app with clean architecture, multiple languages and market-specific payments, and built Goopay, an order and payment app for small businesses.

    wegoo.delivery
  4. Jun 2024 to now

    Goo Pay, Senior Flutter Developer

    goopay.app
  5. Jan to Apr 2024

    Adinkra Xpress, Lead Flutter Developer

    Built a bus booking system with passenger, driver and admin apps and QR ticket checks. It won GHS 50,000 at the Trek KNUST / World Bank Innovation Challenge.

    Trek Innovation Challenge award, photo 1Trek Innovation Challenge award, photo 2Trek Innovation Challenge award, photo 3
  6. Dec 2023 to now

    Tevrozo Limited, Co-founder

    A small studio building mobile apps for clients. I set the architecture and development process, and mentor the junior Flutter engineers.

    tevrozo.com

Hiring a mobile engineer? I'd like to hear about it.

Email is the quickest way to reach me. My résumé has the full history, and the code I can share is on GitHub.

Winfred Adu-Acheampong. Built with Next.js.