Case study · 2025–26
Dubai Haus — Real-Estate Platform, SEO & Growth
Bilingual property platform built from scratch and grown through SEO — 2,200+ synced projects and 6.8× more organic clicks in 12 months.
- Next.js
- PostgreSQL
- Prisma
- Redis
- Docker
- Nginx
- Cloudflare
- DigitalOcean
- next-intl
- Mapbox
- NextAuth
- GA4

Client project. Dubai Haus is owned by Ralf Kappel. The platform was designed, built, deployed and grown by KohzadTech, with me as lead engineer responsible for architecture, development, infrastructure, SEO and analytics.
The business problem
Dubai Haus advises German-speaking investors on off-plan property in Dubai and Abu Dhabi. It needed:
- A premium, fast property portal that feels like a serious advisory, not a listings site
- Live inventory — thousands of projects whose prices, payment plans and floor plans change daily
- German and English, with German buyers as the commercial priority
- Organic search as the main acquisition channel, and leads that can be traced back to the page that produced them
- One small team to run it — so the owner edits content, not code
What I built
Public platform
- Off-plan search with filters (type, emirate, area, developer, price, handover date)
- Project pages with galleries, floor plans, payment plans and unit types
- Interactive Mapbox map of projects
- Area and developer hubs for Dubai and Abu Dhabi sub-communities
- Currency conversion and sq ft/m² conversion
- Bilingual blog and landing-page system (e.g. an 8-route EN/DE Sobha City hub)
- Lead forms, WhatsApp contact and sticky CTAs, all with analytics attribution
Admin panel (NextAuth, role-based)
- Properties, blog (EN/DE, categories, publish/schedule) and per-page SEO fields
- Inventory sync controls and a system-info dashboard
System design
Visitors / Googlebot
│
┌───────▼────────┐
│ Cloudflare │ DNS · CDN · edge cache rules · TLS
└───────┬────────┘
DigitalOcean droplet (Docker Compose)
┌──────────────────────┼───────────────────────────┐
│ ┌───────▼────────┐ │
│ │ Nginx │ reverse proxy │
│ └───────┬────────┘ │
│ ┌───────▼────────┐ │
│ │ Next.js (App │ SSR/ISR pages │
│ │ Router) EN/DE │ API routes │
│ │ │ admin panel │
│ └──┬─────────┬───┘ │
│ ┌────────▼──┐ ┌───▼──────┐ │
│ │ PostgreSQL│ │ Redis │ page & API │
│ │ (Prisma) │ │ cache │ cache, purged │
│ └────────▲──┘ └──────────┘ on publish │
│ │ │
│ ┌────────┴────────┐ nightly scheduler │
│ │ Sync worker │ │
│ └────────┬────────┘ │
└─────────────────┼────────────────────────────────┘
▼
Inventory API (Reelly → REM) · Cloudinary (media) · GA4
Core principle — own the data. Pages never call the inventory API on request. A sync worker pulls, normalises and upserts projects into Postgres; every page, filter, map and sitemap reads from the local database. A slow or broken upstream can't take the site down — and, as it turned out, it made a provider change survivable.
Data model highlights: projects with payment-plan steps, unit types and media; developers and areas; translation rows for German copy; currency rates; blog posts linked to projects; per-page SEO records.
Technical SEO
SEO was engineered into the platform, not bolted on:
- Canonicals — self-referencing, same-language, generated centrally
- Hreflang — reciprocal EN/DE alternates plus
x-default - Server-rendered templates — titles, meta, H1, intro copy and first listings in the HTML before hydration
- Structured data — Organization, RealEstateAgent (with bilingual sales contact points), WebSite, BreadcrumbList, Article, Place, Residence, FAQPage
- Sitemap hygiene — excludes drafts, future posts, noindex pages and filter combinations
- Crawl control — search results noindexed; admin and API blocked
- Correct status codes — genuine missing projects return 404; temporary upstream failures don't get misreported as 404s (a real cause of soft-404s)
- Content accuracy rules — unverified prices, payment plans and dates are never published
Growth & marketing
Beyond code, I run the SEO and content programme: auditing Search Console and GA4, prioritising fixes, and publishing bilingual articles and landing pages targeted at buyer searches.
12 months of Google Search Console data — the previous 6 months (the site's first months in search, to March 2026) against the last 6 months (April – September 2026):
| Metric | Previous 6 months | Last 6 months | Change |
|---|---|---|---|
| Organic clicks | 317 | 2,168 | 6.8× |
| Impressions | 72,450 | 357,894 | 4.9× |
| Average position | 48.0 | 17.9 | 30 places higher |
| Click-through rate | 0.44% | 0.61% | +39% |
| Queries earning clicks | 42 | 200 | 4.8× |
| Pages earning clicks | 159 | 785 | 4.9× |
| Pages averaging top-10 positions | 334 | 770 | 2.3× |
By market
| Market | Clicks | Average position |
|---|---|---|
| United Arab Emirates (core market) | 95 → 1,152 | 70.8 → 23.4 |
| Germany (target buyers) | 11 → 161 | 18.0 → 9.7 |
| United Kingdom | 11 → 110 | 24.4 → 12.8 |
| German-language pages | 7 → 191 | — |
Content that ranks — buyer-intent articles now lead organic traffic:
- Marsa Al Saadiyat masterplan — 302 clicks, 19,498 impressions, average position 7.0
- Lulu Island (Eagle Hills) — 136 clicks, average position 6.0
- Hudayriyat Golf Estates, The Loop Dubai, Al Ghadeer Gardens — each averaging positions 7–8
Analytics that tie traffic to revenue — lead events carry city, project, form type and placement, so every enquiry can be traced to the page and campaign that produced it.
Changing data providers without losing search rankings
In 2026 the platform moved to a new property-data provider — and the old provider's API shut down partway through the switch. Because the site keeps its own copy of the catalogue and uses its own stable URLs, the change was invisible to visitors and to Google:
- Every ranking project URL stayed the same — no redirects, no lost rankings
- German translations carried over intact
- The catalogue grew, and a nightly sync now keeps it current automatically
- Issues uncovered during the move were fixed before launch, not after
Performance & reliability
- Lighter pages — heavy map data moved off the homepage and loaded only where it's needed
- Smart caching at the edge and in the app, cleared automatically whenever content is published
- Automated tests and live-data checks guard every release
Related work
- Saadiyat Marina — a German/English Saadiyat Island publication for the same group
- Mira Hills — a bilingual gateway site feeding Dubai Haus project pages
Engagement
Client: Ralf Kappel, owner of Dubai Haus. Delivered by KohzadTech — design, development, deployment, SEO and ongoing engineering since July 2025. Talk to us about a similar platform.
More projects
2026Case studySaadiyat Marina — Bilingual Property Publication
German-first Next.js publication on Abu Dhabi's Saadiyat Island — 54 URLs with a complete hreflang cluster, built in 7 working days.
- Next.js 15
- TypeScript
- JSON-LD
- hreflang
- +3
Read case study
2026Case studyAgadir Morocco Tours — Multilingual Tour Booking Platform
Four-language tour site (incl. Arabic RTL) with an owner dashboard, availability calendar and WhatsApp booking requests.
- Next.js 16
- TypeScript
- PostgreSQL
- Prisma 7
- +5
Read case study
