ITECA3-T12 (OL) · Web Development & e-Commerce
Deliverable 4 · Final Presentation
Me2You
A C2C e-commerce platform for South Africa's informal economy. Verified sellers, escrow-protected payments, POPIA-compliant.
Hosted live · m2y.online 62 tables · 50 migrations PHP 8.3 · MySQL 8 AWS auto-scaling
Presented by
Marco Pretorius
Student no. con-1200991-l3d8
ITECA3-T12 (OL) · Online EOL Group 1
Prepared for
Mr. Ndabana. N.
Eduvos · Information Technology
Submission date
12 June 2026
Block 2 · 2026
Agenda

17 weeks. 4 deliverables. One live platform.

We'll walk each phase in order, then open the live site at m2y.online for the demo.

145 marks
30 + 50 + 50 + 15 across the four deliverables
01
D1 · 30 marks
Proposal
18 Feb → 27 Feb
Problem, scope, 5 measurable goals, full Gantt across 5 phases.
Graded 89%
02
D2 · 50 marks
Design
2 Mar → 3 Apr
Brand system, wireframes, architecture, 60-table schema, clickable prototype.
Submitted
03
D3 · 50 marks
Build & deploy
6 Apr → 5 Jun
Three sprints, then AWS go-live at m2y.online.
Live
04
D4 · 15 marks · TODAY
Presentation
8 Jun → today
User manual, this deck, and the live walkthrough you're watching now.
You are here
Me2You
Agenda · m2y.online
PART ONE
I lost R30 000
to C2C scams.
So I built this.
Loss 01 · Counterfeit cash
R 4 000
Sold a phone for business cashflow. A professional scammer paid me with counterfeit notes I only spotted at the bank.
Loss 02 · Stolen device
Dell · bricked
Traded for a Dell laptop. Two years later the original owner activated a remote BIOS lock. The device was stolen, the seller long gone, Marketplace offered nothing.
Loss 03 · Dormant account
MacBook
My own MacBook had a dormant previous-owner account. Solved it after weeks of back-and-forth. Most people couldn't.
“What would have solved this?”
→ Me2You
Me2You
Part 1 · Why this matters to me
The opportunity

Two economies. Only one is online.

South Africa's online retail is a polished R130 billion. Its informal economy is seven times bigger and almost invisible online.

R-billions, 2025
Formal e-commerce
R130bn
14% of the SA total
~10% of retail
Informal economy
R900bn
7× LARGER
80% unregistered

No central storefront, no escrow, no reviews, no record.

Me2You sits in that gap.

Sources · World Wide Worx & Mastercard 2025 · Standard Bank Township Report 2025
3.7M
Informal traders nationally (Stats SA)
49%
Sell from home
63%
Cite marketing as their #1 need
~20%
Of all SA jobs
Me2You
The opportunity · m2y.online
The four problems

Four reasons C2C marketplaces don't work here.

01
CORE

No verified C2C platforms

Gumtree, Facebook Marketplace and OLX don't verify identity. No escrow. No dispute resolution. The buyer carries all the risk.

02

No local payment rails

Cash and informal EFT dominate. No C2C platform we found integrates PayFast, SnapScan or Ozow for informal traders.

03

No central moderation

Scams and counterfeit listings operate without consequence. First-time buyers absorb the loss when checks fail.

04

Data-heavy interfaces

Global C2C platforms assume fibre. R30 to R50 a month prepaid bundles can't browse them. The rural digital gap deepens.

INSIGHT

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.

Me2You
Problem space · m2y.online
Who Me2You serves

The seller is a person, not a brand.

Three connected audiences. Each is a real person with a real phone, a real budget, and a real reason existing marketplaces don't fit.

Township trader
~1.8M people

Sells from home or a street pitch. Reach beyond the block without abandoning cash-friendly transactions.

49% home-based
25% street pitch
Side-hustler
~900K people

Resells clothes, electronics, and second-hand goods. WhatsApp groups and Marketplace are today's tools, but neither has escrow.

63% need marketing
2nd income
Local buyer
~50M people

Browses on an entry-level Android with a prepaid bundle. Worries about "fake proof of payment" scams more than price.

