We'll walk each phase in order, then open the live site at m2y.online for the demo.
Me2You
Me2YouSouth Africa's online retail is a polished R130 billion. Its informal economy is seven times bigger and almost invisible online.
No central storefront, no escrow, no reviews, no record.
Me2You sits in that gap.
Me2YouGumtree, Facebook Marketplace and OLX don't verify identity. No escrow. No dispute resolution. The buyer carries all the risk.
Cash and informal EFT dominate. No C2C platform we found integrates PayFast, SnapScan or Ozow for informal traders.
Scams and counterfeit listings operate without consequence. First-time buyers absorb the loss when checks fail.
Global C2C platforms assume fibre. R30 to R50 a month prepaid bundles can't browse them. The rural digital gap deepens.
Trust is the binding constraint. Makhitha & Ngobeni (2023) identify payment security and seller verification as the single greatest barrier to C2C adoption among township consumers.
Me2YouThree connected audiences. Each is a real person with a real phone, a real budget, and a real reason existing marketplaces don't fit.
Sells from home or a street pitch. Reach beyond the block without abandoning cash-friendly transactions.
Resells clothes, electronics, and second-hand goods. WhatsApp groups and Marketplace are today's tools, but neither has escrow.
Browses on an entry-level Android with a prepaid bundle. Worries about "fake proof of payment" scams more than price.
Me2You
Me2YouThe main thing on Me2You is simple: the buyer gets the thing, the seller gets the money. Everything you'll see in the next 25 slides: the feed, the auctions, the driver app, the admin panel: exists to keep that one promise.
Items, property, vehicles, auctions: one schema.
Buy-now, auctions, swaps, reserve-with-deposit.
Collect, Paxi pickup, or own-driver dispatch.
Swipe up to cart. Tap to unmute. Data-light.
Disputes, escrow ledger, audit log, payouts.
Me2Youm2y.online · 38 listings · 27 categories · ALB & ASG
/admin/ · 20 pages · 4 roles · audit_log 3 yr
Me2You
Me2You/admin/ · 4 roles · 20 pages
Me2You
Me2YouThree decisions carry the whole product. Defined once in prototype/colors_and_type.css and inherited by every page.
Me2YouLive preview embedded below, pulled straight from app/hub/wireframes/. Annotated, 3 breakpoints, hand-drawn aesthetic.
Me2YouFrom a township-Android browser to a PayFast callback. Same data centre, same rand, no exchange-control question.
browser → app/checkout/ → orders + order_items → PayFast → app/webhooks/payfast_itn.php → escrow_held
Me2YouBuyer, seller, driver and community manager are capabilities on a single users row. Every other table joins back here.
Me2YouAt every state, exactly one party owns the money. Always. Auto-release fires 48 hours after the buyer confirms receipt.
orders.order_status · escrow ledger: app/admin/escrow.php
Me2Youusers table.Buyer and seller are capabilities, not separate signups. Driver is granted after KYC. Admin sits behind a gate at /admin/.
Same login, same trust score. A buyer becomes a seller the moment they post their first listing · no separate signup, no second password.
Community Manager is a row in community_managers · not a global role. Admin is invite-only and audit-logged.
Me2You
Me2YouITECA3-T12 specifies procedural PHP, no framework. We chose the brief literally and made it scale with discipline: shared helpers, file-per-route, schema migrations, PDO everywhere.
Every URL is one PHP file. app/orders/track.php is one route, one concern, one read.
app/lib/ · Money, SaIdNumber, TrustScore, ShareLink. Pure functions, unit-tested.
Emulation off. Every query is parameterised. Zero string concat. Zero mysqli_query.
44 numbered SQL files in db/migrations/. Forward-only. Idempotent seeds.
Me2YouAll the standard C2C surfaces, sized for an entry-level Android on a prepaid bundle.

