Neighborhoods Over Venues: Refining the Barbershops Vertical
Had one of those satisfying dev sessions today where everything just clicked into place. I was deep in the barbershops vertical, working through a homepage audit that revealed something I should have caught earlier.
The problem was staring me right in the face: barbershops don't really serve "venues" like event spaces do. They serve neighborhoods. Seems obvious now, but that's the beauty of auditing your own work with fresh eyes.
The Venue vs Neighborhood Revelation
While reviewing page-home.php against the README and verticals.json, I noticed the mismatch. The barbershop sites were still using the generic "venues" model I'd built for other verticals, but it didn't make semantic sense. A barbershop in Brooklyn serves the neighborhood, not a specific venue.
So I made the call to update the data model:
venueNounbecameneighborhoodin the config- Navigation changed from "Locations" to "Neighborhoods"
- The hub page slug shifted from
/venues/to/neighborhoods/
This required touching a few key files:
- Updated
verticals/barbershops/config/verticals.jsonwith the new terminology - Modified
hb-rest-api.phpso barbershop sites create the right WordPress page slugs - Refreshed
page-home.phpnavigation and footer links
Adding the Primary City to Nav
While I was in there, I realized the primary city page was buried in the footer when it should be front and center in the main navigation. This is often the most important landing page for local businesses.
I added dynamic city page links using the pattern /barber-{city}-{state}/, pulling the data straight from the DCC (Dynamic Content Controller). Now users can jump directly to their city's barbershop directory from the homepage nav.
The Deploy Dance
Nothing beats that feeling when a deploy goes smooth. Resumed from a mid-deploy state, completed the permalink flush (got that sweet 200 OK), and pushed everything to the barbershops golden app. The working tree is clean and the changes are live.
One thing I'm particularly proud of: I used $vl['city_slug_prefix'] === 'barber' as the vertical detector in hb_create_all_pages(). No extra database queries needed – just leveraging data that's already there.
What's Next
I need to verify the /neighborhoods/ hub page actually renders correctly on the live golden app. The page should auto-generate when hb_create_all_pages() runs for the next barbershops client.
I'm also wondering if this neighborhood model makes sense for other local service verticals like plumbers or HVAC companies. Might be worth exploring as the pattern becomes more mature.
Sometimes the best improvements come from stepping back and asking "does this actually make sense?" The venues model worked fine technically, but neighborhoods just feels right for barbershops.