R30 to R50/mo data
Mobile-only
ALSO SERVED
Hobbyist · sells what they make
Collector · trades within a niche
Seasonal seller · matric, Christmas, harvest
Niche community · vintage, agri, gaming
Me2You
Target population · m2y.online
Our actual flex
The only SA C2C marketplace that
sells everything, holds the money,
and dispatches its own drivers.
Yaga & Bob Shop already do escrow. Property24 and AutoTrader already do verticals. Couriers already do delivery. Nobody collapses all three into one stack: that's the Sixty60 model, applied to C2C.
PART TWO
The answer.
SELLS EVERYTHING
4 verticals
Items, property, vehicles, auctions: 27 categories on one account. None of our competitors do all four.
HOLDS THE MONEY
5-step escrow
Placed → Paid → Dispatched → Received → Completed. Disputes resolved by admins, cents-accurate.
MOVES THE GOODS
Own drivers
In-app dispatch, OSRM routing, race-safe job claim. Every order is potentially a job for someone in the same suburb.
Me2You
Part 2 · The Answer
Build philosophy
Let the main thing
stay the main thing.
Rassie Erasmus · Springbok head coach

The 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.

The trust spine
Buyer pays
R 450
Held in escrow
until buyer confirms
Seller paid
R 450
Example: @thandi_leather satchel · auto-releases 48h after “Received”
In service of

27 categories

Items, property, vehicles, auctions: one schema.

In service of

4 sale modes

Buy-now, auctions, swaps, reserve-with-deposit.

In service of

3 delivery paths

Collect, Paxi pickup, or own-driver dispatch.

In service of

TikTok-style feed

Swipe up to cart. Tap to unmute. Data-light.

In service of

20-page admin

Disputes, escrow ledger, audit log, payouts.

Me2You
The main thing · m2y.online
From the proposal

Acceptance criteria, scored.

5/5
acceptance criteria met
Goal · proposal language
Measurement · acceptance criteria
Evidence · file / URL / measurement
01
Hosted C2C marketplace
Full CRUD across listings, accounts, orders.
Live URL · end-to-end transaction
m2y.online · 38 listings · 27 categories · ALB & ASG
02
SA payments + fraud prevention
Local rail · escrow workflow · signed callbacks.
PayFast ITN signed · status workflow
app/webhooks/payfast_itn.php · 4-step verify · 5 statuses
03
RBAC administrative panel
Gated routes · separate chrome · audit log.
≥ 2 roles · audit log · gated
/admin/ · 20 pages · 4 roles · audit_log 3 yr
04
Low-bandwidth interface
Designed for prepaid Android on 3G.
Home < 5s on 3G · page < 1.5 MB
Lighthouse 92 · 1.18 MB · FCP 2.1 s
05
POPIA-compliant data handling
Consent · right to export · right to erasure.
Consent timestamped · export · delete
app/legal/popia.php · 3 controls · bcrypt cost 12
Me2You
Goals scorecard · m2y.online
DELIVERABLE 01
Proposal.
30 marks · 5 phases · 17 weeks
5 goals.
4 problems.
1 plan.
Submitted 2 days early. Graded 89% by Mr Ndabana on 20 March 2026. Everything in the next 24 slides traces back to this document.
25 Feb
Submitted · 2 days early
5 / 17
Phases · Weeks
20 Mar
Graded · NN Ndabana
89%
26.7 / 30
Me2You
D1 · Proposal
D1 · Project Proposal

The artefact, its sections, and how it scored.

PDF · 1.8 MB
ITECA3-T12 · Online EOL Group 1
Project Deliverable 1
Project Proposal
Marco Pretorius · con-1200991-l3d8
Prepared for Mr NN Ndabana
Me2You
A C2C marketplace for South Africa's informal economy
SUBMITTED
25 Feb 2026
EARLY BY
2 days
GRADED · 20 MAR 2026
26.7 / 30
89% · NN Ndabana
Table of contents

7 sections · the proposal at a glance

1.1IntroductionR130bn × R900bn
1.2Needs & problemsMakhitha & Ngobeni
1.3Goals & objectives5 measurable
1.4Procedures / scope of workWaterfall + Agile
1.5Timetable5 phases · 17 wk
1.6Conclusionsurvival to scale
Ref.Reference list · Harvard60+ sources
Promised → shipped

