Skip to content
EbenKwete
All work

02B2B SaaS

Immobilius

B2B real-estate intelligence

A SaaS that tells commercial real-estate teams which companies are about to need space. It watches funding rounds, headcount growth and executive hires, scores the signal, and drops the qualified lead on a map.

Role
Product & Full-stack
Year
2025 — 2026
Type
B2B SaaS
Status
Live
Immobilius lead dashboard

Stack

  • Next.js 16
  • TypeScript
  • PostgreSQL
  • Supabase
  • Leaflet
  • Anthropic API
  • Stripe
  • Vercel

The problem

Commercial brokers find deals by hearing about them late. By the time a company publicly looks for space, five other brokers already know.

The bet: the intent is visible earlier. A funding round, a spike in job postings, a new COO — these leak months before a lease search. The product had to collect those signals continuously, decide which ones actually matter, and put them somewhere a broker can act on in ten seconds.

What I built

01

Signal engine

Ingestion routes pull company events on a schedule and normalise them into a single signal table in Postgres — funding rounds, headcount deltas, executive appointments, address changes.

Deduplication happens at write time, so one funding round reported by four sources becomes one signal rather than four leads.

02

Scoring

Each lead gets a score from the combination of its signals, weighted by recency and by how predictive that signal type has been. The model returns a short written reason alongside the number — a score with no explanation is a score nobody trusts.

03

The map

Leads render on a Leaflet map with marker clustering, so a dense downtown does not collapse into an unreadable pile of pins. Filters, the list view and the map stay in sync through a single URL-driven state.

Engineering decisions

Idempotent ingestion

Every ingestion job can be replayed safely. Re-running yesterday's fetch produces no duplicates.

Explainable scoring

Every score carries the signals that produced it. Users can audit the reasoning instead of trusting a black box.

Clustered geospatial rendering

Marker clustering plus viewport-bounded queries keep the map responsive with thousands of leads in play.

Cron-backed digests

A daily job emails each user only the leads that crossed their threshold since the last run — no dashboard-checking required.

Outcome

The largest thing I have built: roughly 880 source files spanning the ingestion pipeline, the scoring layer, the dashboard, the map and subscription billing.