/* Me2You - Auth screens: Login, Register (POPIA), Forgot Password, Profile */ /* global React, Icon, Field, panelStyle, btnPrimary, btnGhost, btnSmall */ const { useState } = React; function AuthLogin({ onLogin, onRegister, onForgot }) { return (

Welcome back

Let's pick up where you left off.

Don't have an account?
); } function AuthRegister({ onRegister, onLogin }) { const [consent, setConsent] = useState(false); const [role, setRole] = useState('buyer'); return (

Join Me2You

Start buying or selling in minutes.

{[ {key:'buyer', label:'Buy things', icon:'shopping-bag'}, {key:'seller', label:'Sell things', icon:'package'}, {key:'both', label:'Both', icon:'star'}, ].map(r => ( ))}
{/* POPIA consent - required */}
setConsent(e.target.checked)} style={{accentColor:'var(--brand-orange)',marginTop:3,width:18,height:18,flexShrink:0}}/>
I consent to Me2You processing my personal information
As required by POPIA (Protection of Personal Information Act). Your data is stored securely with bcrypt password hashing. We never share your information with third parties without your consent. Read our Privacy Policy.
Already have an account?
); } function AuthForgot({ onBack }) { const [sent, setSent] = useState(false); return (

Reset your password

We'll email you a reset link.

{!sent ? (
) : (

Check your inbox

If that email is registered, you'll receive a password reset link within a few minutes.

)}
); } /* --- Seller OTP Verify (self-collect) --- */ function SellerOTPVerify({ onBack }) { const [digits, setDigits] = useState(['','','','','','']); const [verified, setVerified] = useState(false); return (
{!verified ? ( <>

Self-collect verification

Ask the buyer for their 6-digit collection code.

{[0,1,2,3,4,5].map(i => ( { const v = e.target.value.replace(/\D/g,''); const nd = [...digits]; nd[i] = v; setDigits(nd); if (v && i < 5) e.target.nextSibling?.focus(); }} style={{width:48,height:56,textAlign:'center',fontSize:24,fontFamily:'var(--font-mono)',fontWeight:700, border:'2px solid var(--ink-200)',borderRadius:'var(--radius-sm)',background:'var(--paper)', transition:'border-color .15s'}}/> ))}
) : ( <>

Collection confirmed

Funds have been released to your account. The order is now complete.

)}
); } /* --- Profile / My Account --- */ function ProfilePage({ onNav }) { return (

My account

NM
Nomsa Mthembu
nomsa@email.co.za - Buyer
Member since Feb 2026

Personal information

Delivery address

Verification & trust

Security

POPIA & Privacy

Your data is protected under the Protection of Personal Information Act. Passwords are stored with bcrypt hashing. No personal data is shared with third parties without your consent.

Read Privacy Policy
); } /* --- Privacy Policy --- */ function PrivacyPolicy({ onBack }) { return (

Privacy Policy

Last updated: 1 May 2026

1. Introduction

Me2You ("we", "us", "our") is committed to protecting your personal information in compliance with the Protection of Personal Information Act, 2013 (POPIA). This policy explains what data we collect, why, and how we protect it.

2. What we collect

Registration details (name, email, phone), delivery addresses, order history, and payment references from PayFast. We never store full card numbers - payments are processed entirely through PayFast's secure gateway.

3. How we protect your data

All passwords are stored using PHP password_hash() (bcrypt). All database queries use prepared statements to prevent SQL injection. HTTPS is enforced with TLS terminated by AWS Certificate Manager on our load balancer.

4. Your rights under POPIA

You have the right to access, correct, or delete your personal information at any time. Contact us at team@m2y.online to exercise these rights.

5. Consent

By registering on Me2You, you explicitly consent to the collection and processing of your personal information as described in this policy. Your consent timestamp is recorded in our database.

); } /* --- Admin Payout Run --- */ function AdminPayoutRun() { const payouts = [ { seller:'Thandi Q.', bank:'FNB ****4521', amount:1850, orders:3, status:'pending' }, { seller:'Mama K.', bank:'Capitec ****7832', amount:380, orders:1, status:'pending' }, { seller:'Sipho M.', bank:'Nedbank ****1290', amount:3200, orders:5, status:'paid' }, { seller:'Naledi S.', bank:'Standard ****5643', amount:180, orders:1, status:'paid' }, ]; return (

Payout run

Release escrowed funds to sellers for completed orders.

Pending payout
R 2 230
Sellers waiting
2
Total paid (30d)
R 3 380
{payouts.map((p,i) => ( ))}
Seller Bank Orders Amount Status
{p.seller} {p.bank} {p.orders} R {p.amount.toLocaleString('en-ZA')} {p.status === 'pending' && ( )}
); } Object.assign(window, { AuthLogin, AuthRegister, AuthForgot, SellerOTPVerify, ProfilePage, PrivacyPolicy, AdminPayoutRun });