Case study

GreenTag — turning e-waste into a trusted marketplace.

A QR-verified peer-to-peer marketplace that connects households in Uganda with buyers who repair or repurpose broken and unused electronics — backed by secure escrow payments and a green-impact engine that calculates the CO₂ emissions each reused device avoids.

GreenTag marketplace dashboard preview

Unused and broken electronics pile up in Ugandan households with nowhere structured to go. Existing classifieds platforms let people list a device, but they do nothing to verify a physical handover, protect either side's money, or capture the environmental value of keeping a device in circulation instead of the landfill.

The goal was to make handing a device to a stranger feel safe — and to make the environmental payoff of doing so visible.

I worked on building a marketplace where sellers and buyers exchange devices with a cryptographic QR handover check, funds held in escrow until that handover is confirmed, and a live estimate of the CO₂ emissions avoided by not manufacturing a new device.

Built for three different roles.

The system supports Sellers, Buyers, and Admins, with each role scoped to exactly what it needs and nothing more.

Seller

List a device, approve a buyer, get paid

Registers an end-of-life device through a KYC-gated form, reviews buyer interest, and generates a cryptographic QR code tied to the listing for handover.

Buyer

Discover, claim, and scan to pay

Browses the public marketplace, expresses interest in a device, then scans the seller's QR code at pickup to confirm the handover and release escrow.

Admin

Oversee trust and safety

Approves seller KYC, resolves payment disputes, and monitors platform-wide green impact data across every listing.

Trust and environmental impact, built into the transaction.

The hard problem wasn't the UI — it was making a stranger comfortable handing a device to another stranger. Two mechanisms solved that: cryptographic QR handover verification, and a 7-day escrow window that only releases funds once the handover is confirmed.

GreenTag QR handover and escrow interface

Buyers scan a tokenized QR code at physical handover, which verifies the device and triggers the escrow release.

Optional image slot: add a marketplace or impact-dashboard screenshot here.

What the app includes

Role-based auth for Sellers, Buyers, and Admins; seller KYC verification; listing creation with multi-image upload; buyer interest and approval flow; QR-based handover verification; 7-day escrow payments with dispute resolution; and an automated CO₂ savings calculation generated for every listed device.

These features mattered because trust, not features, was the real product — the QR verification and escrow exist specifically to answer "would I actually hand my broken laptop to this person?"

The state transition that could not be skipped.

The handover flow had to keep QR verification, escrow, and payment release in the correct order even when users retried a request or arrived with an outdated screen.

I traced inconsistent payment states to a flow that trusted the frontend's current step instead of checking the listing and escrow state on the server.

// the rule: release only after verified handover
if (handover.verified && escrow.status === 'held') releaseFunds();

The fix moved the transition guard into the API and made the operation idempotent. Repeated scans now return the existing result instead of advancing the transaction twice.

A decoupled React + Flask stack built for state integrity.

React 19 on Vite drives the three role-based dashboards and QR scan/generate flows. Flask 3.0 exposes a JWT-authenticated REST API with role-based access control. PostgreSQL, via SQLAlchemy, enforces the listing, payment, and escrow state machine with strict enums so a transaction can never skip a step.

React 19
Marketplace UI, QR scan/generate, dashboards
Flask API
Auth, RBAC, escrow logic, Green Engine
PostgreSQL
Users, listings, payments, CO₂ data

This project sharpened my approach to trust-first product design.

Building GreenTag pushed me past CRUD thinking. The real engineering problem lived in the state machine — listing, interest, QR verification, escrow, release — and in turning an abstract CO₂ calculation into something a non-technical seller would actually trust. It was also my first time shipping a full Flask and SQLAlchemy backend end-to-end, from RBAC decorators to a UUID-based schema designed to resist enumeration.