PR Permanent PMU - Permanent Makeup Studio

The challenge

PR Permanent PMU is a permanent makeup studio in Tallinn that sells two very different things: in-person treatments booked by local clients, and training courses bought online by students across Estonia, Latvia and Russia. One site had to serve both, in three languages, without either audience feeling like an afterthought.

The studio was also answering the same questions over and over. What does a treatment cost, how long does it take, how do I prepare, is it painful, when is the next course. Those questions arrive at all hours and in three languages, and every unanswered one is a booking that does not happen.

On top of that, the studio wanted to advertise on Google, which is only worth doing if you can measure what a click is actually worth. That meant the purchase tracking had to be real, not a pixel dropped on a thank-you page.

What I built

  • A fully custom WordPress theme built on ACF Gutenberg blocks, Tailwind CSS and a Vite per-block asset pipeline, so each block ships only its own CSS and JS.
  • Trilingual ET/EN/RU through WPML, covering content, interface strings and media, with the price list and service data translated rather than duplicated.
  • A WooCommerce shop for PMU trainings and online courses, with Montonio handling Estonian bank links and card payments.
  • A custom AI chatbot plugin, developed from scratch, that answers visitors around the clock in their own language.
  • A Mailchimp-connected newsletter that automatically emails a first-time client coupon on signup.
  • A live Instagram feed, GSAP and Lenis motion, and Swiper galleries for the portfolio of past work.
  • Google Ads campaigns plus the full measurement stack behind them, so spend can be judged against actual course sales.

Technical highlights

A chatbot that cannot invent prices

The plugin is multi-provider and runs on Claude, GPT or Gemini. It indexes the site into its own knowledge base, but the theme also feeds it live business data: the real price list, service durations and the FAQ. Grounding it in the actual data is what stops it inventing a number that the studio then has to honour.

Lead capture inside the conversation

Rather than bouncing visitors to a contact form, the widget runs a scripted quick-reply flow that collects a name and contact detail at the point where interest is highest, then hands the lead to the studio.

It reports its own blind spots

Every conversation is stored in wp-admin with analytics and visitor ratings, and the plugin specifically reports the questions its knowledge base could not answer. That list is the content backlog: it says exactly what the site is missing.

Measurement built for Google Ads

A Google Tag Manager container is fed by a GTM4WP enhanced-ecommerce dataLayer, with GA4 custom ecommerce events and Google Ads conversion tracking on training and course purchases. A Conversion Linker preserves ad-click attribution.

Consent handled properly

All tracking is gated by Google Consent Mode through the Complianz cookie banner, so tags hold back until the visitor has actually consented rather than firing and asking later.

Per-block asset pipeline

Vite builds each ACF block’s CSS and JS separately, so a page that does not use the gallery block never loads Swiper. It keeps a visually heavy site from paying for every feature on every page.

Results

  • The studio answers routine questions in three languages around the clock without staff time, and sees in wp-admin exactly what visitors asked.
  • Course and training sales run through WooCommerce with Montonio, so revenue and ad spend sit in the same reporting.
  • Google Ads conversions are tracked to actual purchases rather than page views, which is what makes campaign decisions defensible.

Tech stack

WordPressWooCommerceACF BlocksTailwind CSSViteGSAPSwiperLenisWPMLMontonioMailchimp APIClaude APIOpenAI APIGemini APIGoogle Tag ManagerGTM4WPGA4Google AdsGoogle Consent Mode

Frequently asked questions

Can a WordPress site really run a custom AI chatbot?

Yes. This one is a plugin I wrote specifically for the site. It talks to Claude, GPT or Gemini, keeps its own knowledge base built from the site content, and is fed live data from the theme so it answers from the real price list rather than guessing.

Why WPML rather than a separate site per language?

Three separate sites means three sets of prices, three product catalogues and three chances to forget an update. WPML keeps one WooCommerce catalogue and one price list with translations attached, which is far less to maintain for a small team.

Why Montonio for payments?

Estonian customers expect to pay by bank link. Montonio covers the Baltic banks alongside card payments in one integration, which is a much better fit here than a card-only processor.

Related projects

Get in touch

Want to know more about me, tell me about your project, or just say hello?

Drop me a line and I'll get back to you as soon as possible.