Case Study · Brand System · Telehealth

GreyStone Counseling

A statewide telehealth practice needed a calm, credible home for the hardest conversations in mental health — and the search visibility to be found by the people having them. We designed the brand system, built a 27-page Astro site with programmatic local SEO, wired up domain and mail infrastructure from scratch, and kept it running through two real production incidents on launch day.

Brand System Astro + Tailwind Technical SEO Domain / DNS Migration Netlify Deployment Incident Response
27Pages shipped
19Programmatic city pages
1Design-token source of truth
2Production incidents resolved same-day
GreyStone Counseling homepage — serif hero over a mountain landscape with clay call-to-action

The production homepage at greystonebh.com — live.

01 · The client

Findable for the searches that matter most.

GreyStone Counseling, PLLC is a solo telehealth practice run by Tara Ross, M.A., LPC, LSOTP, based in Weatherford, TX and licensed to see clients anywhere in Texas. Her specialties sit in the corners many practices avoid — grief and bereavement, anticipatory grief, court-ordered counseling, and LSOTP treatment for problematic sexual behavior.

That work depends on two things at once: being findable by people searching for it, and a site that reads as steady, not clinical. The build had to serve both — a brand that feels calm and credible on a hard day, and search infrastructure that puts the practice in front of the right person at the right moment, statewide.

02 · Brand system

One tokens file. Every color, typeface, and spacing value traces back to it.

A warm cream ground, a serif for headlines paired with a clean sans for body copy, and a clay terracotta reserved only for the call to action — never body text, never decoration.

Cream#F4EFE6
Clay (CTA)#C47A5A
Sage#8FA18D
Slate#2B313A
Peach#F2B27A
Taupe#C9B7A6

Tokens — public/brand/tokens.css

03 · Content architecture

One layout owns every page's SEO head and schema.

A single Astro layout owns every page's SEO head and JSON-LD schema, so nothing drifts page to page. Local reach comes from a data-driven city template: one file generates a unique landing page per Texas metro from an ~80-city dataset, each with its own intro and local framing rather than templated filler.

Core

  • /
  • /about
  • /contact
  • /investment
  • /fine-print

Service focus

  • /focus/mental-health
  • /focus/court-services
  • /focus/unmanageable-behaviors

Local SEO — [city].astro × 19

  • /dallas-online-counseling
  • /houston-online-counseling
  • /austin-online-counseling
  • /fort-worth-online-counseling
  • /san-antonio-online-counseling
  • + 14 more

Remaining ~60 tracked cities render as a linked service-area list today — a straightforward data-driven expansion when the client is ready.

04 · Technical & on-page SEO

A strong base, with the remaining gaps closed.

An audit against the live site found a genuinely strong technical base — valid HTTPS, correct sitemap and robots.txt, one H1 per page, MedicalBusiness and Person schema site-wide. The remediation pass closed the remaining gaps.

BeforeAfter
Homepage title
68 chars — truncates in SERP
Online Grief & Anxiety Therapy Across Texas — GreyStone
Unmanageable Behaviors title
77 chars — truncates
Trimmed to fit SERP display width
About meta description
~200 chars — truncates
Trimmed to ≤160 chars
Homepage structure
No keyword-bearing H2
H2 added under H1
Homepage + Investment
No FAQ content
FAQ blocks + FAQPage schema
Headshot images
Eager-loaded
loading="lazy"
Search engine indexing
Not submitted
IndexNow — 27 URLs, 202 Accepted
05 · Domain & infrastructure

DNS, TLS, and redirects verified end to end.

Moved the domain into the client's own registrar account, connected it to Netlify, and verified the full chain end to end — rather than stopping at "it resolves."

Domain

greystonebh.com transferred into client's Porkbun account.

DNS

ALIAS + CNAME → Netlify, verified on authoritative NS.

TLS

Let's Encrypt cert issued, Force HTTPS on.

Redirects

http→https and www→apex confirmed 301.

Search Console

Domain property verified via DNS TXT.

06 · Incident log

Two real incidents. Both root-caused and resolved the same day.

One on the site, one on the client's business email — surfaced during this engagement.

Resolved · < 1 min downtime

Full-site outage — every route 404'd.

Cause: Server-side deploy had no root netlify.toml, so the build published a stale local publish path baked into a cached config instead of dist/.

Detected: Immediate post-deploy verification sweep — every route, including the raw .netlify.app subdomain, returned 404.

Fix: Added a canonical netlify.toml (build command, publish = "dist", pinned Node version) and redeployed.

Verified: All 27 routes re-checked at 200, shipped SEO changes confirmed live in the response body.

Resolved

Business email stopped receiving mail.

Cause: The domain account transfer reset DNS, silently wiping all MX, SPF, and DMARC records — no mail routing existed at all.

Diagnosed: Ruled out the registrar's native email service, confirmed the client's real provider was Microsoft 365, and validated the tenant by resolving Microsoft's standard MX hostname pattern to live Exchange Online Protection IPs before touching DNS.

Fix: Restored MX (priority 0), SPF, and autodiscover CNAME records to spec.

Verified: Caught an early false alarm — a backend DNS sync delay, not a bad record — then confirmed all three records live on both the registrar's authoritative nameservers and public resolvers.

The unglamorous half of a launch — DNS, mail, a deploy that goes sideways at the worst moment — is the half that actually determines whether a client's business stays reachable. We treat it with the same rigor as the design.
A look inside

Screenshots.

The project in the wild — UI from the live product.

More work like this

We build for practices where trust is the whole product.

Brand systems, local SEO, and infrastructure that holds up on launch day — for telehealth, counseling, and other practices where the site has to be found and has to be right.

Talk to us about your site →

Need a site that's still up after launch day?

Design and DNS both matter. Tell us what you're running and we'll scope what it would take to get it right — brand, build, and the infrastructure underneath it.

Let's Talk