CP//DEV
Iván Caballero

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

Screenshots of the live site, at 1440px and 375px.

01Home
Home page of the Iván Caballero site, desktop view

Desktop · 1440px

Home page of the Iván Caballero site, mobile view

Mobile · 375px

02Treatments
Treatments page of the Iván Caballero site, desktop view

Desktop · 1440px

Treatments page of the Iván Caballero site, mobile view

Mobile · 375px

03Areas
Areas page of the Iván Caballero site, desktop view

Desktop · 1440px

Areas page of the Iván Caballero site, mobile view

Mobile · 375px

04Contact
Contact page of the Iván Caballero site, desktop view

Desktop · 1440px

Contact page of the Iván Caballero site, mobile view

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.

Related work