Star Aesthetic Centre Durban

Site Info · Pre-launch Checklist · 9 August 2026 (live stress test)

Star Aesthetic Centre

Launch readiness overview for Dr. Rajeev Bangalee & Nakita — technical status, SEO, tracking, and go-live actions.

Status: 61% complete (28/46 checks passed)

28 pass11 warn3 fail4 info

Live on staraesthetic.co.zaPassword gate active

Critical Checks

Must be solid before removing the preview password and opening the site publicly.

Domain & canonical URL

Primary host is https://staraesthetic.co.za (apex). Canonicals and metadataBase are set in lib/seo.ts; www redirects via Vercel.

PASS

SSL / HTTPS

Production traffic is HTTPS via Vercel. No mixed-content config required for the Next.js app.

PASS

Responsive design

Tailwind mobile-first layout across homepage, treatments, shop, booking, and admin.

PASS

Primary contact info

RESOLVED 9 Aug 2026. Phone +27 (0)31 573 1325 and 22 Ennisdale Drive appear consistently in footer, contact, schema and emails. The public email address was previously split between info@staraesthetic.co.za (schema, footer, legal pages) and info@staraesthetic.site (order and booking mail); all 23 references are now info@staraesthetic.site, and ORDER_ADMIN_EMAILS no longer carries a duplicate address.

PASS

Broken links / URL accuracy

Cookie consent privacy link and llms.txt treatment URLs corrected in this audit. Spot-check Instagram/Facebook profile URLs and any CMS-edited contact WhatsApp placeholder before launch.

WARN

Form submissions

TESTED 9 Aug 2026 with real submissions and inbox verification. Shop checkout, gift voucher purchase, /book consultation and the skin assessment all completed and delivered every expected email. Contact form and review submission NOT yet tested. Forms use honeypot + Cloudflare Turnstile via public-form-guard; keys confirmed present on Vercel.

WARN

Turnstile — confirmed working (invisible mode)

Initially flagged as missing because no widget was visible on /book or /submit-review. That was wrong: Cloudflare is running in invisible/managed mode. Inspecting the review form found a cf-turnstile-response hidden field already carrying a token, and the challenge script loading from challenges.cloudflare.com. Public forms are protected; there is simply nothing for a legitimate visitor to click.

PASS

Preview password gate

LIFTED. Verified 9 Aug 2026: https://staraesthetic.co.za returns 200 with no redirect to /preview-login. SITE_PASSWORD is unset on Vercel and the site is publicly reachable.

PASS

Search indexing switch

LIVE. Verified 9 Aug 2026: no noindex meta, no X-Robots-Tag, robots.txt allows all crawlers (including GPTBot, ClaudeBot, PerplexityBot) and declares the sitemap. THE SITE IS PUBLIC AND INDEXABLE — every remaining WARN and FAIL on this page is now a live-site issue, not a pre-launch one.

PASS

Content & SEO

On-page foundations, crawlability, and structured data for Google and AI search.

Page titles & metadata

Root title template and buildPageMetadata() provide titles, descriptions, canonicals, and keywords across key routes.

PASS

Meta descriptions

Homepage, treatments, shop, legal, and doctor pages ship dedicated descriptions.

PASS

Image alt text

Hero, treatment cards, products, and doctor imagery use descriptive alt attributes (not empty decorative defaults on public surfaces).

PASS

Open Graph / social share

Default OG image and per-page OG/Twitter cards via lib/seo.ts and root layout.

PASS

XML sitemap

Dynamic /sitemap.xml covers static pages, 12 treatments, brands, active products, and glossary terms.

PASS

robots.txt + AI crawlers

When indexing is allowed: GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended are permitted; admin/api/cart/checkout disallowed.

PASS

Structured data

LocalBusiness / MedicalBusiness / HealthAndBeautyBusiness on layout; MedicalProcedure + FAQ on treatments; Product offers; Person on doctor page; BreadcrumbList helpers.

PASS

llms.txt

