BJ Eyebrow Threading
A single-page salon site built on Astro and Tailwind CSS, backed by a real design system so a second page costs an hour of work instead of a week.
What was built, and for whom.
- Client
- BJ Eyebrow Threading
- Industry
- Salons and personal care
- Scope
- Single-page site with a custom design system
- Design system
- Tokens, component patterns, and documented interactive states
- Local search
- Google Business Profile set up alongside the page
- Stack
- Astro, Tailwind CSS
- Location
- New England
- Live site
- bjeyebrowthreading.com
- Related
The situation
A threading salon with a straightforward set of jobs to do on the web: say what the services are, say where the salon is and when it is open, and get somebody to call or walk in. That is the whole list.
The temptation on a project like this is to sell eleven pages because eleven pages sounds like more value. It is not. A page that exists to fill a navigation slot is a page that dilutes the one page anybody actually reads.
What was actually needed
One page, with a tap-to-call button above the fold on a phone. Everything a client needs before calling or walking in fits comfortably in a single scroll.
Speed, because this is a phone-first audience. A threading visit is decided in a spare minute, not in a research session.
Somewhere for the business to grow into. A one-page site should not be a dead end that has to be thrown away when a second page is needed.
What we built
A single-page static site on Astro with Tailwind, and, behind it, a real design system: tokens for color, type scale, and spacing, component patterns for every section type, and documented states for every interactive element.
That is more infrastructure than one page needs, and it was a deliberate decision. The design system is why the second page will take about an hour rather than a week, and why a change to the type scale takes one edit instead of forty.
The work started with content structure: services, what each one is and what it costs, where the salon is and when it is open, the walk-in policy, and the phone number, written before any layout existed. Then a token set and a component library, small but real, not utility classes sprinkled until it looked right. Then a single static page on Astro, with no client-side framework, no hydration, and nothing shipped to the browser that did not need to be there. The phone number is a tap-to-call link on the first screen and again beside every service, with the walk-in policy next to it, because that is how this salon takes clients. And the Google Business Profile, which is what most new clients see first, was built with the same care as the page.
What we deliberately did not do
We did not build a blog. Nobody was going to write it, and an abandoned blog is worse than no blog.
We did not add a client-side framework. There is no interactive state on this page that needs one. Shipping a framework here would have been decoration.
We did not build a gallery of every service. A short, honest set of images beats a padded one, and padding is visible.
Check it yourself
The site is live at bjeyebrowthreading.com. Open it on a phone and time how long it takes to become usable, then run the URL through PageSpeed Insights.
As with every case study here, we are not publishing a before-and-after number, because we did not baseline the previous state under controlled conditions. The current number is real and it belongs to Google, not to us.
Sometimes one page is the right answer.
Send us what you have. If the honest recommendation is one page and a booking link, that is what you will hear. Twenty minutes, and it is not a pitch.
Book a call
