Skip to content

01Healthcare / Dental ClinicConcept · Live build

Dental Studio

Gentle dental care, close to home.

Visit live site (opens in a new tab)
Type
Concept build, placeholder clinic
Year
2026
Stack
Next.js 16 · React 19 · TypeScript · Tailwind v4 · GSAP
Scale
Hero + 8 sections · ~1,800 lines
01 / Problem

Beautiful, but not a dentist.

The first version looked premium and polished. It also looked like a skincare brand. A patient has to know in one glance that this is a real clinic with a real dentist.

“This looks like a proper dental clinic. The doctor seems approachable. I understand what they treat, and I know how to book a visit.”
Redesign brief, requirement.md

Version one followed an Awwwards-style brief: ivory and forest green, an interactive smile illustration, a horizontal treatment explorer. The redesign brief called it out plainly: it felt like a luxury wellness or cosmetic studio, not a dental practice.

The audience is a small, independent clinic in India and its patients: families, working people, parents with children, and people who are nervous about the dentist. They need to see the dentist, understand the treatments and reach the clinic fast.

Who
One small local clinic
Not a hospital chain
First action
Call, WhatsApp or book
Rule
Credibility before decoration
02 / Concept

Clinical credibility first.

Keep the craft, change the signal. Polish comes from type, spacing and quiet motion; every section has to be useful to a patient.

The page from the top: dentist in the hero, then treatments, the clinic and the visit.A split hero with the dentist visible and Book / Call / WhatsApp actions above the fold.

What changed from version one

  1. 01Palette

    Ivory and forest green became a bright clinical set: warm white, aqua, mint, navy and teal.

  2. 02Hero

    An abstract cinematic opener became a split hero with the dentist and three ways to get in touch.

  3. 03Sections

    Smile in Detail, Approach and abstract treatment art were retired. A trust strip, treatment index, Meet the Dentist, Inside the Clinic and the visit journey came in.

  4. 04People

    Fictional doctors and invented quotes were removed. One placeholder dentist stands in until the clinic supplies the real one.

Design language

Instrument Serif for headlines and Manrope for everything else, on a paper-white surface with aqua and mint sections, navy text and a teal accent. Treatments are written the way a patient would ask about them, not the way a textbook names them.

03 / System

One file holds the clinic.

Content lives in typed data, and every real-world fact sits in a single file marked as placeholder, so handing the site to a real clinic is a data edit, not a redesign.

Layers

  1. 01Clinic facts

    Name, dentist, phone, WhatsApp link, address and hours in one object, every value bracketed as a placeholder until verified.

    content/clinic.ts

  2. 02Content

    Treatments, section copy, images and site metadata as typed TypeScript.

    content/*.ts

  3. 03Sections

    One component per section: trust strip, treatment index, dentist, clinic gallery, visit journey, reviews, FAQ, appointment and contact.

    components/

  4. 04Booking

    The form calls a single function. Today it only waits; going live means replacing that one body with a real request.

    lib/appointment.ts

lib/appointment.tsThe whole integration point. Throwing on a bad response is what lights up the form's error state.
// DEMO ONLY: nothing is sent anywhere. To go live, replace the body with a POST
// to the clinic's real endpoint and throw on a non-OK response.
export async function submitAppointment(request: AppointmentRequest): Promise<void> {
  void request;
  await new Promise((resolve) => setTimeout(resolve, 900));
}

Reviews only if they're real

The reviews section renders nothing while its list is empty. The brief forbids invented testimonials, so the slot exists and stays hidden until the clinic has real, permitted ones.

04 / Experience

Built for a nervous first visit.

Every section answers a question a patient actually has: what do you treat, who is the dentist, what's the clinic like, what happens when I come in, and how do I book.

On the page

  1. 01Nine treatments

    From check-ups and cleaning to root canals, braces and children's care, each in one plain sentence with an 'Ask about this' action.

  2. 02The visit in five steps

    Book, visit, discuss, examination and plan, continue care, with a note that feeling nervous is common and the team will go at your pace.

  3. 03FAQ

    Seven questions people ask before booking, with anything the clinic must confirm shown in brackets.

  4. 04Contact

    Call, WhatsApp, address with a maps link, hours, and the booking form in one section.

On a phone, Call / WhatsApp / Book stay pinned to the bottom of the screen.A fixed three-button bar below the md breakpoint, padded for the home-indicator safe area.

A form that respects the patient

Name, phone, preferred date and time, and reason for visit. Phone numbers are checked against the Indian mobile format, errors are tied to their fields for screen readers, and the button shows sending, success and retry states. The form asks people not to share medical details, and says plainly that it's a demonstration.

05 / Build

Small fixes that matter.

Most of the engineering is restraint. These are the details recorded in the code and the redesign commit.

  1. 01The intro couldn't drag

    On a slow phone GSAP stretches a timeline to catch up. Lag smoothing is turned off so the hero reveal follows the wall clock and never delays the content.

    HeroSection.tsx

  2. 02Reduced motion hides nothing

    Under prefers-reduced-motion no timeline is created, and the CSS never hides content in the first place.

    HeroSection.tsx

  3. 03Teal passes contrast

    The teal was darkened so white text on teal buttons meets WCAG AA.

    redesign commit

  4. 04Indian numbers

    The phone check accepts +91, 0 or no prefix, spaces and dashes, and requires a 10-digit mobile starting 6–9.

    AppointmentSection.tsx

  5. 05An accessible menu

    The mobile menu traps focus, closes on Escape and locks page scroll while open.

    MobileNavigation.tsx

Same content, two layouts: a split hero on desktop, a stacked page with a sticky action bar on phones.
06 / Result

Ready for a real clinic's details.

A complete clinic site that reads as a dentist at first glance, with every fact in one file and every placeholder labelled.

Open items

  1. 01Real details

    Name, dentist and qualifications, phone, address and hours all wait on the clinic. Nothing is invented.

  2. 02Real photography

    The photographs are placeholders; the brief puts real clinic and dentist photos at the centre of trust.

  3. 03Booking delivery

    The form validates but sends nothing. It needs a route handler that emails or texts the clinic.

  4. 04Measurement

    No tests and no performance run yet. Lab and field Core Web Vitals are the next step.