Public /llms.txt present for LLM discovery; treatment URLs aligned with live routes.

PASS

Legal pages

Privacy, Terms, Returns, and Shipping live under /legal/* and are in the sitemap.

PASS

Favicon / app icon

STALE CHECK, corrected 9 Aug 2026. All five icons are present in app/: icon.jpg, icon.png, apple-icon.jpg, apple-icon.png and favicon.ico. This was marked FAIL from an audit taken before they were added.

PASS

HPCSA registration number

Dr Bangalee page states HPCSA registration but does not show a registration number. Add when available for E-E-A-T.

WARN

Concerns / content pillar

Future Plans roadmap (concerns hubs) is not live yet — optional post-launch SEO expansion, not a hard launch blocker.

INFO

Google Search Console + sitemap submit

Add staraesthetic.co.za property, Change of Address from legacy .site if applicable, submit https://staraesthetic.co.za/sitemap.xml.

FAIL

Legacy domains (.site / .online)

Correctly handled. staraesthetic.site 301s to the main site. staraesthetic.online returns 200 rather than redirecting, but it is a Vercel alias serving the SAME app and every page declares <link rel=canonical> and og:url pointing at staraesthetic.co.za — verified 9 Aug 2026. Google consolidates to the canonical, so this is not duplicate content. A 301 would still be marginally stronger than a canonical (definitive rather than a hint, and stops the alias being crawled at all), but it is an optimisation, not a problem. Separately: Google still has legacy .html URLs indexed from the pre-Next.js site — worth a Change of Address in Search Console once that account is restored.

PASS

Tracking & Analytics

Measurement and marketing pixels — none are required for soft launch, but GSC is.

Google Analytics 4

BLOCKED, not merely missing. The practice Google account (info@staraesthetic.site) was disabled by Google in 2024; an appeal was submitted 8 Aug 2026 and takes ~2 business days. No GA4 property exists. When restored, create the property under a CURRENT account — not the disabled one — then set GA4_PROPERTY_ID. Live reporting additionally needs the GA4 Data API and a service account. Admin → Dashboard → Channels shows this status.

FAIL

Meta (Facebook) Pixel

No fbq / Meta Pixel code present.

FAIL

Channels panel (admin)

Admin dashboard now surfaces both Facebook pages, Instagram and GA with live/error/not-connected states. Follower counts need META_PAGE_ACCESS_TOKEN plus page IDs; without them the panel shows a dash rather than inventing a number.

INFO

Cookie / privacy consent

CookieConsent banner stores accept/decline. Privacy policy covers POPIA. Banner links to /legal/privacy-policy.

PASS

Google Business Profile

Update GBP website URL to https://staraesthetic.co.za and refresh photos/services/categories at launch. NOW URGENT: if the profile sat under the disabled Google account it may be orphaned — for a Durban clinic, GBP drives map-pack visibility and matters more than GA history. Confirm who controls it.

WARN

Social profile links

FIXED 8 Aug 2026. The footer icons and the MedicalClinic sameAs schema pointed at accounts belonging to other people — facebook.com/staraesthetic (an unrelated business in China) and instagram.com/staraesthetic (a private personal account, 1 follower). Now facebook.com/staraesthetic.centre and instagram.com/staraestheticcentre (3,768 followers, verified).

PASS

Duplicate Facebook page

The clinic has TWO pages: /staraesthetic.centre and /StarAestheticC ("Star Aesthetic Centre | Durban North", the one Google indexes). Reviews and followers are split across both, weakening entity resolution. Merge them — but EXPORT BOTH FIRST: Meta combines followers while permanently deleting the absorbed page's posts, photos and videos. sameAs currently points at /staraesthetic.centre and must match whichever survives.

WARN

Instagram bio link

Bio still points at the old staraesthetic.site, sending 3,768 followers to the wrong website. One-minute fix, highest return of any item on this page.

WARN

Accessibility & Security

Spam protection, admin access, and baseline a11y posture.

Admin authentication

Middleware protects /admin/* behind admin_session cookie; login at /admin/login.

PASS

Spam protection (Turnstile + honeypot)

Public write APIs go through public-form-guard. Preview mode also blocks unauthenticated POSTs to gated APIs when SITE_PASSWORD is set.

PASS

Custom security headers

No CSP / HSTS / X-Frame-Options overrides in next.config.ts. Vercel supplies HTTPS; consider adding headers post-launch.

INFO

Accessibility (contrast / keyboard / ARIA)

Some ARIA labels and dialog roles exist (e.g. cookie banner). No formal WCAG audit run in this pass — schedule a mobile keyboard pass before launch.

INFO

Commerce & Patient Features

Shop, booking, and engagement systems that must smoke-test cleanly.

Shop + checkout (EFT)

VERIFIED 9 Aug 2026: order SAC-2026-003 placed end to end (R1 745, EFT, pending). Sequential numbering advanced 002 → 003. Self-collection correctly hid the address fields and dropped shipping (R880 → R760). Customer confirmation and clinic notification both delivered. NOTE: the checkout diverts to the /buy funnel offer when a cart item has an uncompleted funnel — by design, but it means "Place order" does not always submit on the first click.

PASS

Online booking

VERIFIED 9 Aug 2026: booking SAC-BK-2026-001 confirmed (first use of the new sequential format, replacing SAC-20260709-3Q00). Past dates, today, and Sundays correctly disabled; 8 slots offered. Customer confirmation and clinic notification both delivered. See the Turnstile warning under Critical Checks.

PASS

Clinic notifications

All three revenue paths now alert the clinic: shop orders, bookings, and — since 9 Aug 2026 — gift vouchers. Voucher orders previously notified nobody, which mattered because staff must match an incoming EFT to a SAC-GV- reference. Card voucher purchases notify from the PayFast ITN once payment is confirmed, not at checkout, so unpaid card attempts are not announced.

PASS

Skin assessment data capture

FIXED 9 Aug 2026. The twelve-question assessment stored only four summary fields and discarded the rest, including the post-gate answers (desired outcome, main obstacle, preferred approach) that a consultation actually turns on. Now stores all 17, marks completed vs abandoned, and renders under "View answers" in Admin → Leads. The face photo is deliberately NOT stored — it arrives as a base64 data URL and is health-related personal information under POPIA; a photoProvided flag is kept instead.

PASS

Gift vouchers & rewards

Voucher purchase/activation and Starlights loyalty programme are implemented. CRITICAL BUG FIXED 8 Aug 2026: voucher creation had been failing with "Failed to create voucher(s)" since mid-May — the gift_vouchers table was missing five columns the API inserts, because re-running a `create table if not exists` schema file silently changes nothing on an existing table. Migration applied and verified; purchases confirmed working. The route now logs the real Postgres error instead of a generic message.

PASS

PayFast card payments

Built for both the shop and gift vouchers, gated off behind NEXT_PUBLIC_PAYFAST_ENABLED until PayFast verifies the business documents. Vouchers use their own ITN endpoint so the order payment path stays untouched. Activation claims its status transition atomically, so ITN retries cannot email a recipient their voucher twice. NOT YET TESTED end-to-end against the PayFast sandbox — do that before flipping the flag.

WARN

Test records on production — clean these up

The 9 Aug stress test wrote real rows to the live database. Vouchers SAC-GV-EN4XLW and SAC-GV-6YXL2J; order SAC-2026-003; booking SAC-BK-2026-001 (Monday 10 August, 9:00 AM — cancel this before someone prepares for a patient who does not exist); leads Emily Testerly and Olivia Fulltest.

WARN

Patient reviews

NEW 8 Aug 2026. Guided review form at /submit-review with questions tailored per treatment (a weight-loss programme and a lip filler appointment are not the same experience). Per-treatment display on all 12 treatment pages, with a founding-reviewer offer while fewer than three exist. Moderation queue at /admin/reviews — nothing publishes without approval, and RLS is on with no policies so the anon key cannot read the table at all. Questions deliberately ask about care and aftercare rather than clinical results, given HPCSA restrictions on testimonial advertising. Post-appointment request email runs daily at 11:00. NOT YET TESTED end to end — submission needs a real browser because of Turnstile, and the moderation queue has never been exercised with a genuine review.

WARN

Treatment imagery

New June 2026 WebP set (34–60 KB) installed across cards, listing and detail pages, plus the new "Assessed by Dr. Bangalee" sidebar card. NOTE: anti-wrinkle-treatment and lip-filler carry card_image overrides in the database from earlier admin uploads; database beats code, so clear those two in /admin/treatments after deploy or they keep the old pictures.

WARN

Niki AI assistant

Floating widget + skin assessment flows; requires GEMINI_API_KEY on Vercel.

PASS

WhatsApp click-to-chat

wa.me links on contact, booking, products, and Niki. Confirm NEXT_PUBLIC_WHATSAPP_NUMBER on Vercel matches the live clinic number (defaults/content still include a placeholder in one CMS default).

WARN

Performance & SEO Scores

Scores from the 26 May 2026 SEO audit, lightly adjusted for work completed since (llms.txt, indexing wiring). Re-measure Core Web Vitals on the live ungated site.

Overall SEO health (May 2026 audit)

Pre-indexation capability score

72/100
Technical SEO

SSR, sitemap, canonicals, AI crawlers

82/100
Schema / structured data

6+ schema types live

78/100
On-page SEO

Metadata solid; content depth still growing

74/100
Content quality (E-E-A-T)

Doctor page strong; HPCSA number + blog still open

70/100
AI search readiness (GEO)

llms.txt + crawler allowlist in place

68/100
Performance (CWV estimate)

Run PageSpeed on production after gate removal

68/100

Site Information

Hosting
Vercel (auto-deploy from main)
Framework
Next.js 16.1.6 (App Router)
UI stack
React 19 · Tailwind CSS v4 · TypeScript
Database
Supabase (PostgreSQL)
Email
Resend
Spam protection
Cloudflare Turnstile + honeypot
Primary domain
staraesthetic.co.za
Payments (live)
EFT / banking details
AI assistant
Niki (Gemini)
Repository
GitHub (private) → Vercel
Audit date
9 August 2026 (live stress test)
Prior SEO report
26 May 2026 (72/100)

Go-live Sequence

Do these in order when Nakita and Dr Bangalee are ready for public traffic.

  1. 1.Unset SITE_PASSWORD in Vercel (remove preview gate).
  2. 2.Confirm ALLOW_SEARCH_INDEXING=true in Vercel.
  3. 3.Confirm Turnstile + WhatsApp env vars on Vercel (correct NEXT_PUBLIC_ names).
  4. 4.301 staraesthetic.site → staraesthetic.co.za at DNS/host level.
  5. 5.Google Search Console: add .co.za, submit sitemap, request indexing for home + top treatments.
  6. 6.Update Google Business Profile website URL to https://staraesthetic.co.za.
  7. 7.Align public email (.site vs .co.za) across footer, schema, and transactional mail.
  8. 8.Add brand favicon (app/icon or public/favicon.ico).
  9. 9.Smoke test: home, shop → checkout EFT, /book, contact form, admin login, Niki, mobile nav/footer.

Key Pages To Review

Troubleshooting Notes

  • FAIL items — favicon, Search Console submit, and analytics pixels. Favicon + GSC are the only hard SEO blockers among them; GA4/Pixel can follow launch if desired.
  • WARN items — email consistency, Turnstile env naming, legacy domain 301s, WhatsApp number, GBP update. Resolve before or on launch day.
  • Password + indexing — never leave ALLOW_SEARCH_INDEXING=true while SITE_PASSWORD still blocks HTML; crawlers will hit the preview login.
  • Local health check: node scripts/health-check.mjs from nextjs/ (needs Supabase keys).