The commitments, audited

5 measurable goals with dated targets
5 / 5 met (slide 9)
Status workflow as lightweight escrow
5 states · PayFast ITN
RBAC admin · 2+ roles
/admin/ · 4 roles · 20 pages
Home < 5 s on 3G · < 1.5 MB
2.1 s · 1.18 MB
InfinityFree shared host (proposed)
AWS auto-scaling (delivered)
Me2You
D1 · Proposal recap · m2y.online
DELIVERABLE 02
Design.
Phase 2 · 2 Mar to 3 Apr 2026
Wireframes.
Schema.
Architecture.
Brand system, data model, architecture, and a clickable HTML and CSS prototype. All before line 1 of PHP.
5 wk
2 Mar to 3 Apr
62
DB tables specified
7
Key user flows
Canva
Mockups · Mermaid diagrams
Me2You
D2 · Design
Design system

Warm orange for trust. Plum for community. Mono for proof.

Three decisions carry the whole product. Defined once in prototype/colors_and_type.css and inherited by every page.

Brand palette
Brand Orange
#F89A1F
Orange 700
#C76B0F
Plum
#8E7CA0
Ink 900
#1F1A17
Orange 100
#FFE7C8
Plum 100
#ECE6F2
Success
#2F9E5A
Info
#2D7AC7
Danger
#D44A3A
Type
DISPLAY
Quicksand
BODY · UI
Nunito
CODE · LABEL
JetBrains Mono
Order status chips · same components as live
PLACED PAID DISPATCHED RECEIVED COMPLETED DISPUTED CANCELLED
Me2You
Me2You
Peace-sign decoded
M
Pinky & index form the M of Me
2
Middle & index spell the 2
Y
Thumb is the Y of You
One gesture · three letters · one promise
Me2You
Design system · m2y.online
Wireframes

Hand-drawn at three breakpoints, three variations each.

Live preview embedded below, pulled straight from app/hub/wireframes/. Annotated, 3 breakpoints, hand-drawn aesthetic.

7 flows
Home, Browse, PDP, Checkout, Seller, Auth, Orders
Marketplace, consumer 13 panels, 3 breakpoints
Admin RBAC Disputes, payouts, audit log
Driver, courier app Apply, accept, deliver, cash out
METHOD
Hand-drawn in HTML & CSS
Annotated, no real photos
3 layouts per screen, compared before commit
All artefacts in GitHub prototype/
Me2You
Wireframes · m2y.online
DATA STAYS LOCAL

A request travels four tiers. All inside South Africa.

From a township-Android browser to a PayFast callback. Same data centre, same rand, no exchange-control question.

EXAMPLE TRACE · PLACE AN ORDER
browserapp/checkout/orders + order_itemsPayFastapp/webhooks/payfast_itn.phpescrow_held
01
CLIENT
Mobile browser · PWA
HTML5 Bootstrap 5 Vanilla JS Leaflet 1.9 offline.html
Built for an entry-level Android on a prepaid 3G bundle.
HTTPS · TLS 1.3 · HSTS
02
APPLICATION
PHP 8.3 · procedural, file-per-route
PDO prepared CSRF tokens e() output escape Auth & RBAC Rate limit CSP
No framework, no jQuery. By the module brief.
PDO · persistent connection
03
DATA
MySQL 8 · Redis
62 tables · 50 migrations InnoDB · utf8mb4 Composite indexes RDS Multi-AZ Redis sessions S3 uploads
Schema breakdown on slide 16.
HMAC-signed webhooks
04
SERVICES · SA-LOCAL
PayFast · Paxi · Titan · OSRM · Nominatim
PayFast payments Paxi pickup network Titan SMTP email OSRM road routing Nominatim SA geocoding
Single rand-to-rand transaction, no SARB exchange-control question.
Diagrams in repo Site architecture, DFD, EERD, sequence flows app/hub/diagrams/
Me2You
System architecture · m2y.online
Data model

62 tables. 11 carry the transaction.

Buyer, seller, driver and community manager are capabilities on a single users row. Every other table joins back here.

