
2026 · End-to-end design and development · Agencia Xpandex
Iván Caballero
Home-visit massage therapy in Madrid, with terminology as a design constraint
- WordPress FSE
- PHP 8
- Alpine.js
- GSAP
- Fluent Forms
- Contact
- Phone · WhatsApp · form
- Motion
- < 100 KB per template
- Client edits
- 3 bounded surfaces
Inside the site
Screenshots of the live site, at 1440px and 375px.

Desktop · 1440px

Mobile · 375px

Desktop · 1440px

Mobile · 375px

Desktop · 1440px

Mobile · 375px

Desktop · 1440px

Mobile · 375px
Context
Iván Caballero is a massage therapist who works in his clients’ homes across Madrid, travelling with a table and his equipment. His previous site lived on a hosted plan that didn’t allow a custom theme, and it had no calls to action, no working form, no local SEO and no legal pages.
The brief had one very specific goal: turn visits into contacts, by three routes — phone, WhatsApp and form — because this is a service people book by talking to the person.
The constraint that governed everything else
Iván is not a physiotherapist or an osteopath, and in Spain those are protected medical titles. He cannot present himself as one.
That turns vocabulary into a legal matter rather than a stylistic one. The rule was written down before a single line of copy and applied to the copy, the meta tags, the structured data, the alt text, the microcopy and the legal pages: masseur and massage therapist, never physiotherapist; client and session, never patient or medical treatment; relief and muscle recovery, never cure or rehabilitation.
The nuance the client confirmed, and the one that saves the positioning: he can say he applies osteopathic techniques. It’s a technique he uses, not a title he holds.
Out of that clash came a judgment call. His logo reads “osteopathy and massage therapy”, and it stayed exactly as it was: it names disciplines, it doesn’t claim a qualification. The rule governs the text we write, not the brand the client already had.
Approach
- WordPress because the client edits rarely, but does edit. Rates, gallery and contact details change now and then, and with a static site every price change would have to go through the studio. Only those three surfaces were opened up; the rest of the layout stays locked in the template, which is what stops the site deforming with use.
- The logo, vectorised without AI. It arrived as a 500px WhatsApp JPEG. It was traced deterministically — colour masks and tracing — preserving shape and colour exactly, with the gold measured pixel by pixel against the original. A logo redrawn “close enough” is a different logo.
- The brand gold can’t be small text, and that was respected. On a light canvas it gives 2.04:1, well under the legible minimum. Hence three fixed rules: gold only decorates or runs at 24px and above; gold buttons carry their label in dark ink; and where small gold text is needed, a darker variant that does pass. On the espresso background the gold rises to 7.96:1, and there it can be read.
- Motion that accompanies rather than interrupts. CSS with Alpine and self-hosted GSAP, loaded only in the templates that use it and kept under 100 KB, always honouring the system’s reduced-motion preference.
- The phone number always in sight. The call button lives in the bar at every width, and the WhatsApp button stays fixed while respecting the iOS safe area. In a home-visit service, the conversion is a phone call.
What was built
- Custom WordPress theme with its own templates and patterns
- Home page with a carousel and six inner pages
- Mobile menu as an overlay with a focus trap
- Contact form with anti-bot protection and email delivery
- Legal pages, local SEO and structured data
- Production launch on the client’s own domain, with a certificate and continuous deployment
Outcome
Live since September 2026 on Iván’s own domain, with all three contact routes working and the vocabulary reviewed line by line.
A note on the work
Built at Agencia Xpandex, where I own the full cycle: design, development, performance, accessibility, technical SEO and deployment.
In short
- What is Iván Caballero?
- Lead-generation site for a massage therapist who travels to the client's home. Custom WordPress theme, and a legal vocabulary rule that shaped every line of copy.
- What is Iván Caballero built with?
- Iván Caballero is built with WordPress FSE, PHP 8, Alpine.js, GSAP and Fluent Forms. Carlos Ponce delivered it in 2026 — End-to-end design and development · Agencia Xpandex.
- What stands out in Iván Caballero?
- Contact: Phone · WhatsApp · form. Motion: < 100 KB per template. Client edits: 3 bounded surfaces.
- Is Iván Caballero live?
- Yes. Iván Caballero has been live at masajeadomicilioenmadrid.com since 2026.