Item · condition, brand · Property24-class: erf_number, levy, estate, amenities · AutoTrader-class: engine_cc, power_kw, VIN · Auction: closes_at, min_increment. One schema, vertical-specific JSON column for the rest.
Best match · trending · ending soon · recently reduced · closest to me · nearest community. One whitelist, never concatenated. Geo sorts use the cached lat/lng on users.
When you add at R 450 and the seller drops to R 400, we tell you. added_price_cents snapshot vs current price.
Idempotency token stops a back-button double-charge. ITN webhook is 4-step verified (signature, source IP, postback, amount match) before status flips to paid.
Me2YouSellers post short clips. Buyers swipe, tap to unmute, swipe up to cart, never leaving the reel. Every video tile funnels straight into the escrow flow.
Each upload is transcoded to a poster image and a 540p MP4 (≤ 8 MB). Likes, comments, shares are denormalised counters refreshed by a cron.
Per-town and per-interest spaces with their own community managers. Local supply, local trust. Yaga doesn't have this. Bob Shop doesn't have this.
The third tab uses cached lat/lng on users to surface listings within 5 km. Buyers in Soweto see Soweto-listed items first.
Only the visible reel loads its video. The rest sit as 10×10 LQIP posters at < 1 KB each.
Me2You50% deposit into escrow. Seller approves within 7, 14 or 30 days. On expiry, deposit splits 25/25. Both parties tick a timestamped risk-ack. No other SA C2C does this.
Time-boxed bidding with price-scaled minimum increments. SELECT … FOR UPDATE guards two simultaneous bids inside one transaction.
Offer an item from your own listings in exchange instead of cash. Township barter, formalised. swap_listing_id FK on the offers table.
Save a listing, get alerted when the price falls. The prev_price_cents snapshot drives the cron sweep.
Pay-it-off-in-weekly-instalments lay-bye is scaffolded in laybye_plans (slide 16). Waiting on an NCA-registered banking partner before going live.
Me2YouSix signals roll up into one number from 0 to 100, surfaced wherever the user appears · on listings, in search, inside messages, beside the buy button.
Me2YouBuyer collects from the seller. Safe-meetup finder suggests public, populated locations.
Store-to-store via the existing SA pickup network. HMAC-signed API with retry & idempotency.
OSRM road routing, Nominatim SA geocoding, real-time GPS ping.
A conditional UPDATE … WHERE driver_id IS NULL claims the assignment atomically · no locks, no race, the loser sees “already taken”.
Every order is potentially a job for someone in the same suburb. Platform takes 18%, driver keeps 82%. Same Checkers Sixty60 split, applied to C2C.
Me2YouA single payment abstraction sits behind the checkout. PayFast is the active rail; the others are wired into the same interface and toggle on with a config flag once each provider's KYC clears.
A UK Stripe entity settles GBP to a UK bank. SA buyers pay ZAR: every transaction would carry FX cost plus a SARB exchange-control question. PayFast lands rand-to-rand, supports 3DS & SA-local rails out of the box.
Me2YouSeparate URL space at /admin/, gated by require_role('admin'). Every write hits audit_log with actor, IP, before/after JSON.

Me2YouEvery control below is enforced in code or at the load balancer. Nothing relies on policy.
e() escape on every outputemulate_prepares=false
Me2YouThe proposal goal was home page first paint under five seconds on a Slow-3G connection. We hit 2.1 seconds. Slide 6 said the local buyer browses on entry-level Android with prepaid data · this slide proves we built for them.
Every upload produces a thumb, a display, and a 10×10 low-quality placeholder · served as both JPEG and WebP through a <picture> element.
Static assets get a 1-year Cache-Control with hashes for cache-busting. mod_deflate gzip. HTTP/2 at the ALB.
Quicksand and Nunito served from same origin, subset to Latin, with font-display: swap.
Me2You
Me2YouEvery component is a deliberate choice over a cheaper alternative. Money sits in the database. Outage equals frozen escrow. We chose for resilience first.
Money sits in orders.escrow_state. A database outage means the platform can't release funds. Multi-AZ adds 60 seconds of failover, not 24 hours of incident.
Auctions close at fixed times. Traffic spikes around endings. The ASG absorbs the burst from min 2 to max 6 t3.small instances, then scales back when idle.
Sessions survive rolling deploys. A buyer mid-checkout doesn't get logged out when we ship a fix. ElastiCache keeps the session token even when its EC2 host gets terminated.
VPC, ALB, ASG, RDS, ElastiCache, S3, IAM roles, Route 53 records: one terraform apply. Re-runnable. Disaster-recoverable.
Me2YouEverything below is in the repo, in the live database, and walkable in the demo.
Me2You
Me2YouThe architecture is built for these. Lay-bye is already in the schema; the others are partner-led, not engineering-blocked.
laybye_plans, laybye_instalmentsEtsy 6.5%, eBay up to 13.25%. We chose 4% because we sell the trust, not the listing.
A foreign incumbent has to onboard PayFast, Paxi, Titan, SARB exchange-control clearance, SA-first geocoding, and POPIA compliance before they can launch a single transaction in our market.
Done as our final-year project.
Me2YouAround 50 Harvard-cited references in the D1 proposal. The eight most load-bearing are below; the full bibliography sits in the proposal PDF, submitted via Moodle on 25 February 2026.
Me2YouToday it's in its infancy. Work and a relocation to the UK make this a side project from now on. One day, when the time is right, I'll launch it as a fully-fledged platform for Africa's informal economy. Until then, I keep building.