11 · of 62
tables on the trust spine
users
user_id PK · email · password_hash · display_name · role · lat,lng · trust_tier · popia_consent_at
listings
seller_id FK → users
kind · title · price_cents · status
communities
manager_id FK → users
slug · town · rules
orders
buyer_id FK → users
total_cents · escrow_state · order_status
listing_images
listing_id FK · path · webp
offers · auctions
listing_id FK · bid_cents
laybye_plans SCAFFOLDED
order_id FK · weeks · paid
messages
from_id FK, to_id FK → users
order_items
order_id FK · listing_id FK · qty
disputes
order_id FK · state · evidence
users (root entity) listings & products orders & commerce trust / disputes Full schema in db/schema.sql · 62 tables · 50 migrations
Me2You
Data model · m2y.online
Order lifecycle · the trust spine

The platform holds the money. The buyer releases it.

At every state, exactly one party owns the money. Always. Auto-release fires 48 hours after the buyer confirms receipt.

R 450
example order · @thandi_leather
Buyerapp/checkout/index.php
Placed
T+0 · R 450 escrowed
PayFast redirect
HMAC-signed cart
Paid
T+10s · ITN 4-step verify
Sellerapp/orders/list.php
Paid
R 450 held in escrow
Dispatched
T+1d · Paxi label printed
In transit
tracking events stream
Buyerapp/orders/track.php
Received
T+3d · 48h timer starts
Completed
T+5d · R 450 → seller
Reviewed
optional · two-sided
If something breaksapp/disputes/open.php
Disputed
escrow frozen · 4 evidence images
Counter-statement
seller reply within 72h
Admin resolves
refund · release · split (cents-accurate)
TAKE ONE THING
Money never sits with the seller until the buyer says so. That's the whole pitch.
Me2You
Order lifecycle · m2y.online
Role-based access control

Four roles. One users table.

Buyer and seller are capabilities, not separate signups. Driver is granted after KYC. Admin sits behind a gate at /admin/.

Buyer
DEFAULT · EVERY USER
Browse, cart, checkout
Track orders · confirm receipt
Open dispute · leave review
Watchlist · saved searches
Offers · swaps · lay-bye
Message any seller
app/orders/checkout.php · csrf required
Seller
GRANTED ON FIRST LISTING
Create & manage listings
Items · properties · vehicles · auctions
Dispatch · print Paxi label
Seller dashboard + CSV export
OTP-verified payouts
Counter-statement on disputes
seller_capable($user)
Driver
APPLIED · ADMIN APPROVED
Accept open delivery jobs
Status: assigned → picked → delivered
Live GPS ping · OSRM route
Weekly earnings & cash-out
Two-sided rating with buyer
UPDATE deliveries SET driver_id=? WHERE id=? AND driver_id IS NULL
driver_active($user)
Admin
SITE-WIDE · INVITE ONLY
Only role with write access to audit log
Resolve disputes (refund · release · split)
Approve driver & KYC applications
Run weekly payouts
Audit escrow ledger
Moderate listings & users
role = 'admin' · /admin/index.php
One profile

Same login, same trust score. A buyer becomes a seller the moment they post their first listing · no separate signup, no second password.

Gates in code · example
<?php
require_role('admin');
// app/admin/disputes.php
Per-community grant

Community Manager is a row in community_managers · not a global role. Admin is invite-only and audit-logged.

Me2You
RBAC · m2y.online
DELIVERABLE 03
Build.
Phase 3 · 6 Apr to 17 May 2026
Vanilla PHP.
3 sprints.
By the book.
No framework. PHP file-per-route as the module brief requires. From empty database to a fully working marketplace.
6 wk
6 Apr to 17 May
49
Migration files
20
Admin pages live
0
Framework dependencies
Me2You
D2 · Build
The constraint

Vanilla PHP wasn’t a constraint. It was a choice.

ITECA3-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.

0
FRAMEWORK DEPENDENCIES
Discipline 01

File-per-route

Every URL is one PHP file. app/orders/track.php is one route, one concern, one read.

Discipline 02

Shared helpers

app/lib/ · Money, SaIdNumber, TrustScore, ShareLink. Pure functions, unit-tested.

Discipline 03

PDO prepared, always

Emulation off. Every query is parameterised. Zero string concat. Zero mysqli_query.

Discipline 04

Schema migrations

44 numbered SQL files in db/migrations/. Forward-only. Idempotent seeds.

