Case study · Conceived, designed, built and run by me · 2024 to now

Averröes. The system an entire ops team now runs on.

A production CRM for Yakeey, a real-estate network of 800+ advisors in Morocco. It replaced dozens of spreadsheets and tools with one web app, fed by the automations and data models I built underneath it. One person, end to end.

31
Screens in production
8
Systems unified
29
Workflows feeding it
2 yrs
Of data cleaning & modeling

This is the real Averröes navigation. Click “Menu” in the dock, then open any screen. Names and numbers are fictional.

averroes / conseillersIllustrative data
EN LIGNE ZB
ConseillersVue d'ensemble
Ziad BegdouriMASTER CHIEFZB
0,0%Rétention
612 encore dans le réseau sur 2 614 · durée de vie moy. 6,2 mois
< 3 m
3–6 m
6–12 m
12–24 m
24 m +
Onboarding
Satisfaction du survey, note moyenne.
0,0 / 5
sur 148 réponses
0Impayés > 3 mois
KHKawtar Hajji· 5 mois
Réseau conseillers
0
1060 recrutés en 2026
Top scoring1/15
AS
Amine Sqalli
Casablanca
3.9
OffreTransactionsDemande
Agents activés / mois
01
02
03
04
05
06
07
08
09
10
Taux de recouvrement
0,0%
ACC recruteur du mois
LK
Leila Kettani
Account manager
0recrutements en octobre

What's under the hood

Averröes looks simple on purpose. Underneath, it is six layers I designed, built and still run: from the screens people use every morning down to the data I spent two years cleaning. Scroll down through them.

01 Surface

Data people actually want to open


Every screen works in layers. A tile answers the question in one glance, a chart lets you explore, and one click drills down to the record behind the number.

And it is meant to be fun: advisors as rated cards, monthly trophies, publication streaks in 3D, challenge seasons. Ops teams use what they enjoy.

Scan
612advisors71,8%collected4,5onboarding
Explore
Deep dive
Amine S.Hiba G.Sara M.Reda J.
  • 1 Scan one glance, one answer
  • 2 Explore charts you can click
  • 3 Deep dive the record behind the number
02 Product

One place for every ops workflow


Thirty-one screens, five business segments. The modules I'm proudest of:

Subscription billing
Monthly advisor fees, collection rate, unpaid follow-up and free months in one view, exported in two clicks for accounting.
Transactions
Every deal followed from declaration to billing to payment, with the checks that flag a gap before anyone has to look for it.
ACC sections
Each account manager's pool, rankings, monthly podiums and trophies.
Catalogue
Every live listing as a card, filterable by city, cluster, type and advisor.
Promo & continuing education
Onboarding cohorts, Zoom sessions where only approved guests get in, reminders and attendance, end to end.
31screens
Subscription billing Transactions ACC sections Catalogue Promo & formations
03 Application

Built to hold up when nobody is watching


Decisions I made, each with a reason:

Three databases, three trust levels
One writable app schema, a read-only copy of the warehouse reached through a self-healing tunnel, and the live warehouse, read-only.
Access enforced at exactly three points
Role defaults live in code, per-user overrides in the database, and the page, the API and the menu all ask the same question.
Nothing outside trusts the browser
Anything sent to another platform is rebuilt by the server from the typed fields only. A tampered form cannot change an account type or backdate a contract.
Every card loads on its own
One card was ready in 165 ms and still waited 1.5 s for its slowest neighbour. Now each one streams in as soon as its own query answers.
Refuse rather than lie
If the warehouse comes back empty in the middle of a sync, the app stops and says so instead of sending zeros.
Migrations only add before a deploy
Removals ship after, in a separate step. I learned that one by repairing production.
31 screens · role-based accessAverröesNext.js · TypeScriptpageAPImenu3 enforcement pointsn8n29 flowsApp DBread-writeusers, audit, annotationsMirrorread-onlyself-healing tunnelLive warehouseread-onlyfreshest numberswrites only where it must · reads where it's cheapest
04 Automation

29 workflows that keep it fed


Averröes prepares; n8n executes. The app composes a clean request (create this account, push these scores) and hands it to a workflow that talks to the outside platforms.

Behind it runs the advisor lifecycle as a state machine of about 280 steps, from recruitment and payment to contract, accounts, e-learning, activation, retention and offboarding, with escalation deadlines across teams. Thinkific, Slack, Zoom and Google Sheets all sit in that layer.

  1. Recruitmentn8n
  2. Payment
  3. KYC
  4. Contract
  5. Accounts
  6. E-learning
  7. Activation
  8. Retention
  9. Offboarding
29 workflows~280 steps in the lifecycle
05 Data

Two years of cleaning before the first chart


The part AI cannot do for you: learning what the data actually means. I cleaned, reconciled and modeled it with dbt for two years so every number on screen can be defended.

Example: I audited the 2,063-line advisor scoring model and found three structural flaws. Missing data was scored as poor performance, single-track advisors were dragged down by an empty second track, and only 17 of 89 computed indicators reached the published table. Half the network sat within 0.06 points. I built a tuning layer that replays the formula exactly, then fixes it in the open.

2,063 linesadvisor scoring model, audited
Published modelAfter my tuning layer
score 1score 5

Half the network within 0.06 points.

  • 1Missing data scored as poor performance
  • 2Single-track advisors dragged by an empty second track
  • 3Only 17 of 89 computed indicators published
06 Bedrock

Eight sources. One reading.


Consolidated, reconciled and kept current in one place: HubSpot, Zendesk, YakeeyPRO, Divalto, Yakeey Marketplace, Zoho Mail, WhatsApp, and the PostgreSQL warehouse with dbt.

HubSpot
Zendesk
PROYakeeyPRO
Divalto
MarketplaceYakeey Marketplace
Zoho Mail
WhatsApp
PostgreSQL warehouse + dbt

How I build with AI

AI writes a large share of the code. Everything around it is the actual job, and it always runs in the same six steps.

01

Sit with the business units

I start next to the teams who live the process: operations, sales, billing, recruitment. I map what they do by hand, where it breaks and what a good day would look like. The need comes from them, never from the tool.

02

Find the data, model it, clean what exists

Before any screen, I locate where each fact really lives (CRM, billing, marketplace, warehouse), build the dbt models that join it and clean the existing data until every number can be defended.

03

Decide what to automate and what to code

Some work belongs in a workflow that runs on its own, some needs an interface people open every day. I draw that line on purpose: n8n orchestrates, the app reads, explains and decides.

04

Map the stack: what exists, what's missing

I inventory the infrastructure already in place (databases, tunnels, APIs, hosting, access rights) and add only what the need requires, with security, cost and maintenance in view.

05

Build with AI, under my rules

Then I build, with AI as the fastest pair of hands I have, held to a written rulebook it must follow on every change. Speed comes from the AI; correctness comes from the design, the review and the tests.

AI enters here
06

Deploy, then keep it running

Shipping is the middle, not the end: migrations that never break the live version, monitoring and alerts, and the fixes and new requests that arrive once people rely on it every day.