← back to Ventura Claw Leads

lib/verticals.js

27 lines

// Single source of truth for the 8-vertical green list. Used by route filters,
// view labels, seed data, and the vertical CHECK constraint in 001_init.sql.
//
// HARD RULE — adding a vertical requires:
//   1. New entry here
//   2. New migration amending the businesses.vertical CHECK constraint
//   3. Code review confirming the new vertical does NOT trigger state-board
//      referral-fee restrictions (medical/legal/financial/real-estate/contracting).

const VERTICALS = [
  { key: 'food',         label: 'Food & drink',  blurb: 'Restaurants, cafes, bakeries, delis, food trucks',                      icon: '🍽' },
  { key: 'beauty',       label: 'Beauty',        blurb: 'Hair, nails, brows, lashes, barbers, makeup, non-medical spa',          icon: '✨' },
  { key: 'retail',       label: 'Retail',        blurb: 'Boutiques, jewelry, shoes, accessories, home goods, gifts',             icon: '🛍' },
  { key: 'fitness',      label: 'Fitness',       blurb: 'Yoga, pilates, gyms, dance, martial arts, personal trainers',           icon: '🧘' },
  { key: 'pet_services', label: 'Pet services',  blurb: 'Groomers, walkers, daycare, sitters, training',                         icon: '🐾' },
  { key: 'auto_detail',  label: 'Auto detail',   blurb: 'Detailing, hand car wash, window tint — non-mechanical',                icon: '🚗' },
  { key: 'cleaning',     label: 'Cleaning',      blurb: 'House cleaners, organizers, residential moving, staging',               icon: '🧹' },
  { key: 'creative',     label: 'Creative',      blurb: 'Photographers, DJs, event planners, florists, designers',               icon: '🎨' }
];

const BY_KEY = Object.fromEntries(VERTICALS.map(v => [v.key, v]));

function label(key) { return BY_KEY[key]?.label || key; }
function icon(key)  { return BY_KEY[key]?.icon  || '•'; }

module.exports = { VERTICALS, BY_KEY, label, icon };