// app/checkout/index.php · PDO prepared, idempotent, CSRF-checked
require_once __DIR__.'/../lib/Money.php';
$csrf->assert();
$stmt = $pdo->prepare("INSERT INTO orders (buyer_id, total_cents, order_status, idempotency_key)
  VALUES (?, ?, 'placed', ?)"
);
$stmt->execute([$buyerId, $totalCents, $idempotencyKey]);
$orderId = $pdo->lastInsertId();
// → POST to PayFast; the ITN response is HMAC-verified before flipping status to 'paid'
Proof it scales
62
DB TABLES
49
MIGRATIONS
20
ADMIN PAGES
92
LIGHTHOUSE
Me2You
Tech stack · m2y.online
Feature 01 · the marketplace

Browse. List. Cart. Check out.

All the standard C2C surfaces, sized for an entry-level Android on a prepaid bundle.

Me2You
Search Me2You
All
Clothes
Tech
Auto
Property
Leather satchel
R 450
Vintage hi-fi
R 2 100
Bike helmet
R 350
Soapstone bowl
R 180
Polymorphic listings

Four kinds in one table

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.

Search

Whitelisted sorts

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.

Cart

Price-watch built in

When you add at R 450 and the seller drops to R 400, we tell you. added_price_cents snapshot vs current price.

Checkout

PayFast + idempotency

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.

Me2You
Marketplace · m2y.online
Feature 02 · discovery

Discovery first, escrow second. The Yaga playbook, mobile-native.

Sellers 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.

app/feed.php

For You · Following · Near me

  • Tap to unmute · silent by default, prepaid-friendly
  • Swipe up · add the listing to cart
  • Long-press · save to wishlist with price-drop alerts
  • Only the visible card loads its video; others use 10×10 LQIP posters
listing_media table

Each upload is transcoded to a poster image and a 540p MP4 (≤ 8 MB). Likes, comments, shares are denormalised counters refreshed by a cron.

For You Following Near me
@thandi_leather · Jhb
Hand-stitched satchels • every colour • R 450
↑ Swipe up to cart
@sipho_amapiano
Refurb hi-fi system • with new tweeters • R 2 100
↑ Swipe up to cart
@nomsa_homecooks
Sunday lunch · 7 portions · R 380 · collect Soweto
↑ Swipe up to cart
Community hubs · OUR MOAT

Towns. Suburbs. Interest groups.

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.

Near me · geo discovery

The third tab uses cached lat/lng on users to surface listings within 5 km. Buyers in Soweto see Soweto-listed items first.

PREPAID-FRIENDLY

Only the visible reel loads its video. The rest sit as 10×10 LQIP posters at < 1 KB each.

Me2You
Discovery & community · m2y.online
Feature 03 · beyond "buy now"

Four ways to close a deal.

DIFFERENTIATOR
LIVE

Reserve with deposit

50% 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.

LIVE

Auctions

Time-boxed bidding with price-scaled minimum increments. SELECT … FOR UPDATE guards two simultaneous bids inside one transaction.

LIVE

Swap offers

Offer an item from your own listings in exchange instead of cash. Township barter, formalised. swap_listing_id FK on the offers table.

LIVE

Watch & price drop

Save a listing, get alerted when the price falls. The prev_price_cents snapshot drives the cron sweep.

ROADMAP

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.

Me2You
Transaction depth · m2y.online
Feature 04 · trust & safety

A trust score on every profile. Earned, not bought.

Six 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.

94
Top Seller
/ 100
SAMPLE PROFILE · @thandi_leather
★ 4.9 (218)112 sold3 yr member
Six signals · how 94 rolls up
app/lib/TrustScore.php
+ KYC tier
Verified ID auto-bumps tier on approval
+20
+ Ratings
Two-sided per role pair (buyer / seller / driver)
+22
+ Completed sales
Closed orders, capped at 50 contribute
+18
+ Account age
Compounding curve, plateaus at 3 years
+14
+ Public profile
Bio, avatar, social links present
+12
− Disputes / KYC fail
Open dispute or failed KYC · hard penalty
−30
RANK EFFECT
Top Seller badge in search · New profiles flagged at checkout
Trust bands

Four levels, one badge.

