Files
pak-jabit/docs/napkin-payment-courier.md
juxtapoandClaude Opus 5 a58a61b98c Pak Jabit: full stack — storefront, Spree customisations, catalogue tooling
A South African men's apparel store on Spree 5.6 + Next.js 15. 160 products
live, three markets, live Malaysian courier rates, customer-owned carts.

What is here:
  storefront/  the Next.js app
  backend/     ONLY the custom Spree code. Spree itself is a prebuilt image
               that mounts no app code, so every file here needs an explicit
               volume entry in docker-compose.yml or it is silently ignored.
  catalogue/   the scripts that loaded and maintain the products
  docs/        manifest, mock registry, napkins

Real .env files are committed deliberately. This lives on the house's private
Gitea, and a clone that runs beats a clone that needs a secrets handover.
LANDMINE.md maps every key, what it opens, and what must be rotated before this
repo goes anywhere less private.

The admin API key used to be a literal in six catalogue scripts. They now read
SPREE_ADMIN_KEY from the environment and refuse to run without it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 22:09:55 +08:00

110 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 💳 Payment & Courier — Napkin Notes
## Payment Gateways (SA Market)
### Recommended Stack
| Gateway | What it covers | Fees | Priority |
|---------|---------------|------|----------|
| **Payfast** | Cards (Visa/MC), EFT, SnapScan, Masterpass | 3.5% + R2/tx | Must-have |
| **Payflex** | Buy now pay later (4 instalments) | They pay you upfront | High — big conversion booster for fashion |
| **Yoco** | Cards, tap-to-pay (if physical retail later) | 2.6-2.95%/tx | Nice-to-have |
### Why this stack
- Payfast alone covers ~90% of SA payment methods
- Payflex is the killer feature for apparel — "R1,500 jacket? Pay R375 × 4" removes price friction
- Cards (Visa/MC/Amex) come free with Payfast
- EFT = still king in SA, people trust bank transfers
### NOT needed (yet)
- Stripe — limited SA support, overkill for local-first
- PayPal — high fees, withdrawal pain in SA
- Crypto — niche, not the market
### Integration notes
- Spree has payment provider plugin architecture — write adapter, plug in API keys
- Morne's company (NSH/INET) registers as merchant — they get the API keys
- We build the pipe, they plug in credentials
- Payfast has well-documented REST API + existing Spree community plugins
---
## Courier / Logistics (SA Market)
### Recommended: Bob Go (aggregator)
- **One API** → connects to 10+ SA couriers
- API docs: https://api-docs.bob.co.za/bobgo
- Couriers included: The Courier Guy, Pargo, RAM, SkyNet, Internet Express, DPD/Dawn Wing
- Features: compare rates, print waybills, track parcels
- Shopify integration exists → Spree adapter needed
### What Bob Go solves (all 3 spec blockers)
| Spec Action Item | Status |
|-----------------|--------|
| 🔴 Identify suitable SA courier/API | ✅ Bob Go = one API, all couriers |
| 🔴 Confirm automated shipment creation | ✅ Bob Go API supports it |
| 🔴 Confirm waybill generation | ✅ Bob Go handles waybills |
### Direct courier alternatives (if Bob Go doesn't fit)
- **The Courier Guy** — most popular SA e-commerce courier
- **Internet Express** — free API integration
- **CourierIT** — volume discounts
- **Evership** — another aggregator (Fastway, RAM, Aramex, TCG, DPD)
### Shipping zones consideration
- SA is big — courier coverage varies by province
- Major metros (Joburg, Cape Town, Durban) = next day
- Rural = 3-5 days, some couriers don't cover
- Bob Go handles zone logic per courier
---
## 🏷️ Mock Convention
All test/sandbox values tagged with `#mock` in code and config.
When going live: `rg '#mock'` → find all → replace with production credentials.
```
# Example in config:
PAYFAST_MERCHANT_ID=10000100 #mock
PAYFAST_MERCHANT_KEY=46f0cd694581a #mock
PAYFAST_PASSPHRASE=jt7NOE43FZPn #mock
PAYFAST_MODE=sandbox #mock → change to "live"
BOBGO_API_KEY=test_xxxxxxxxxxxx #mock
PAYFLEX_API_KEY=staging_xxxxx #mock
```
---
## Open Questions
- [ ] Local SA only or international shipping?
- [ ] Currency: ZAR only or multi-currency?
- [ ] Who registers as merchant — NSH or a new entity?
- [ ] Cash on delivery — needed? (Still popular outside metros)
- [ ] Payflex merchant approval — timeline?
---
## Architecture Summary
```
Buyer → Spree Storefront (Next.js)
↓
Checkout
↓
┌────┴────┐
│ Payfast │ → Cards, EFT, SnapScan
│ Payflex │ → Buy now pay later
└────┬────┘
↓
Order Created
↓
Bob Go API → auto-select cheapest courier
↓
┌────┴────┐
│ Waybill │ → PDF generated
│ Tracking│ → number assigned
└────┬────┘
↓
Customer gets tracking link
```