How you build a website for a real-estate advisor.
For Edvero Partners, an independent property investment advisory in Portugal: the record of the decisions behind the site, from brand foundation to conversion mechanics, copy strategy to art direction. None of the logic here is specific to real estate — it applies the same way to any consultancy or professional services brand where trust is built on process rather than outcomes: law, accountancy, financial advisory, B2B expert services.
A brand you trust because of the file, not the story the agent tells.
Edvero Partners is an independent advisory for international investors buying property in Portugal — standing on the buyer’s side of the table, not the seller’s. The founders are Inna Statova and José Gaspar: one from the Portuguese property market, the other with more than twenty years in law and transactions. The premise is simple: an estate agent talks in order to sell; Edvero works in order to examine.
That positioning has one direct consequence for the site design: nowhere on it should a visitor feel sales pressure. No countdown, no “limited opportunity”, no borrowed trust in the form of invented reviews or stock-photo testimonials. The eleven sections below are the record of how that single sentence was carried from brand into code, from copy into conversion mechanics.

Steering clear of both property-sector clichés.
The design system started from a single constraint: avoid both of the property sector’s clichés. Not traditional estate-agent energy (gold, yachts, “your dream home”), and not a generic SaaS template either. The palette that came out of it is bright without being loud, and warm without tipping into orange. Beside it sits one signature shape: three nested rings and a check mark — the visual shorthand for “checked”.
Ground
Primary
Surface
Accent / CTA
Focus ring
Motif
Typography
Libre Bodoni for headings — a classical, reassuring serif; as serious as a notary’s office, and not as a brochure. Public Sans for body copy. Both are self-hosted through next/font/google and loaded with display: swap, so there is no third-party font request and no CLS risk.
Why there are no testimonials. Edvero is a new firm, and manufacturing borrowed proof of outcomes — client quotes, an invented “case study” — would not have been honest. Instead the VerifyPanel component offers proof of method: a concrete seven-point assessment list. Trust is earned on process, not on results we cannot yet show.
What the brief forbade guided the design more than what it asked for.
The project began with a brand brief (PRODUCT.md) and a design system document (DESIGN.md) — establishing which visual language was banned before a line of code was written. This is the step consultancy and professional services brands usually skip, and the one that makes the most difference.
What it would not look like
The brief locked down what the brand would not be, in four items: no traditional estate-agent energy, no gold-and-yacht luxury imagery, no touristic Portugal cliché (pastel streets, trams, fado), no generic SaaS template. Those four constraints eliminated most design decisions up front, so the remaining discussion could concentrate on the minority that genuinely needed deciding.
Accessibility as a requirement in the brief, not an afterthought
- A WCAG AA contrast target — which is why text uses the olive-ink and danger variants rather than raw olive (3.3:1) and clay (3.7:1).
- prefers-reduced-motion does not switch motion off wholesale; it disables only the properties that move things (transform), while opacity and colour transitions stay.
- A minimum 44px touch target on every interactive element.
- The page is fully readable without JS: entrance animations start from the CSS “at-rest” state and GSAP only enriches them, so if JS fails the content is still visible.
The transferable lesson for consultancy brands: A “what we will not be” list aligns people faster than a “what we will be” list — particularly in the early stage, where several stakeholders (here the founding partners, Inna and José) disagree.
One conversion action, unchanged across twelve sections.
The entire site has exactly one conversion action: a free consultation over WhatsApp. No form, no phone call, no “request a demo” — everything flows into a single channel. That is why the navigation bar itself acts as a persistent CTA that stays reachable at every viewport, rather than hiding behind a hamburger menu.
Between the hero and the closing band there are deliberately only two text-link conversion points. The job of the remaining nine sections is not persuasion but qualification and trust-building. The floating WhatsApp button and the exit-intent modal sit on top of this flow as a global layer.

