Inspiration

Mavuno began with a practical question: how can Kenyan farmers reach buyers directly and plan beyond today's harvest? Buyers need a clear way to discover produce, while farmers need visibility into demand. We built a mobile marketplace that connects those two sides, with an optional Premium layer for planning future harvests.

What it does

Farmers create profiles, list produce with images, manage stock and receive customer orders. Buyers browse and search listings, add produce to a cart and place orders. Messaging helps the two sides coordinate.

Mavuno Premium is powered by RevenueCat. Buyers can request a future harvest with a quantity, date window, proposed price and note. Farmers can review and accept or decline those requests without paying for Premium. Buyers then follow the farmer's response in the app. A harvest request does not charge the buyer or reserve current inventory. Farmer Premium includes sales and inventory insights.

RevenueCat provides the native purchase experience, restore purchases and subscription management. Our Android test build uses RevenueCat Test Store so reviewers can try the upgrade without a real charge. The current offering includes monthly, annual and lifetime options.

How we built it

The mobile app uses Expo, React Native and TypeScript. A Python/FastAPI backend handles authentication, profiles, listings, inventory, orders, messaging and Premium access, with MySQL persistence and Redis-compatible infrastructure.

We integrated the RevenueCat React Native SDK and RevenueCat UI. The app identifies customers by their Mavuno account ID. After a purchase or restore, the backend verifies the customer's RevenueCat entitlement before enabling Premium; a client-side purchase result alone never grants access. RevenueCat webhooks keep subscription state synchronized.

GitHub Actions runs automated checks, builds the Android APK and publishes tagged releases with checksums. The API is deployed on Render. We tested the published APK on an Android emulator using ADB, alongside API verification.

Challenges we ran into

One challenge was keeping purchase state, account identity and backend access in agreement. Test Store configuration also differs from Google Play configuration: the Android build needs the appropriate SDK key and Test Store-compatible build settings.

Accelerated test renewals exposed another edge case: the backend could briefly show an expired period before renewal information arrived. We added verification with RevenueCat before returning a user to the upgrade screen, with regression tests for renewed, expired and unavailable purchase states.

The marketplace brings its own challenges: stock reservations, orders involving multiple farmers, and delayed payment results. Produce checkout has a separate M-PESA sandbox integration; RevenueCat handles digital Premium access.

Accomplishments that we're proud of

  • Shipped a downloadable Android APK through an automated build and release pipeline.
  • Verified a RevenueCat Test Store purchase unlocking Premium, purchase restoration and subscription management in the app.
  • Completed the Premium workflow across two accounts: a buyer sent a harvest request, the farmer accepted it, and the buyer saw the accepted status.
  • Verified that a placed produce order appears in the farmer's order feed.
  • Kept farmers' ability to answer harvest requests free, so a buyer's upgrade does not create a payment barrier for the farmer.
  • Added automated regression coverage; the latest frontend checks passed all 60 tests and TypeScript validation.

What we learned

A subscription integration is more than a paywall. Identity, restoration, renewals and backend verification all shape whether users reliably receive what they bought. Testing the actual released APK revealed behavior that code review alone would have missed.

We also learned to distinguish a request, a paid order and a fulfilled order clearly. Future harvest planning should communicate intent without pretending that payment or delivery has already happened.

What's next for Mavuno

Next we want feedback from farmers and buyers, a more polished onboarding and Premium experience, and production store distribution. We will validate pricing and demand with real users rather than treating sandbox purchases as revenue.

The current downloadable build is a test release. RevenueCat purchases are simulated, and successful real-money produce payment and delivery are not claimed as part of this demo.

The rc.8 release adds the Mavuno wheat launcher and splash branding and includes the Premium renewal-verification fix. The completed two-account purchase and harvest-request walkthrough was tested on rc.7.

Built With

Share this project:

Updates

Submission history