Wocart
Wocart runs the whole cash-on-delivery business for Algerian stores: an Arabic-first checkout, phone verification, Yalidine, ZR Express, NOEST, Guepex and 82 EcoTrack couriers, your own drivers, and M
翻訳待ち
SpazaLink links township spaza shops to verified wholesalers, tracks their stock, and turns their trading history into a Financial Health Report they can take to a bank.
翻訳待ち
コマースTypeScript · JavaScriptGitHub @danielsnyashadzashe-boopオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Full shelves. Safe stock. Bank ready.
SpazaLink is a B2B web app for South African township spaza shops. It links shops to verified wholesalers, tracks their stock, and turns their trading history into a Financial Health Report they can take to a bank.
The idea comes from Rethabile Madonsela (founder and idea owner).
It's a live app that processes real user data against MongoDB Atlas, with sign-in handled by Clerk. Nothing in it is a static mock-up.
| Screen | What it does |
|---|---|
Inventory Dashboard (/dashboard) | Compliance score that updates as CIPC, BEE and tax documents are uploaded or removed. Colour-coded stock tracker. A low-stock alert slides down when an item drops into Red. Quick Fix adds the missing quantity to the cart and opens checkout. |
Ordering & Checkout (/order) | A catalogue of verified products only, each with SABS / Verified Supplier badges. The cart shows bulk discounts as a separate line. Payment toggles are PayShap, Instant EFT and Cash on Delivery. A live delivery timeline follows each order. |
Financial Portal (/finance) | Monthly spend chart and bank scorecard (total spent, on-time payments, credit health), plus a one-tap Financial Health Report PDF with the SpazaLink logo. |
npm install
cp .env.example .env.local # fill in MONGODB_URI and REPORT_SIGNING_SECRET
npx clerk@latest env pull # writes the Clerk keys for the linked "Spaza Link" app
npm run seed # wholesalers, catalogue, two demo shops + their Clerk users, sample PDFs
npm run dev # http://localhost:3000
Before you submit, run the security checks against a production build:
npm run build && npm start # terminal 1
npm run test:brief # terminal 2: 80 checks, one per item in the project brief (writes BRIEF_TEST_REPORT.md)
npm run test:security # terminal 2: 66 security, role, demo shop and data wall checks
Windows clock. Clerk rejects session tokens that look "issued in the future". If your PC clock is more than a few seconds off, sign-in loops back to the sign-in page. Sync it under Settings → Time & language → Date & time → Sync now.
| Password | ||
|---|---|---|
| Demo shop (Thandi's Spaza, Soweto) | [email protected] | Spaza@2026 |
| Second shop, for showing the data walls (Sipho's Corner Store) | [email protected] | Spaza@2026 |
| Platform admin (admin portal) | [email protected] | Spaza@2026 |
If Clerk asks for a verification code, enter 424242. That code works for any +clerk_test address on a development instance. The same accounts are shown on the sign-in page with copy buttons.
Thandi's shop is preloaded with stock in all three colours, six months of orders, and CIPC + BEE documents (85% Ready). Sipho's shop has no documents, so you can demo uploads live with samples/sample_cipc_certificate.pdf and samples/sample_bee_affidavit.pdf. Run npm run seed again at any time to reset both demo shops. It also resets the demo users' passwords in Clerk.
Thandi's Spaza is the shared demo shop (isDemo: true in the seed).
DEMO_READ_ONLY./admin)Open to the Platform admin role only. The role is stored in the Clerk user's publicMetadata.role and checked on the server for every admin request. Everyone else gets an "Admins only" screen, and the API answers 403.
| Page | What it shows | Forms and actions |
|---|---|---|
| Overview | Key figures, registrations per month, newest shops, order value, orders, deliveries by status, payment mix, best sellers, sales by category, stock health per shop, credit health, compliance, critical stock, recent orders | Platform report download (PDF or PowerPoint) |
| Shops | Every shop with joined date, compliance, a stock-health bar, orders, spend, on-time rate and credit health. Includes credit health and compliance charts | Select a shop for its monthly spend chart |
| Orders | Every order with payment outcome. Includes a status donut and payment outcome chart | Status tabs, search, Move on (advances delivery) |
| Products | The catalogue, with a status donut and products per category | Add product, with a live price check chart against its category. Edit price, bulk deal and verification |
| Suppliers | Every wholesaler, with a status donut, wholesalers per province and order value per wholesaler | Add supplier, with a live province chart. Change verification inline |
| Guide | A plain-language explanation of how SpazaLink works |
All charts are shadcn/ui charts (src/components/charts.tsx).
When anyone signs in, a one-time notice explains that access is role based today, and that full RBAC is coming: named permissions per role, with an audit trail.
This is the beginning of the README. Read the rest at the original. Read the full README ↗