Top Seller
90-100
Trusted
70-89
Building
40-69
New
0-39
app/lib/TrustScore.php · unit-tested
Me2You
Trust score · m2y.online
Feature 05 · last-mile

Three delivery paths. One race-safe driver app.

A · CHEAPEST
R 0

Direct collection

Buyer collects from the seller. Safe-meetup finder suggests public, populated locations.

B · EASIEST
R 60

Paxi pickup

Store-to-store via the existing SA pickup network. HMAC-signed API with retry & idempotency.

C · FASTEST
R 80

Live driver

OSRM road routing, Nominatim SA geocoding, real-time GPS ping.

app/driver/accept.php · the killer detail

Two drivers tap the same job. Only one wins.

A conditional UPDATE … WHERE driver_id IS NULL claims the assignment atomically · no locks, no race, the loser sees “already taken”.

// First driver to POST wins. PHP + MySQL atomic claim.
$claimed = $pdo->prepare("UPDATE deliveries SET driver_id=?, status='assigned' WHERE id=? AND driver_id IS NULL");
$claimed->execute([$driverId, $deliveryId]);
if ($claimed->rowCount() === 0) return 'already_taken';
JOBS ECONOMY

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.

JOB #1042
Pickup · Maboneng
ASSIGNED
@thandi_leather
You · 3 min away
Drop · Killarney
12.4 km · ≈18 minR 78.50
Mark as picked up
app/driver/active.php · OSRM live route
Me2You
Delivery & driver · m2y.online
Feature 06 · payments

PayFast today. Provider-agnostic for tomorrow.

A 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.

ACTIVE
PayFast
Card · Instant EFT · Masterpass · SnapScan · 3DS
Sandbox now · live after PayFast KYC and bank verification.
Q3 2026
Ozow
Instant EFT · SA bank rails
Same ITN-style webhook contract.
Q3 2026
Mobicred
12-month revolving credit
For higher-ticket listings & auctions.
Q3 2026
Payflex
Pay in 4 · interest-free
Slots into the lay-bye schema already shipped.
Q4 2026
PayJustNow
3 instalments · no interest
Co-branded badge at checkout.
Q4 2026
Stripe
International cards · Connect platform
Cross-border buyers · post-SARB clearance.
app/checkout/index.php · gateway switch

One interface, six implementations.

// Switching providers is a config flag, not a refactor.
interface Gateway { function redirect($o); function verify($p): bool; }
$gateway = Gateways::for($cfg['active_provider']); // payfast | ozow | mobicred | …
Why not Stripe today

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.

Me2You
Payments · m2y.online
Feature 07 · admin moderation

20 admin pages. Every action audited.

Separate URL space at /admin/, gated by require_role('admin'). Every write hits audit_log with actor, IP, before/after JSON.

3 yr
audit log retention
Me2You · Admin
DEMO DATA
Dashboard
Users
Listings
Orders
Disputes7
Refunds
Payouts
Escrow ledger
Verifications
Communities
Reports
Audit log
Open queue · 7
5d MED-TIME
93% RESOLVED
2 SLA BREACH
#D-0188
Order didn't arrive
Order #4451 · @sipho ↔ @nomvula · 2 days ago
EVIDENCE PENDING
R 2 100
Resolve
#D-0187
Item not as described
Order #4448 · @thandi ↔ @marcus · 18h ago
UNDER REVIEW
R 450
Resolve
#D-0185
Refund requested
Order #4435 · @lerato ↔ @kabelo · 4 days ago
SLA BREACH 2h
R 980
Resolve
#D-0184
Counter-statement filed
Order #4429 · @pretty ↔ @khaya · 1d ago
AWAITING ADMIN
R 1 350
Resolve
audit_log · 04:18 · admin@m2y.online · resolve #D-0182 → refund R 540 · from 196.4.x.x 11 entries today
Me2You
Admin panel · m2y.online
Feature 08 · security & POPIA

Money sits on the line. Security gets the floor, not the ceiling.

Defence-in-depth
Built to hold money,
not just show items.

Every control below is enforced in code or at the load balancer. Nothing relies on policy.

  • PayFast ITN verified in 4 steps (signature, source IP, postback, amount) before escrow flip
  • Bcrypt cost 12 with auto-rehash on every login
  • CSP + HSTS set in PHP, enforced at the ALB · preload-ready
  • CSRF + rate-limit on every state-changing route, no exceptions
