Case Study — Medical Aesthetics · Web Platform

LUSHFUL AESTHETICS

Live site
web.archive.org › lushfulaesthetics.com
Lushful Aesthetics — Homepage (Wayback Machine archive)

01

THE BUILD

Kenny and I were brought in directly by Lushful, no agency in the middle. We ran it like a real engineering team: monthly client meetings, tickets for everything, priority queues, and mutual code review before anything shipped. We kept that up for two years.

The client had strong opinions on the brand — colors, typography, the way things should feel. Our job wasn't to redesign their vision. It was to build it right and make sure adding new pages six months later didn't break everything. Section mockups got approved in meetings and went straight to production code the same month. No Figma-to-handoff gap.

The hardest ongoing work was making sure the site could keep growing — new service pages, new blog posts, new CMS fields — without needing us on a call every time something needed updating.

Sprint workflow2-person team · Ticketing system · Code review
Client meeting
Tickets created
Priority assigned
Pick & build
Code review
Ship to production

Blog page

Lushful Aesthetics reviews

Booking / contact

Services page

02

AGE VERIFICATION + LEAD CAPTURE

Medical aesthetics has strict regulatory requirements around before/after photography. The challenge: retroactively adding conditional age-gating logic to a live production site with dozens of gallery pages — where only specific treatment galleries required verification based on content sensitivity.

We built a selective gating system that evaluated gallery content per-page, triggered verification only when required, and maintained session state across the entire site. Result: 10k+ newsletter subscribers captured without disrupting existing user flows.

Modal flow — UI screenshotsAge gate · Email capture · Session persistence
Age verification modal and gallery gate states

Age verification modal · Gallery gate states

THE CHALLENGE

Site had been live for months with multiple gallery types. Some pages showed general content (cosmetic products, facilities) — no gate needed. Others showed medical procedures (injectables, body contouring) — required age verification. Had to retrofit conditional logic without breaking existing galleries or forcing verification on non-sensitive content.

THE SOLUTION

Built gallery component with content-type flagging in Contentful CMS. Each gallery entry tagged as requiresAgeGate: true/false. React component evaluates on mount, conditionally renders modal only for flagged galleries. Once verified, session persists site-wide via local storage — users never see the modal twice.

TECHNICAL APPROACH

  • CMS Layer: Added boolean field to Contentful gallery content type.
  • Frontend: Custom React hook checks verification status on component mount, reads localStorage for session state, triggers modal conditionally.
  • Capture: Email submitted to Mailchimp via serverless function, prevents duplicate signups.
  • State: Verification token stored locally, expires after 30 days.

OUTCOME

75%
Modal conversion rate

Users who saw the modal completed verification.

Deployed to production with zero downtime. 5,000+ newsletter subscribers captured through gated galleries. Maintained 100% regulatory compliance while preserving UX for non-gated content.

03

THE BLOG SYSTEM

The blog was the hardest piece. The client needed templates that worked across different content types — video, text-heavy, image galleries, mixed media — each with different field inputs, related content surfacing, and per-post SEO configuration. Everything had to be modeled in Contentful so the marketing team could publish without engineering on every post.

Content model — data modulesDesigned for constant content additions
CORE

Blog Post

  • title
  • slug
  • template type
  • SEO fields
  • featured image
  • related posts
TEMPLATE A

Text Heavy

  • rich text body
  • pull quote
  • inline images
  • author block
TEMPLATE B

Media Rich

  • video embed
  • image gallery
  • caption fields
  • body text
TEMPLATE C

Mixed

  • modular blocks
  • custom sections
  • CTA module
  • product links
SEO layer — every post
Meta titleMeta descriptionOG imageCanonical URLSchema markupStructured data
Lushful Aesthetics blog system

04

SEO ENGINEERING

For a commercial med spa, SEO wasn't a feature — it was a business requirement. We baked it into the architecture from day one. Every page, every blog post, every service page had structured SEO fields. The 98 Lighthouse SEO score is what that looks like in practice. Organic traffic kept growing without paid advertising — the architecture did the work.

92

Performance

Media-rich Shopify site

98

Accessibility

100

Best Practices

98

SEO

Core goal — business critical

05

PRESS & RECOGNITION

While we were building and maintaining the site, the client was getting national press coverage across major publications. The infrastructure we built was handling that traffic every time a new article dropped.

12+ publications during engagement

GQ

Condé Nast

Men's Health

Hearst

New York Post

News Corp

The Cut

New York Media

Esquire

Hearst

Business Insider

Axel Springer

BuzzFeed

Digital

Men's Journal

Athlon Media

Marie Claire

Hearst

Town & Country

Hearst

AskMen

Dotdash Meredith

Out

Pride Media

Every time a new article dropped, traffic spiked. The site handled it. That's what production-grade infrastructure looks like — you don't notice it until something goes wrong, and nothing went wrong.

06

OUTCOMES

Placeholder summary tying traffic, newsletter growth, SEO score, and multi-year engagement back to specific engineering and content decisions.

50K+
Monthly visits

Organic + direct mix; landing speed within budget.

10K+
Subscribers

Blog + treatment funnels feeding the newsletter.

98
SEO health

Placeholder for audit tool and score methodology.

2+ YRS
Engagement

Sustained iteration with Kenny across roadmap.

What happened next

They hired a full agency when they needed a dedicated marketing team too.
That's not a loss – that's a small business growing past what two freelancers can cover.

View site