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.