Retour à l'accueil
#webdev#typescript#realestate#saas

I built a CRM for French real estate agents in one night

Why every agency still uses software from 2008, and what I did about it in a single overnight session.

Jacobo6 min readMarch 22, 2026

France has a weird real estate software problem. The market is dominated by three or four tools — La Boite Immo, Hector, Whise — all built in the mid-2000s, all charging €400–600/month, and none of them integrating cleanly with Jinka, the platform that's become the actual standard for listing distribution in 2024.

I know this because I've worked with Jinka's API. And every time I looked at the competition, I kept thinking: this doesn't have to be this hard.

So last night, I built ImmoCRM.

The Problem

French real estate agencies have three core workflows:

  1. Manage listings — enter property details, publish to portals
  2. Track clients — buyers and sellers, budgets, preferences, history
  3. Move deals through a pipeline — from first contact to signed deed

The legacy tools do all of this, but they're built like it's 2008. Heavy desktop-style UIs, no dark mode, clunky integrations, and Jinka sync that feels like an afterthought bolted on five years late.

What I wanted was a tool that treats Jinka as the source of truth, not a bolt-on. Build the CRM around the sync status, not the other way around.

The Core Insight

The real differentiator isn't features — it's the pipeline view. Every deal in French real estate follows the same stages:

Nouveau contact → Visite planifiée → Offre faite → Compromis signé → Acte signé

That's a five-stage Kanban board. Most agencies track this in a spreadsheet or in the notes section of their legacy CRM. If I could give them a clean visual pipeline where each card shows the client, the property, the price, and the Jinka sync status at a glance — that alone is 80% of the value.

What I Built

The stack: Next.js 15 + Tailwind v4 + shadcn/ui + TypeScript. Dark mode default — because if you're working in this tool for 8 hours a day, it shouldn't strain your eyes.

The core of the app is the Kanban pipeline. Each card shows the property address, client name, price in euros, assigned agent, and the Jinka sync badge.

// Pipeline stages — the backbone of the CRM
export const PIPELINE_STAGES = [
  { id: 'nouveau-contact', label: 'Nouveau contact' },
  { id: 'visite-planifiee', label: 'Visite planifiée' },
  { id: 'offre-faite', label: 'Offre faite' },
  { id: 'compromis-signe', label: 'Compromis signé' },
  { id: 'acte-signe', label: 'Acte signé' },
] as const;

Below the pipeline, there's a client table with filterable columns and a listings panel showing Jinka sync status in real-time — ✅ Synced, 🔄 En cours, or ❌ Erreur.

What Surprised Me

The hardest part wasn't the code — it was the copy. Writing UI copy in French while keeping it natural and professional is legitimately tricky. Terms like "Compromis signé" are specific legal concepts that matter to French agents. Getting the terminology right meant doing research into French property transaction law, which I was not expecting to spend time on at 2am.

The second surprise: how much better the dark navy palette looked compared to my initial light-mode draft. The deep #0a0f1ebackground with blue accents feels genuinely premium — like the kind of tool you'd actually pay for.

What I'd Do Next

  1. Real Jinka OAuth integration — right now the sync badges are demo data. The actual API integration is straightforward but needs a Jinka partner account.
  2. Email threading — capture email history per client, no more switching between the CRM and your inbox.
  3. Reporting — monthly transaction volume, average days in each pipeline stage, agent performance.
  4. Mobile app — agents work on their phones. A React Native version with the same pipeline view would be huge.

Try ImmoCRM

The MVP is live with pre-populated French real estate demo data. See what a modern agency CRM actually looks like.

If you're a French real estate agent and this resonates, reach out. I'd love to build the real version with someone who lives in the problem every day.