E-SAINA

What we have built

You would find out at the first question what a logo carousel is there to hide. We may as well tell you here.

One client, nine products

Most of our experience sits in a single relationship, and it has lasted. Nine products in production for the same client: we wrote them, we run them, we keep them evolving. Our own product sits alongside them.

We could show nine tiles and let you count nine clients. You would ask on the first call, and the answer would be awkward.

A relationship of that length says something a showcase does not: nobody hands nine successive products to a supplier who needs watching.

Our product

e-tsena — four applications, one core

A Malagasy marketplace: API, mobile app, internal CRM, public site. It is our own product, so it is the only one whose technical detail we can publish without asking anyone's permission.

Three client applications on one shared APICRMNext.js 16 — 311 / 34Mobile appReact Native 0.81 — 158 / 14Public siteNext.js 16 — 59 / 3NestJS 11 APIGraphQL — 958 files, 206 test filesPostgreSQL · Redis · Socket.io

The two numbers are source files and test files, counted on the repository.

Eleven processes online. e-tsena.org serves its first byte in 84 milliseconds.

One test file for every five source files on the API. That is not a showcase figure: it is what lets you pick a module back up six months later without rereading the whole thing. It is also what we apply on your side.

Client engagement

Progressive migration of a platform in production

A platform whose initial version we wrote, migrated section by section to a new architecture rather than rewritten in one go.

The core remains Laravel 11 with Reverb for real time. Four Nuxt 4 applications were introduced progressively, and the front server routes to them path by path: each section switches over when it is ready while the rest keeps being served by the older stack. Seven processes carry the whole, queue and scheduler included.

A single domain split by the front server between the new stack and the legacy coreone public domainFront serverrouting by URL prefixMigrated sections4 Nuxt 4 applicationsSections not yet migratedLaravel 11 + Reverb

Each section switches over the day it is ready. Both stacks answer on the same domain, and the visitor never sees the boundary.

Slicing rather than rewriting: each delivered section stands on its own, and the budget is decided section by section instead of being committed in one go. The front server's configuration still carries the trace, URL prefix by URL prefix.

One clarification before anyone has to ask: during this migration the connected users were our own colleagues, not the public. So we did not run this switch under the pressure of a service that outsiders are watching. The method is real and verifiable; the stakes were lower. If yours are not, tell us before the quote — that is the kind of constraint that changes an estimate.

Nine products, described without being named

We do not name them, and the reason is not confidentiality first. A technical director remembers « 958 TypeScript files to 206 test files », not a brand name they have never heard of. Those names would cost us the discretion we are selling you, and would teach you nothing.

Laravel 11 · Inertia 2 · Vue 3

Three applications, with Reverb for real time. Two of them share a single repository and serve two distinct brands.

Laravel 13

One platform, with S3-compatible object storage.

NestJS 11 · Vue 3

A training platform. TypeORM, PostgreSQL 16, Vite 7, shipped in containers.

Vue 3 · Vite 7

Two storefronts on a single repository, switching brand according to the hostname called.

Vue 3 · Vite 6

A back office, containerised.

React 18 · Express

A line-of-business application.

Stack 1 of 6

If our client authorises it in writing, we will publish the names again. Not before.

What we have never done

We have never taken over a third party's codebase. Everything we run, we wrote.

We say so because you will ask. If your need is to take over code nobody at your end understands any more, we would be your first attempt — and you deserve to know that before signing, not after.

Let's talk about your project

Same-day acknowledgement for any request received before 3 pm Paris time. Detailed quote within three working days.