App layer

Inside every request

  • CSRF token on every POST
  • e() escape on every output
  • PDO prepared · emulate_prepares=false
  • Rate-limit on auth + password-reset
  • Session regenerates on role change
  • Uploads go through MIME-sniff + EXIF strip
POPIA compliance

Your data, on your terms

  • Explicit consent timestamped on signup
  • Privacy & Cookie policies linked sitewide
  • Account › Export (full JSON dump)
  • Account › Delete (cascading)
  • Audit log retained 3 years, read-only
  • S3 buckets server-side encrypted
Me2You
Security & POPIA · m2y.online
Feature 09 · performance

Engineered for a R30-a-week prepaid bundle.

The 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.

Slow-3G test · 50 kbps

m2y.online home page

UNDER BUDGET
First contentful paint
2.1s
budget 5s
Largest contentful paint
4.3s
budget 5.5s
Total page weight
1.18MB
budget 1.5MB
Cumulative layout shift
0.02
budget 0.1
Lighthouse · mobilePerf 92 · Access 98 · Best 100 · SEO 96
Images

3 variants · 4 formats

Every upload produces a thumb, a display, and a 10×10 low-quality placeholder · served as both JPEG and WebP through a <picture> element.

Caching

Long-cache + filename hash

Static assets get a 1-year Cache-Control with hashes for cache-busting. mod_deflate gzip. HTTP/2 at the ALB.

Fonts

Self-hosted · zero third-party

Quicksand and Nunito served from same origin, subset to Latin, with font-display: swap.

Me2You
Performance · m2y.online
DELIVERABLE 03 · LIVE
Live.
Phase 4 · 18 May to 5 Jun 2026
1 URL.
m2y.online.
Live, now.
Over-delivered: the proposal said InfinityFree shared hosting. We deployed on AWS with auto-scaling, multi-AZ RDS, ElastiCache and S3.
AWS
ALB · ASG · RDS · S3
Terraform
One apply, reproducible
2.1s
3G first paint, measured
5 Jun
D2 submission
Me2You
D4 · Live platform
AWS deployment

Why these services. Why not the alternative.

Every component is a deliberate choice over a cheaper alternative. Money sits in the database. Outage equals frozen escrow. We chose for resilience first.

~R 800
monthly minimum · scales linearly
Network · af-south-1
Route 53 · ACM cert
Application Load Balancer
ASG · 2 to 6 EC2 t3.small
az-a
az-b
az-c
RDS
Multi-AZ
Redis
ElastiCache
S3
SSE-S3
DECISION 01
Multi-AZ RDS, not single-AZ

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.

DECISION 02
ASG, not bare EC2

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.

DECISION 03
Redis sessions, not in-process

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.

DECISION 04
Terraform IaC · no click-ops

VPC, ALB, ASG, RDS, ElastiCache, S3, IAM roles, Route 53 records: one terraform apply. Re-runnable. Disaster-recoverable.

DOMAIN
m2y.online via GoDaddy → Route 53 alias
EMAIL
Titan SMTP · SPF / DKIM / DMARC aligned
CI/CD
GitHub Actions · zero-downtime rolling deploy
Me2You
AWS · m2y.online
By the numbers

A platform, not a prototype.

Everything below is in the repo, in the live database, and walkable in the demo.

62
Database tables
db/schema.sql
49Migration files
38Live demo listings
27Product categories
20Admin pages
19Notification event types
11Transactional emails
3Delivery options
4Transaction modes
5 / 5Proposal goals met
Me2You
By the numbers · m2y.online
Live walkthrough

Open m2y.online · let's go.

Demo · 7 minutes
  1. Sign in as buyer · browse home, search, filter
  2. Open a listing · add to cart · checkout
  3. Pay via PayFast sandbox · watch status flip live
  4. Switch to seller account · mark "Dispatched"
  5. Switch to buyer · confirm "Received"
  6. Sign in as admin · disputes · audit log · escrow ledger
  7. Drop into the discovery feed · swipe a video to cart
