Peace from Pieces: A Therapy Site Built To Collect Nothing by Eric MoorePeace from Pieces: A Therapy Site Built To Collect Nothing by Eric Moore

Peace from Pieces: A Therapy Site Built To Collect Nothing

Eric Moore

Eric Moore

The homepage. One promise, one primary action, no widget asking to chat.
The homepage. One promise, one primary action, no widget asking to chat.
The palette is explained on the page rather than just applied to it.
The palette is explained on the page rather than just applied to it.
Project Type : Clinician website, strategy through build
Client: Peace from Pieces, LLC · Jean-Ann Moses, LMHC (licensed Florida and South Carolina)
Duration: 17 days
Jean-Ann Moses is a licensed mental health counselor running a virtual practice across Florida and South Carolina. She needed a website, and the usual version of that project would have been a template, a booking widget, a chat bubble, and an analytics tag. That version would also have been a quiet liability, because every one of those things watches a person who came to the page in the worst week of their life.
So the brief inverted. The question stopped being what the site should collect and became what it should refuse to.

Problem

A therapy website is a place people arrive at while in crisis. Standard growth tooling treats that visitor as a conversion event to be tracked, retargeted, and measured.
Anything that invites clinical detail into a web form creates a records problem the practice is not set up to hold, and a trust problem it cannot undo.
Virtual practices get pushed toward thin city pages for search. For a counselor with no office in any of those cities, that is a page that exists to rank and lies about where she is.

Process

1. Decide what the site is not allowed to do. No analytics, no tag manager, no pixels, no embedded scheduling widget, no chat. Not deferred, not configured carefully. Absent. The scheduling, intake, and payment all stay inside SimplePractice, where a clinical record belongs.
Five cards, five real service pages behind them. No thin content.
Five cards, five real service pages behind them. No thin content.
2. Design the contact form to refuse information. It takes a name, an email, an optional phone, and a reason for reaching out. The message field’s own placeholder tells you not to put clinical detail in it. There is an acknowledgment checkbox saying the same thing, and a crisis panel with 988 and 911 sitting directly beside the submit button, not buried in a footer.
The form is designed to refuse clinical detail. Crisis lines sit beside the submit button, not in the footer.
The form is designed to refuse clinical detail. Crisis lines sit beside the submit button, not in the footer.
3. Build one honest geography page instead of ten dishonest ones. A single statewide hub for Florida and South Carolina, because that is the truth of where she is licensed. No city pages for cities she has no presence in.
One honest statewide page instead of ten thin city pages.
One honest statewide page instead of ten thin city pages.
4. Hand-author the whole thing. Thirteen static pages, no framework, no CMS. Self-hosted variable fonts, so the site does not phone Google to render a headline. Two first-party scripts, total.
The bio page. License number and NPI render sitewide, so the credential is checkable.
The bio page. License number and NPI render sitewide, so the credential is checkable.
One locked service template, reused across all six pillar pages.
One locked service template, reused across all six pillar pages.
Every service page answers the same questions in the same order.
Every service page answers the same questions in the same order.
5. Put the motion in the transitions, not in the tracking. A page-transition curtain, scroll-triggered reveals, slide accordions, and a sticky mobile CTA that gets out of the way over the footer so it can never cover a crisis line. All of it degrades correctly under reduced-motion and in Safari.
On mobile the sticky CTA hides over the footer so it can never cover a crisis line.
On mobile the sticky CTA hides over the footer so it can never cover a crisis line.
An internal styleguide ships with the site, so the next change matches the last one.
An internal styleguide ships with the site, so the next change matches the last one.
6. Prove the restraint instead of asserting it. A runtime audit loads all 13 pages in a real browser, scrolls each to the bottom to force any deferred request, and records every host contacted.
Every network request all 13 pages make. The only host contacted is their own.
Every network request all 13 pages make. The only host contacted is their own.

Solution & Outcome

Thirteen pages contact exactly one host: their own. Zero third-party hosts, verified at runtime, not just in the source.
Schema is complete where it counts: MedicalBusiness, Person, and FAQPage on the home page, Service and FAQPage on every service page, ContactPage on contact. Her license number and NPI render in the footer of every page, so the credential is checkable.
Accessibility was treated as a defect class. The eyebrow gold failed contrast at 2.6:1 and was darkened to clear 4.9:1; axe serious violations cleared sitewide.
Security headers ship at the edge: nosniff, frame DENY, strict-origin referrer, and a Permissions-Policy that turns off camera, microphone, geolocation, and cohort tracking.
There are no traffic numbers in this case study, and there never will be. The site loads no analytics, which was the decision the whole project turned on. A practice that measures nothing about the person in crisis is the deliverable, not a gap in the reporting. The engineering is the evidence.
Built ahead of the client’s domain cutover, which is hers to schedule.
If you are building something where the trustworthy version and the well-instrumented version are in conflict, that tension is the actual project. I would rather work out what a system should refuse to do than add one more thing that watches people. If that sounds like the problem in front of you, my inbox is open.
Like this project

Posted Jul 26, 2026

A licensed counselor's site built to refuse data. No analytics, no pixels, no widgets. Thirteen pages, zero third-party hosts, verified at runtime.

Likes

0

Views

2

Timeline

Jun 21, 2026 - Jul 7, 2026