All case studies Case Study

15 real estate sites on one template — SOVO Development

How we designed and built 15 high-conversion landing pages for a residential developer with projects across Poland — from a single battle-tested template that we designed from scratch, with 11-layer anti-spam, full Pipedrive sync, and 2–4 hour adaptation per new investment.

Industry: Real Estate / Residential Development Scope: 15 landing pages · 2-week delivery · ongoing ops Stack: WordPress · Tailwind · Pipedrive · Meta Pixel
SOVO Development residential investment — Ogrodowa 12, Poznań
The brief

15 investments. 1 brand. 1 person + AI.

SOVO Development runs 15 active residential investments across Poland — Ogrodowa 12, Kossak 8, Paderewskiego 11, Kamienice Calisia, Tarasy Rokietnicy, SOVOTEL Dopiewo and Mosina, OVO Office, Osiedle Gwiazdowo, Wajdy, Rabowice, Dąbrowskiego 9, Poznań Logistyka and others.

Every investment needed its own marketing landing page — with a unique brand badge, a clickable plot/apartment map, sales-status colour-coding, advisor card, contact form, full Pipedrive routing, Meta Pixel events, custom conversions and follow-up email automation.

Doing this the classic way — building each site from scratch, or copy-pasting files — would have taken 1–2 weeks per project, with every site eventually drifting into its own bugs, its own broken anti-spam, its own divergent email templates. 15 sites × 2 weeks = roughly a full-time team for half a year.

Instead, we designed an entirely new master template from scratch — every section, every interaction pattern, the plot-selector UX, the status badges, the brand-card system, the email layouts. Then we documented the entire adaptation playbook in Markdown and used AI as the consistent execution layer. All 15 sites delivered in 2 weeks. Average adaptation time per new investment: 2–4 hours.

No off-the-shelf real-estate WordPress theme. No purchased Tailwind UI kit. Every pixel of the design — and every line of HTML/JS/PHP — is ours.

What we built

One template, fifteen investments, zero divergence.

Each landing page looks unique to the buyer — but every site shares the same engineered backbone for sales, security, and analytics. That's how 1 person operates what would normally be a full team.

Master landing template — designed from scratch

An original design system built specifically for SOVO — not a purchased theme, not a Tailwind UI kit. Hero with sales-status badge ("Final stage" / "Pre-sales" with pulsing green dot), about section with photo slider, clickable SVG plot/apartment map with status colour-coding, detail panel (area, price, price/m², gallery), price-change history tooltip (deduplicated client-side from CRM data), amenities, location with Google Maps, gallery, developer info, footer. Every interaction pattern, every component, every micro-detail — designed and engineered in-house.

11-layer anti-spam form (zero false positives)

reCAPTCHA v3 (soft-fail), honeypot, regex (CamelCase / Cyrillic / .ru patterns), keyword blocklist, rate-limit per IP, duplicate detection (10-min window), Polish phone validation (all formats), email-domain validation, UA logging (FB/IG webview detection), 4-second hard timeout (workaround for grecaptcha.ready() not firing in in-app browsers), and a wp-admin "Blocked Leads" panel with reason codes and one-click "restore" for any false positive review.

Lead → CRM → email automation

formularz.php handler loads WP, sanitises, runs anti-spam, writes to wp_pl_leads. 3 transactional emails: instant welcome → plot-specific email (if buyer selected one) → 24h follow-up (WP cron). Pipedrive API v1 integration creates / updates person + deal + custom fields (Investment, Lead Channel, UTM source/medium/campaign, Referrer) + activity note. Email open tracking via pixel track.php.

Live CRM sync (≤5 min latency)

Cron pulls fresh apartment / plot data from oferta.sovo.dev every 5 minutes. JSON cache in wp-content/uploads/sovo-cache/. REST endpoint /wp-json/sovo/v1/dzialki → frontend fetch → merge over static plotData in index.html. Status change in SOVO admin → visible on every live site in ≤5 minutes, zero manual intervention.

Marketing tracking, per-investment

Separate Meta Pixel ID per investment with ViewContent + Lead events. Separate Google Tag Manager container per project. UTM source preservation in sessionStorage → forwarded into Pipedrive deal. Form-submission redirect to dedicated /dziekujemy-mieszkania/ page (custom conversion fire). 15 projects fully tracked end-to-end.

Markdown playbooks — the "human manual"

Per-feature .md files (e.g. wajdy-historia-cen-instrukcja.md, lista-zmian-rabowice.md) document the goal, code snippets, numbered "Pułapka" traps from real deployments (IIFE scope, Tailwind CDN class compilation, CRM data dedup), lessons learned with dates, and a checklist. The template's accumulated battle-scars are written down — so every new project starts from everything we've ever broken and fixed, not from zero.

Where humans owned it

The decisions AI couldn't make — and the orchestration AI couldn't replace.

This isn't an "AI replaces humans" story. It's a story about masterful orchestration of AI by a consultant with deep domain knowledge. Without all three legs — domain expertise, documentation discipline, and AI execution — the project collapses. Anti-spam built by AI alone blocks real buyers. Documentation without an executor is a dead text file. Humans without AI run two projects, not fifteen.