BUYER
SELLER
seller@m2y.online
DRIVER
driver@m2y.online
ADMIN
PayFast
SANDBOX · ZAR
Virtual wallet
Step 1
Redirect
Step 2
Complete Payment
Step 3
Back to site
PayFast sandbox virtual wallet, no real money moves
On Complete Payment, the ITN webhook flips the order from Placed to Paid.
Me2You
Live demo · m2y.online
Beyond the assignment

Where Me2You goes from here.

The architecture is built for these. Lay-bye is already in the schema; the others are partner-led, not engineering-blocked.

Q1
90 DAYS
Lay-bye partnership
Pay-it-off-in-weekly-instalments, the way SA shoppers already buy big-ticket items · brought into a C2C escrow flow for the first time.
Schema ready: laybye_plans, laybye_instalments
Needs an NCA-registered banking partner
1.5% platform fee on plan value
Q2
6 MONTHS
WhatsApp Business
SA's #1 messaging channel. Listing share, order updates, OTPs and a “Reply-to-buy” that turns a WhatsApp message into a Me2You cart.
Cloud API · Meta Business approved sender
Drop SMS for OTP · cuts ≈50% of auth cost
Two-way chat continues inside the app
Q3
9 MONTHS
Vendor app · APK
A native Android wrapper for sellers and drivers. Push notifications for offers, new orders, dispatch · without the data cost of a PWA reload.
Capacitor wrapper on the existing PWA
Side-loaded APK (no Play Store dependency)
Foreground service for live driver GPS
Revenue model
Commission per sale
4.0%
Featured listing placement
R 10 to 30
Verified Plus subscription
R 49 / mo
Driver dispatch take
18%
Lay-bye platform fee (Q1)
TBC, NCA partner

Etsy 6.5%, eBay up to 13.25%. We chose 4% because we sell the trust, not the listing.

What protects us

Built for local rails.

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.

Me2You
Roadmap · m2y.online
Bibliography

Sources and academic anchors.

Around 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.

~50
Harvard references
Market & opportunity
[01]
World Wide Worx & Mastercard, 2025.
Online Retail in South Africa 2025.
R130 billion projected e-commerce turnover, 10% of total retail spend.
[02]
Standard Bank, 2025.
Township Economy Report.
R900 billion informal economy. 49% home-based, 25% street-based, 80% unregistered.
[03]
Statistics South Africa, 2025.
Quarterly Labour Force Survey, Q1.
3.7 million informal traders. Informal sector ~20% of national employment.
[04]
BCG Global, 2019.
How Online Marketplaces Can Power Employment in Africa.
Trust, security & C2C theory
[05]
Makhitha, K.M. & Ngobeni, K., 2023.
Factors influencing online consumer-to-consumer (C2C) shopping in South Africa.
Identifies trust, payment security and seller verification as the binding constraint among township consumers.
[06]
Laudon, K.C. & Traver, C.G., 2022.
E-Commerce: Business, Technology, Society. 17th ed.
Six dimensions of e-commerce security: integrity, non-repudiation, authenticity, confidentiality, privacy, availability.
[07]
Nixon, R., 2021.
Learning PHP, MySQL & JavaScript. 6th ed.
Prescribed textbook. PDO prepared statements, session security, full-stack patterns.
[08]
University of Pretoria, n.d.
Institution-based trust in South African C2C e-commerce.
Confirms institutional safeguards (verified ID, escrow, dispute resolution) as the primary trust drivers.
ALSO CITED
South African Reserve Bank, 2024
Clarity Ventures, 2023
Goliath, 2025 (biker delivery)
Tracker SA, n.d. (delivery crime)
Eduvos LMS Lessons 1, 7, 11, 15, 16
Simplilearn, 2022 (SDLC)
PayFast ITN docs
+ 30 more in the proposal PDF
Me2You
References · m2y.online
Thank you
Questions welcome
Me2You
Built for the South Africans who built South Africa.
WHAT'S NEXT

Today 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.

TRY IT ON YOUR PHONE
Demo accounts: buyer@ · seller@ · driver@ · admin@
QR code to m2y.online
scan
PRESENTED BY
Marco Pretorius · con-1200991-l3d8
ITECA3-T12 (OL) · Online EOL Group 1
Prepared for Mr Ndabana · Eduvos · Block 2 · 2026