Overview
Technical choices
Every technology justified by a requirement of your specification.
Every technology answers a constraint named in your specification.
| Layer | Technology | Why, for ERK+ |
|---|---|---|
| Web | React | A rich, reactive dashboard; responsive (all screen sizes), works on Chrome, Firefox, Safari, Edge |
| Mobile | React Native + Expo | One codebase for iOS 14+ / Android 9+ with native rendering — smooth on the entry-level phones that dominate in Senegal |
| High-concurrency services | Go | Auth, Site, Notifications: thousands of concurrent connections on a tiny footprint |
| Critical modules | Rust | Finance & Media: memory safety, arithmetic precision, vault encryption |
| API Gateway | Traefik | Single entry point: TLS termination, dynamic routing, load balancing |
| Event bus | NATS + JetStream | Persistent async communication — no message lost, full traceability |
| Protocols | gRPC (internal) · GraphQL (mobile) | Fast typed/binary internal exchanges; mobile transfers only what it needs |
| Transactional database | PostgreSQL | ACID for the consistency of financial data |
| Cache & real-time | Redis | Sessions and live data (e.g. site cameras) |
| Object storage | MinIO (S3-compatible) | Documents, photos, videos — self-hosted |
| Containers & orchestration | Docker · Kubernetes | Auto-scaling (2,000 users), Blue-Green zero-downtime deploys |
| CI/CD | GitHub · GitHub Actions | Build + tests on every push, dependency security scanning (DevSecOps), containerisation |
Why Go and Rust
These are not niche choices. Go runs Google, Uber, Cloudflare, as well as Docker and Kubernetes (both written in Go). Rust is adopted by Microsoft, AWS, Cloudflare and Discord for their critical systems, and has entered the Linux kernel and Android. We put this world-class technology to work for your project.
- Go compiles to a single binary, starts in milliseconds and holds thousands of connections on a small memory footprint — decisive to sustain 2,000 users on a cost-controlled infrastructure.
- Rust brings memory safety without a garbage collector and infallible arithmetic — what a financial ledger and a vault's encryption demand.
- PostgreSQL brings the ACID transactions a reliable payment ledger requires.
- One Rust core, reused everywhere: media compression and validation are written once, then compiled to WebAssembly for the web, to native for mobile, and to a server binary.
The 3-second ceiling
Every millisecond of the journey is budgeted; going over breaks the build.
Request lifecycle
0.55s measured / 3.0s budget
- Client 4GDNS · TLS 1.3 resume+180ms
- TraefikTLS · routing · LB+120ms
- AuthJWT · RBAC scope+100ms
- Go servicegRPC · business logic+90ms
- PostgreSQLindexed query+60ms
- Renderedinteractive page≈ 0.55s
The 3s ceiling is a blocking gate in our delivery pipeline — not an intention. Server-side budget above; the rest is bandwidth.
Slow-network optimisation
- Offline: an embedded SQLite database on mobile → data entry with no network, automatic sync when the connection returns
- Photos (web): in-browser pre-compression via a Rust → WebAssembly module before upload — a lighter upload (up to −70%), decisive on 3G/4G; the module is loaded on demand to preserve the 3-second budget
- Video: server-side (Rust) compression, streams optimised for 4G bandwidth
- Images adapted to screen and real throughput, lazy-loaded
- The 3-second ceiling verified on every integration