Anti-spam tuning — "never block a real buyer"

Every layer was designed with the constraint: zero false positives. reCAPTCHA is soft-fail (score logged, not blocking — because it doesn't load at all in FB/IG webview). Phone validation accepts every Polish format (601 778 817, +48…, 0048…, (601) 778-817) — fixed after a real 0048… false-positive incident. The "Blocked Leads" admin panel with one-click "restore" exists because every false positive is a lost apartment sale. 1 256 spam attempts blocked over 7 days, 4 real leads through, zero false positives.

Markdown playbooks — institutional memory

Each new trap discovered in production goes back into the .md documentation: "Pułapka #1: onclick can't see functions inside an IIFE — must be attached to window", "Pułapka #4: SOVO core plugin appends a duplicate to price_change_history on every save — JS must dedup". The next project starts with every previous mistake already mapped. Two-way feedback loop between human and AI — neither replaces the other.

Email deliverability — the boring stuff that sells apartments

safe_reply_to guard: if a buyer's email looks suspicious (typo, dead domain), the admin notification gets noreply@ as Reply-To so the SMTP relay doesn't reject the entire batch. Single-recipient retry when wp_mail() batch fails. UA logging caught the FB/IG webview grecaptcha.ready() hang — fix took conversion from those channels from ~0% to ~85%. None of this lives in any AI training set; it came from reading hundreds of MB of php-error.log.

Incident response — diagnosis from logs in ≤30 minutes

When the 6 May SMTP incident swallowed one real lead, the recovery path was: parse 600 KB of php-error.log + wp-mail.log + access.log in 30 seconds (AI), identify the buyer + IP + browser + email status (AI), make the call to recover manually + add the typo-guard rule to the playbook (human). ≤30 minutes from incident report to root cause. Standard agency turnaround would be days.

Strategic decisions stay human

Marketing copy, hierarchy of messaging, brand colour decisions, advisor matching per investment, client communication, escalation to JDM hosting support over SMTP throttling, feature toggles in third-party tools — every one of these is a human call. AI doesn't talk to the client. AI doesn't decide what matters this quarter. AI doesn't negotiate with a hosting provider. The consultant does.

What AI does brilliantly — at 5–10× human speed

Adapting the template to a new investment: brand colours, copy, advisor, URLs — one Markdown file describes the pattern, AI generates 15+ modified files. Rolling out a new feature ("price-change history") across all 15 projects in one session, accounting for per-project quirks (Calisia uses prop.price_change_history, Wajdy goes through a proxy api-mieszkania.php with shorter field names). SFTP deploy via lftp, WP Rocket cache purge, smoke tests. Same template-level quality on all 15 projects, every time.

Results

15 sites. 1 person. Production-grade everywhere.

Real numbers from real campaigns — measured at the SOVO Development scale of operations.

Full portfolio delivery (15 sites)
~6 months · 3-person team 2 weeks · 1 person + AI
Adaptation time per new investment
1–2 weeks 2–4 hours
Spam blocked (7-day window)
"hopefully the form filter works" 1 256 / zero false positives
FB/IG in-app conversion
~0% (silent submit hang) ~85%
CRM data → live site latency
Manual sync per release ≤5 min, automated
Incident diagnosis time
Days (agency tickets) ≤30 minutes
Technology

A pragmatic stack — boring choices, brilliant orchestration.

No bleeding-edge framework heroics. We picked battle-tested tools that real estate teams understand: WordPress for content + admin, static HTML + Tailwind for the public landing pages (fast, no PHP overhead on the buyer-facing path), Pipedrive for CRM, Meta Pixel + GTM for tracking, WP Cron + custom mu-plugins for the lifecycle. Boring is reliable. Reliable scales.

HTML + Tailwind 3.4 Vanilla JS + SVG WordPress 6.x · ACF PHP 8.x Pipedrive API v1 Meta Pixel · GTM GetResponse · wp_mail reCAPTCHA v3 + 10 layers JDM hosting · WP Rocket Claude · Anthropic API Markdown playbooks
Our expertise

This project showcases what we do best.

Original design system from zeroCustom UI, plot-selector UX, brand cards, email layouts — no purchased theme.
Real estate marketing engineeringFrom plot maps to Pipedrive routing — domain-fluent, not generic.
Anti-spam without false positives11 layers tuned to never block a real buyer — battle-tested.
Pipedrive + lifecycle automationLead → person → deal → custom fields → notes → 24h follow-up.
Markdown-driven playbooksTwo-way feedback loop — every trap learned goes back into the doc.
Forensic log analysisDiagnose incidents from raw php-error.log in ≤30 minutes.
1 person operating 15 sitesNot "AI replaces humans" — humans orchestrating AI like a tool.
Running a portfolio of marketing sites?

Stop rebuilding from zero on every project.

Free 30-min Discovery Call — no pitch, just a straight conversation about your portfolio, where the duplicated work hides, and how we'd consolidate it into a documented, AI-executable playbook.

Book Free Discovery Call