GPConnect
A France ↔ West Africa parcel marketplace where trust is enforced by code.
- unit tests
- 270
- API e2e tests
- 73
- Playwright journeys
- 22
- lines of TypeScript
- ~36k
01 Problem
Between France and West Africa, travellers ("GPs") sell the spare kilos in their luggage. This informal market runs on WhatsApp groups: no verified identity, no proof of handover, no recourse when things go wrong.
02 Solution
A Next.js PWA and a NestJS API that add trust at every step: identity checks (OTP, SMS, Stripe Identity KYC), negotiation in real-time chat, OTP codes as proof of handover and delivery, mutual ratings and admin-arbitrated disputes. Every external service sits behind a port, with one adapter per provider.
03 My role
Solo, end to end: product, architecture, front, back, tests, CI/CD and deployment. It's my final-year project at ETNA.
Technical highlights
- Radius search on listings with PostgreSQL 16 and PostGIS; 27 Prisma models.
- Passwordless auth: OTP, Google/Apple/Facebook OAuth, RS256 JWT in httpOnly cookies and a global CSRF guard.
- A Playwright journey plays the shipper and the carrier in two browsers; any 5xx error fails the test.
- CI runs the tests against an ephemeral PostGIS, and a pre-commit hook rejects dead code and duplication.
Stack
- Next.js 14
- NestJS 10
- PostgreSQL
- PostGIS
- Prisma
- Socket.io
- Stripe Identity
- Playwright
- Docker
- GitHub Actions