[{"data":1,"prerenderedAt":373},["ShallowReactive",2],{"navigation_docs_en":3,"-en-architecture-stack":52,"-en-architecture-stack-surround":368},[4,14,32,42],{"title":5,"path":6,"stem":7,"children":8},"The essentials","/en/proposition","en/1.proposition/1.index",[9,10],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Your need, understood","/en/proposition/comprehension","en/1.proposition/2.comprehension",{"title":15,"path":16,"stem":17,"children":18},"Overview","/en/architecture","en/2.architecture/1.index",[19,20,24,28],{"title":15,"path":16,"stem":17},{"title":21,"path":22,"stem":23},"Technical choices","/en/architecture/stack","en/2.architecture/2.stack",{"title":25,"path":26,"stem":27},"Security & compliance","/en/architecture/securite","en/2.architecture/3.securite",{"title":29,"path":30,"stem":31},"The 19 modules","/en/architecture/modules","en/2.architecture/4.modules",{"title":33,"path":34,"stem":35,"children":36},"The 8-month plan","/en/roadmap","en/3.roadmap/1.index",[37,38],{"title":33,"path":34,"stem":35},{"title":39,"path":40,"stem":41},"The method","/en/roadmap/methodologie","en/3.roadmap/2.methodologie",{"title":43,"path":44,"stem":45,"children":46},"Vortex-Soft","/en/equipe","en/4.equipe/1.index",[47,48],{"title":43,"path":44,"stem":45},{"title":49,"path":50,"stem":51},"References — eCampus","/en/equipe/references","en/4.equipe/2.references",{"id":53,"title":21,"badge":54,"body":55,"category":54,"description":361,"extension":362,"links":54,"meta":363,"navigation":365,"path":22,"seo":366,"stem":23,"tags":54,"__hash__":367},"docs_en/en/2.architecture/2.stack.md",null,{"type":56,"value":57,"toc":354},"minimark",[58,62,259,264,273,302,306,309,312,316],[59,60,61],"p",{},"Every technology answers a constraint named in your specification.",[63,64,65,81],"table",{},[66,67,68],"thead",{},[69,70,71,75,78],"tr",{},[72,73,74],"th",{},"Layer",[72,76,77],{},"Technology",[72,79,80],{},"Why, for ERK+",[82,83,84,106,123,136,149,162,175,193,206,219,233,246],"tbody",{},[69,85,86,90,96],{},[87,88,89],"td",{},"Web",[87,91,92],{},[93,94,95],"strong",{},"React",[87,97,98,99,102,103],{},"A rich, reactive dashboard; ",[93,100,101],{},"responsive"," (all screen sizes), works on ",[93,104,105],{},"Chrome, Firefox, Safari, Edge",[69,107,108,111,116],{},[87,109,110],{},"Mobile",[87,112,113],{},[93,114,115],{},"React Native + Expo",[87,117,118,119,122],{},"One codebase for ",[93,120,121],{},"iOS 14+ / Android 9+"," with native rendering — smooth on the entry-level phones that dominate in Senegal",[69,124,125,128,133],{},[87,126,127],{},"High-concurrency services",[87,129,130],{},[93,131,132],{},"Go",[87,134,135],{},"Auth, Site, Notifications: thousands of concurrent connections on a tiny footprint",[69,137,138,141,146],{},[87,139,140],{},"Critical modules",[87,142,143],{},[93,144,145],{},"Rust",[87,147,148],{},"Finance & Media: memory safety, arithmetic precision, vault encryption",[69,150,151,154,159],{},[87,152,153],{},"API Gateway",[87,155,156],{},[93,157,158],{},"Traefik",[87,160,161],{},"Single entry point: TLS termination, dynamic routing, load balancing",[69,163,164,167,172],{},[87,165,166],{},"Event bus",[87,168,169],{},[93,170,171],{},"NATS + JetStream",[87,173,174],{},"Persistent async communication — no message lost, full traceability",[69,176,177,180,190],{},[87,178,179],{},"Protocols",[87,181,182,185,186,189],{},[93,183,184],{},"gRPC"," (internal) · ",[93,187,188],{},"GraphQL"," (mobile)",[87,191,192],{},"Fast typed/binary internal exchanges; mobile transfers only what it needs",[69,194,195,198,203],{},[87,196,197],{},"Transactional database",[87,199,200],{},[93,201,202],{},"PostgreSQL",[87,204,205],{},"ACID for the consistency of financial data",[69,207,208,211,216],{},[87,209,210],{},"Cache & real-time",[87,212,213],{},[93,214,215],{},"Redis",[87,217,218],{},"Sessions and live data (e.g. site cameras)",[69,220,221,224,230],{},[87,222,223],{},"Object storage",[87,225,226,229],{},[93,227,228],{},"MinIO"," (S3-compatible)",[87,231,232],{},"Documents, photos, videos — self-hosted",[69,234,235,238,243],{},[87,236,237],{},"Containers & orchestration",[87,239,240],{},[93,241,242],{},"Docker · Kubernetes",[87,244,245],{},"Auto-scaling (2,000 users), Blue-Green zero-downtime deploys",[69,247,248,251,256],{},[87,249,250],{},"CI/CD",[87,252,253],{},[93,254,255],{},"GitHub · GitHub Actions",[87,257,258],{},"Build + tests on every push, dependency security scanning (DevSecOps), containerisation",[260,261,263],"h2",{"id":262},"why-go-and-rust","Why Go and Rust",[59,265,266,267,269,270,272],{},"These are not niche choices. ",[93,268,132],{}," runs Google, Uber, Cloudflare, as well as Docker and Kubernetes (both written in Go). ",[93,271,145],{}," 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.",[274,275,276,282,287,292],"ul",{},[277,278,279,281],"li",{},[93,280,132],{}," 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.",[277,283,284,286],{},[93,285,145],{}," brings memory safety without a garbage collector and infallible arithmetic — what a financial ledger and a vault's encryption demand.",[277,288,289,291],{},[93,290,202],{}," brings the ACID transactions a reliable payment ledger requires.",[277,293,294,297,298,301],{},[93,295,296],{},"One Rust core, reused everywhere",": media compression and validation are written once, then compiled to ",[93,299,300],{},"WebAssembly"," for the web, to native for mobile, and to a server binary.",[260,303,305],{"id":304},"the-3-second-ceiling","The 3-second ceiling",[59,307,308],{},"Every millisecond of the journey is budgeted; going over breaks the build.",[310,311],"erk-request-flow",{},[260,313,315],{"id":314},"slow-network-optimisation","Slow-network optimisation",[274,317,318,328,342,348,351],{},[277,319,320,323,324,327],{},[93,321,322],{},"Offline",": an embedded ",[93,325,326],{},"SQLite"," database on mobile → data entry with no network, automatic sync when the connection returns",[277,329,330,333,334,337,338,341],{},[93,331,332],{},"Photos (web)",": ",[93,335,336],{},"in-browser"," pre-compression via a ",[93,339,340],{},"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",[277,343,344,347],{},[93,345,346],{},"Video",": server-side (Rust) compression, streams optimised for 4G bandwidth",[277,349,350],{},"Images adapted to screen and real throughput, lazy-loaded",[277,352,353],{},"The 3-second ceiling verified on every integration",{"title":355,"searchDepth":356,"depth":356,"links":357},"",2,[358,359,360],{"id":262,"depth":356,"text":263},{"id":304,"depth":356,"text":305},{"id":314,"depth":356,"text":315},"Every technology justified by a requirement of your specification.","md",{"icon":364},"lucide:cpu",true,{"title":21,"description":361},"3BnnHFASNulBTBJgjOg9qhFWifd0IbprP4_cBH50QNo",[369,371],{"title":15,"path":16,"stem":17,"description":370,"children":-1},"A decoupled microservices architecture, sized for your constraints.",{"title":25,"path":26,"stem":27,"description":372,"children":-1},"Payments, vault, personal data — the bank-grade level required.",1784726249410]