Not a promise, a frame: “We examine, you decide.”
That one sentence governs the brand’s language. Rather than a promise like “we will find you the best property”, the copy establishes a definition of roles: examining is Edvero’s job, deciding is the investor’s right. The distinction works hardest in the FAQ, which answers objections plainly instead of defending against them.
“Would you tell me if you thought a property was a bad investment?”FAQ — open by default
The answer: “Yes. Our role is to assess the opportunity objectively and explain both its strengths and its risks.” This question and “What if you identify reasons not to buy?” are the two of the nine FAQ items deliberately left open by default — because they are exactly the two that have to convince: the firm is structurally independent enough to say “do not buy”.
Filtering instead of persuading
The “fit” section inverts a standard CRO technique: instead of appealing to everyone, it states who the firm does not work with. That screens out low-intent traffic early and leaves the remaining visitor with the impression that the firm is genuinely selective.
“Investors who want to understand the numbers and investment potential before deciding.”
“Anyone looking for validation of a decision rather than an objective assessment.”
One question, one field: an email address.
There is one form on the site and it asks for one field: an email address. In return it delivers something concrete — a one-page PDF giving the Portuguese names of the eight documents checked when buying a property (Certidão Permanente, Licença de Utilização and the rest) and what to look for in each. That avoids the “subscribe to our newsletter” trap: the offer is directly about what the visitor is dealing with at that exact moment, which is evaluating a property.
- A server-side /api/checklist route sends two emails through the Resend REST API: the PDF link to the requester, and a notification to Edvero, with reply-to set on both sides.
- The PDF is generated at build time by scripts/build-checklist-pdf.mjs from a single content source (lib/checklist.ts), so the content and the PDF can never drift apart.
- An invisible honeypot field (company, positioned off-screen, aria-hidden) — if it is filled, the request quietly returns 200 OK and the bot learns nothing.
- Email format and length are also validated server-side; client validation is not trusted.
Three different intents, three different placements
- Guide index pageFor the visitor still in the research stage — offered before they read an article.
- Inside a guide articleFor the visitor who has read the content and is interested but not yet ready for WhatsApp — at the end of the article.
- Exit-intent modalFor the visitor about to leave — one last low-commitment step. Detail in section 07.
The transferable lesson for consultancy brands: A lead magnet works when it is a miniature of the service itself — not “join our newsletter” but “see a real instrument we use while doing the work.” For a law firm that might be a contract checklist; for an accountant, a tax calendar.
Catching the exit without being rude about it.
On most sites an exit-intent modal feels like an aggressive interruption. Here the trigger logic is split by device type and guarded behind an “engagement threshold” — the modal never appears at all if the user never really engaged with the site.
- Desktop — mouseout with relatedTarget === null, once the cursor enters the top 50px band. (Not mouseleave, which does not bubble to document.)
- Mobile — an upward scroll faster than 600px/s, but only after 50% of the page has been seen.
- 20 seconds on the site, or
- 35% scroll depth.
- Until one of the two is met, the trigger is not even listened for.
- Permanently silenced once the visitor has converted (downloaded the checklist).
- A 30-day cooldown after being shown, in localStorage.
- Never shown on the privacy or terms pages.
- Suppressed while the WhatsApp panel is open or an input has focus.
Not a sales pitch, but the eight-document checklist detailed in section 06 — carrying the note that you will not be added to a mailing list, as part of building trust rather than spending it.
“The list we work through on any Portuguese property. One page. You will not be added to a mailing list.”Exit-intent modal body copy
Not a link, a pre-consultation form.
The floating button does not simply hand off to a wa.me link — it opens a composer panel with an intent selector and two short qualifying questions. The aim is that the first message reaching Edvero already carries useful context.
The panel above is a faithful reconstruction of the real component (components/whatsapp-float.tsx), using its actual behaviour and interface copy.
When the button appears, and when it hides
The button only appears once scrollY passes 320px, and an IntersectionObserver hides it again while the Contact band at the foot of the page is in view — so it never competes with its own primary CTA. Office hours (Europe/Lisbon, weekdays 09:00–19:00) drive a live “Available now” / “Outside office hours” badge, computed through useSyncExternalStore so server and client cannot disagree during hydration.
The calculator that carries the budget across
The cost calculator in the guide articles (IMT, stamp duty, notary, annual IMI) rounds the amount entered to the nearest €50,000 and appends it to the WhatsApp message automatically: “The property I am looking at is in the region of €X.” A small detail, but it raises the quality of that first message directly.
From touristic Portugal to Portugal under examination.
In the first build the strategy section used dark, dramatically graded photography — visually attractive, but in conflict with the brand’s own principle of being bright, transparent and free of gloom. The revision showed the same Portugal — azulejo-tiled facades, streets in daylight — in the brand’s own language of light.


The “Income” strategy card, the same homepage section before and after. The decision fits in one line: the brand picks light first and drama second.
The format decision
The new image set was produced directly as .webp; next.config.mjs already set AVIF/WebP as the default re-encoding format, which meant discarding files that made no difference. Every image is served through next/image with fill and an explicit sizes attribute, plus a custom object-position where needed (for example “62% 50%”) so the subject never falls outside the crop.

A real URL for each language, not one blanket rule.
The two languages (English by default, Turkish alongside it) are split into separate address structures — not by bolting /tr/ onto the front, but by giving every page an address made of real words in its own language. The guide is /en/guide in English and /tr/rehber in Turkish; About is /en/about against /tr/hakkinda.
| Area | Implementation |
|---|---|
| URL structure | Locale segment plus a language-specific slug (/tr/rehber/[slug]); old slugs redirect with 301 |
| hreflang | Every page emits alternates.languages and x-default |
| JSON-LD | ProfessionalService (all pages), FAQPage (homepage), Article + BreadcrumbList (guide articles) |
| Sitemap | Priority-weighted — homepage 1.0/0.9, guide 0.7–0.8, legal pages 0.2 |
| OG images | A separate card per locale (og-home-en.jpg / og-home-tr.jpg), with a shared card for the guide |
| Security headers | HSTS, X-Content-Type-Options, Referrer-Policy, X-Frame-Options, Permissions-Policy |

Live, and still being written.
The site is live at edveropartners.com. The work is not a one-off delivery but ongoing: the art direction was updated recently, the expert network and the IMPIC licence trust signal were added, and the default language moved from TR to EN — each of them part of a living brand being tuned against real user behaviour.
None of the eleven sections here requires any knowledge specific to property websites. The same framework holds for a law firm, an accountancy practice, a management consultancy or a B2B expert service: a design brief that starts by naming what it will not look like, a single conversion channel, trust that is not borrowed, and a lead magnet that previews the service itself. Only the vocabulary and the list of documents change.
There are no performance metrics on this page: the engagement is ongoing and the site is new, so no honest before/after traffic figure exists yet. What is published instead is the decision record.
