Extensionly — App Breakdown & Feature Audit
Generated: October 2026 Purpose: Complete inventory of built features for partner review — what's complete, what needs tweaking.
1. CLIENT-FACING FUNNEL (Consumer Journey)
1.1 Marketing Homepage (/)
Status: ✅ Complete
- Hero with "Online inspiration. Local expertise." positioning
- Location search bar with autocomplete (Google Places)
- Popular searches (method + specialty quick links)
- Featured stylist cards (3 hand-picked profiles)
- SEO: Organization + WebSite JSON-LD structured data
- Public nav with login/register CTAs
1.2 Find Your Match (/find)
Status: ✅ Complete
- Entry point for the Match Quiz experience
- Accepts
?location= param to prepopulate from marketing site - Recognizes returning clients (authenticated OR localStorage) → "Welcome back" flow
- Delegates quiz to MatchQuiz component
- One Match Profile per client — upserted, never duplicated
1.3 Match Quiz (/match-quiz)
Status: ✅ Complete (recently refined)
- Multi-step guided quiz: Goal → Hair Type → Texture → Density → Specialized Needs → Color → Method Openness → Location → Photo (optional)
- "Not Sure" answers excluded from scoring (never trigger zero results)
- Saves to ClientMatchProfile entity (server-side, keyed by email)
- Also saves to localStorage for anonymous return
- Match Profile → normalized
match_signals object (shared taxonomy with professional profiles) - Match Reveal: Fetches real search results, shows up to 6 professional cards with grounded match reasons (no fake percentages)
- 4-state semantic matching: Match / TBD (Method to be determined) / Consultation Recommended / Different
- "Why?" toggles on TBD and Consultation Recommended states — explains why a dimension is uncertain
- Consultation CTA on each match card — prefills with Match Profile data for Pro professionals; links to profile for free professionals
1.4 Search & Directory (/search, /discover)
Status: ✅ Complete
/search — Full directory search with filters (method, specialty, service setting, brands, location, radius, travel, rating, verified, language)/discover — Browse/discovery page- Server-side search via
searchDirectory backend function - DB-level pagination for simple filters; chunked fetch for geo/keyword
- Signal-based ranking: location creates candidate pool, client preferences rank within it
- Method alias bridging (SEARCH_METHODS ↔ EXTENSION_SERVICES vocabularies)
- Specialty alias bridging (current ↔ legacy values)
- Zero-result fallback: broadens state search to all published stylists
- Search logging (DirectorySearch entity) with session/visitor threading
1.5 Public Stylist Profile (/stylists/:cityState/:slug)
Status: ✅ Complete
- SEO-friendly URLs (
/stylists/atlanta-ga/holly-rae) - Hero: avatar, name, business name, professional title, location, verified badge
- Portfolio gallery with lightbox (images + Reel video playback)
- Method-specific experience display (exact months/years per method)
- Areas of Expertise with Verified Expert badges
- Color service level + color known-for
- Texture patterns + texture services
- Brands worked with
- Business hours display
- Before You Book section (custom FAQ, investment guide)
- Reviews section
- Follow button + follower count
- Save/favorite button
- Share button (native, WhatsApp, Facebook, email, copy link)
- Booking CTA: "Book Consultation" (direct booking) or "Start Consultation" (Extensionly form)
- Related stylists link grid
- SEO: LocalBusiness JSON-LD, FAQPage schema, Open Graph tags
- Engagement event tracking (profile_viewed, portfolio_viewed, booking_link_clicked)
1.6 Consultation Request
Status: ✅ Complete (recently refined)
- Lightweight consultation flow via
requestConsultationLightweight backend function - Works for both authenticated and anonymous consumers
- Prefilled from Match Profile — only asks for: photos, timeframe, optional message
- Match origin metadata stored on consultation (match_source, match_profile_summary, match_reasons, originating_profile_id)
- Magic link sent to anonymous users for account creation
- Stylist notification (email + in-app)
- Engagement events tracked (consultation_started, consultation_submitted)
1.7 Client App (Logged In)
Status: ✅ Complete
- Role-aware navigation (client vs professional sidebar)
- My Matches (`/matches`) — Saved match results, re-runnable quiz
- Explore (`/explore`) — Directory browse for clients
- Saved (`/saved`) — Saved/favorited stylists
- My Profile (`/profile`) — Client profile + Match Profile management
- Consultations (`/consultations`) — Client's own consultation requests with status tracking
- Notifications — Bell icon with notification feed
- Default landing:
/matches for returning clients with completed profiles
2. PROFESSIONAL EXPERIENCE (Stylist App)
2.1 Onboarding & Profile Setup
Status: ✅ Complete
- Profile Setup (`/profile-setup`) — Multi-section editor:
- Basic info (name, title, avatar, cover, bio) - Location (address autocomplete → geocoding pipeline) - Methods (extension methods + per-method experience) - Services & expertise (general expertise, color, texture) - Brands worked with (dynamic multi-select with suggestions) - Certifications (structured entries) - Social links (multi-platform) - Booking configuration (direct vs Extensionly form, automation level) - Investment guide (per-method pricing) - Business hours - Before You Book custom FAQ - License verification (document upload → admin review) - Travel availability (local radius, nationwide, international)
- Match Profile Setup (`/match-profile`) — Guided experience:
- Methods chapter - Expertise chapter (Areas of Expertise with Familiar/Focused/Verified levels) - Texture chapter - Color chapter - Portfolio chapter (representative work selection) - Growth chapter (growth priorities) - Non-fit chapter (exclusions) - Pricing chapter - Summary chapter (ideal client confirmation)
- Profile completion progress tracking
- AI Bio Assistant — generates bio from structured profile data (never invents credentials)
2.2 Dashboard (/dashboard)
Status: ✅ Complete
- Discovery Score hero (profile completeness + visibility score)
- Today's focus section
- This week summary
- Business snapshot
- Quick actions
- Growth opportunities
- Client studio section
- AI studio section
- Circle (community) section
- Engagement metrics (profile views, searches, favorites, shares)
2.3 Client Management (/clients)
Status: ✅ Complete
- Client list with search and filters
- Client detail page (
/clients/:id) with:
- Snapshot (identity, health, goals, needs attention) - Hair profile - Activity timeline - Consultations list - Formulas - Notes timeline - Journey entries
- Add note dialog
- Client form (manual add)
2.4 Consultations (/consultations)
Status: ✅ Complete (recently refined)
- Professional's incoming consultation requests (leads)
- Lead card list with status (new, reviewing, qualified)
- Lead Detail with restructured hierarchy:
- Match Origin Section (top) — shows "MATCHED THROUGH EXTENSIONLY" with match profile summary + "Why they matched with you" reasons (only for match-origin consultations) - Contact info - Client's goals - Hair profile - Method preference - Photos - Timeframe - Client message
- Accept → adds client to CRM
- Reject / mark as not a fit
2.5 Community (/community)
Status: ✅ Complete
- Feed with post types: ask_community, transformation, celebrate_win, business_discussion, share_education
- Post composer with media uploads
- Post cards with like, save, share, reply
- Comment sections
- Question of the Day
- Community spotlight
- Sidebar (new members, active discussions, upcoming events)
- Follow/unfollow
- Community profiles (
/community/:slug) - Post detail (
/community/post/:id) - Question detail (
/community/question/:id)
2.6 Messaging (`/messages))
Status: ✅ Complete
- Conversation list
- Conversation view with message bubbles
- Message composer with emoji picker
- Message requests (initiate / respond)
- Block/report member
- Mark conversations read
2.7 Formulas (/formulas)
Status: ✅ Complete
- Formula list
- Formula capture (
/formulas/capture) — multi-stage product mapping - Formula detail (
/formulas/:id) with stages, products, outcomes - AI formula generation workflow
- Product recognition
- Outcome tracking
2.8 Business Intelligence (/business-intelligence)
Status: ✅ Complete (gated by permission flag)
- Owner dashboard with traffic, search, consultation metrics
- Unique visitors, total sessions, page views
- Search conversion funnel
- Traffic vs search comparison chart
- Consultation metrics
- Recent members
- Visitors online now
- Analytics test panel
- Historical data notice
2.9 Creator Studio (/creator-studio)
Status: ✅ Complete (gated by permission flag)
2.10 Color Match (/color-match)
Status: ✅ Complete
- Photo capture instructions
- Photo capture step
- Inspiration photos
- Virtual try-on (multiple AI methods: masked, kontext, face swap, pro fill)
- Color card guide
- Photo preview dialog
2.11 Connected Apps (/settings)
Status: ✅ Complete
- Google Calendar (connect, sync, status)
- Square (connect, status, disconnect, webhook)
- Booking link management
- Notification preferences
2.12 Members Directory (/members)
Status: ✅ Complete
- Member list with cards
- Member filters
- Member detail cards
3. MARKETING & SEO PAGES
3.1 Method Pages
Status: ✅ Complete
- Methods index (
/methods) — all installation methods - Method entity pages (`/methods/:slug}) — Education pillar with overview, who it's for, maintenance, FAQs
- JSON-LD FAQPage schema
- Dynamic connections (stylists offering the method, cities)
3.2 Guides & Tools
Status: ✅ Complete
- Method Chooser (
/method-quiz) — interactive method recommendation quiz - Weft Rows Guide (
/weft-rows) — weft calculator, type compare, scenarios, FAQ - Hair Extension Length Finder (
/tools/hair-extension-length-finder) — interactive length visualization - Hair Extensions for Thin Hair (
/guides/hair-extensions-for-thin-hair) — educational guide - Bel Hair Calculator (
/bel-hair-calculator) — hair needs calculator - IG Kit (
/ig-kit) — Instagram growth toolkit
3.3 Landing Pages
Status: ✅ Complete
- Brand landing pages (
/brands/:brand) - Certification landing pages (
/certifications/:cert) - Expertise landing pages (
/expertise/:slug) - City/service landing pages (
/:cityState/:service) - SEO-optimized with structured data
- Dimension catalog powers all landing page data
3.4 For Stylists (/for-stylists)
Status: ✅ Complete
- Hero with value proposition
- Market opportunity section
- How it works
- Platform features
- Google search/discovery section
- Community preview
- Business tools
- Booking tools
- AI tools
- Social proof
- Final CTA
3.5 Other Marketing Pages
- About (
/about) — mission, manifesto, team - Pricing (
/pricing) — membership tiers - Resources (
/resources) — resource hub - Areas of Expertise (
/areas-of-expertise) — expertise overview
4. ADMIN
4.1 Content Management
Status: ✅ Complete
- Admin Content (
/admin/content) — FAQ, events, daily questions, spotlights management - Admin Data Export (
/admin/export) — CSV/data export - Admin Media Export (
/admin/media-export) — media download - Event Dictionary (
/admin/event-dictionary) — analytics event catalog
4.2 Profile Management
Status: ✅ Complete
- Admin Profiles (
/admin/profiles) — all professional profiles - Admin Installation Methods (
/admin/installation-methods) — method catalog + entity page content - Admin Location Audit (
/admin/location-audit) — location resolution health - Product Lab (
/admin/product-lab) — product catalog management
4.3 Verification
Status: ✅ Complete
- Admin Verification (
/admin/verification) — license verification review - Admin Expert Applications (
/admin/expert-applications) — Verified Expert application review - Direct specialty assignment panel
4.4 Team & Invitations
Status: ✅ Complete
- Admin Team (
/admin/team) — internal team member management - Team Profile (
/team-profile) — team member self-service profile - Admin Invitations (
/admin/invitations) — invitation type management (/join/:slug pages) - Founding Onboarding (
/admin/founding) — founding artist onboarding
4.5 Bel Hair Campaign
Status: ✅ Complete
- Admin Bel Hair Campaign (
/admin/bel-hair) — 30-day trial invitation management - Bel Hair Landing (
/bel-hair-invite/:token) — private invitation page - Bel Hair Redeem (
/bel-hair-invite/:token/start) — trial redemption - Trial countdown banner
- Upgrade checkout (50% first-month discount)
- Trial expiration workflow
5. AUTH & ACCESS
5.1 Authentication
Status: ✅ Complete
- Login (
/login) — email/password + Google OAuth - Register (
/register) — email/password + Google, OTP verification flow - Forgot Password (
/forgot-password) - Reset Password (
/reset-password) - Admin Login (
/admin-login) - Auth Finish (
/auth/finish) — post-auth routing - ProtectedRoute — gates authenticated pages
- Role-based access (admin, user, client, professional)
5.2 Invitation Flows
Status: ✅ Complete
- Join Invitation (
/join/:slug) — configurable onboarding via InvitationType - Claim Profile (
/claim/:token) — founding artist profile claim - Bel Hair Trial — private trial campaign
6. BACKEND INFRASTRUCTURE
6.1 Search & Matching
searchDirectory — Server-side directory search with DB pagination, geo-radius, keyword, signal-based rankingsearchLocations — Location autocompletegeocodeLocation — Geocoding pipeline (cache → local DB → Google Maps API)syncDimensionCatalog — SEO dimension catalog syncgenerateSitemap — XML sitemap generation
6.2 Consultations & Clients
requestConsultationLightweight — Consumer consultation request with match originmanageConsultation — Professional consultation management (list, accept, reject)loadClientConsultations — Client's own consultation historygetHairProfile — Consumer hair profile retrievalverifyHairJourney — Hair journey account verification
6.3 Match Profiles
saveClientMatchProfile — Client Match Profile save (service role, keyed by email)loadClientMatchProfile — Client Match Profile load
6.4 Profile & Portfolio
getPublicProfile — Public profile projection (service role)generateProfileBio — AI bio generation from structured dataimportPortfolioItem — Instagram/portfolio importanalyzePortfolioItem — AI portfolio tag analysisgetInstagramMedia — Instagram media fetch (connector-backed)checkSlugAvailability — URL slug validation
6.5 Payments
createStripeCheckout — Stripe checkout session creationstripeWebhook — Stripe webhook handler (subscriptions, payments)createStripePromoCode — Stripe promotion code creationcreateBelHairUpgradeCheckout — Bel Hair trial upgrade checkoutclaimMembership — Membership claim/activation- Square:
squareAuthUrl, squareCallback, squareStatus, squareDisconnect, squareWebhook
6.6 Integrations
- Google Calendar:
googleCalendarStatus, googleCalendarSync (connector-backed) - Instagram:
getInstagramMedia (connector-backed) - Square: full OAuth + webhook flow
6.7 Community & Messaging
engageCommunity — Like, save, share, reply (atomic counter updates)getCommunityMembers — Member directorygetCommunitySidebarData — Sidebar contentsendCommunityMessage — Direct messaginginitiateMessageRequest — Message request flowrespondToMessageRequest — Accept/reject message requeststoggleFollow — Follow/unfollow with atomic count updatesblockMember, reportMember — Safety toolstoggleEventRSVP — Event RSVP
6.8 Analytics
trackPageView — Page view + visitor session trackingtrackConsultationStart, trackConsultationSubmit — Consultation funnel eventstrackBookingClick — Booking link clicksgetOwnerDashboard — Aggregated dashboard metricsgetEngagementMetrics — Per-profile engagement statsmetaCapi — Meta Conversions API integrationpurgeAnalyticsTestData — Test data cleanup
6.9 AI Features
- Virtual Try-On:
virtualTryOnMasked, virtualTryOnKontext, virtualTryOnFaceSwap, virtualTryOnProFill generateFormulaWorkflow — AI formula generationrecognizeFormulaProducts — Product recognition from photosanalyzePortfolioItem — Portfolio image tag analysisgenerateProfileBio — AI bio generation
6.10 Email & Notifications
- Transactional email via SendEmail integration (custom domain supported)
getNotifications, markNotificationsRead — In-app notificationscreateSystemAnnouncement — System-wide announcements- Klaviyo integration:
klaviyoWebhook - Email logging via EmailLog entity
6.11 Admin & Verification
submitExpertApplication, reviewExpertApplication, assignVerifiedSpecialty — Verified Expert workflowsubmitLicenseVerification, reviewLicenseVerification — License verificationcreateFoundingStylist, sendFoundingInvitation, verifyFoundingInvitation, completeFoundingClaim — Founding artist onboardingredeemInvitation — Invitation type redemptionredeemBelHairTrial, verifyBelHairInvitation, manageBelHairCampaign, expireBelHairTrials — Bel Hair campaignexportData, exportMedia — Data/media exportimportStylistContent — Stylist content import
6.12 Engagement & Sync
saveStylistLightweight — Anonymous stylist save/favoriteadjustFavoriteCount — Atomic favorite count updatetoggleFollow — Follow with atomic countbackfillEngagementCounts — Count backfillsyncBrands — Brand catalog sync (usage count + searchable threshold)auditLocationHealth, backfillGeoCoordinates, runLocationResolverTests, runSearchIntegrityTests — Health checkstouchStylistLogin — Login trackingsecureWorkspaceWrite — Secure write operations
7. WORKFLOWS (Automations)
7.1 Scheduled
dailyLocationAudit — Daily location resolution health checkexpireBelHairTrials — Bel Hair trial expiration handlinganalyzePortfolioItems — Portfolio AI analysis queue
7.2 Event-Triggered
- Entity triggers (create/update/delete on ProfessionalProfile, etc.)
- Connector triggers (webhooks from authorized connectors)
8. DATA MODEL (Key Entities)
Consumer-Side
- ClientMatchProfile — Saved Match Quiz answers + normalized match signals (one per email)
- HairJourneyAccount — Frictionless consumer account (magic link)
- HairProfile — Consumer's persistent hair profile
- ConsultationRequest — Consultation lead with match origin metadata
- SavedStylist — Consumer's saved/favorited stylists
- Review — Public reviews
Professional-Side
- ProfessionalProfile — The professional identity (one per user)
- ArtistMatchProfile — Private matching preferences (growth priorities, non-fit exclusions)
- StylistMethodExperience — Per-method experience (exact months/years)
- PortfolioItem — Structured portfolio entries (Instagram import + device upload)
- Certification — Structured certifications
- VerifiedExpertApplication — Verified Expert application workflow
- LicenseVerification — License verification documents
Community
- CommunityPost — Feed posts with denormalized engagement counters
- Comment — Post comments + DailyQuestion answers
- Follow — Follow relationships
- SavedPost — Saved posts
- DirectMessage / Conversation / MessageRequest — Messaging
- CommunityEvent / EventAttendee — Events
- DailyQuestion — Question of the Day
- CommunitySpotlight — Spotlight features
- BlockRelationship / ReportRecord — Safety
Business
- Client — Professional's client records
- ClientNote — Client notes
- Formula / FormulaOutcome — Color formulas
- ProductCatalog / ServiceProduct — Products
- Appointment — Appointments
- BookingRecord / BookingLink — Booking records
- Subscription — Membership subscriptions
Platform
- User — Built-in (auth, email, role)
- TeamMember — Internal team profiles
- InvitationType / InvitationSignup — Configurable onboarding
- BelHairInvitation — Bel Hair trial campaign
- StylistInvitation — Legacy stylist invitations
- Brand — Brand catalog with usage tracking
- InstallationMethod — Method catalog + entity knowledge
- DimensionCatalog — SEO dimension catalog
- LocationCache — Geocoding cache
Analytics
- PageView / VisitorSession — Traffic analytics
- EngagementEvent — Profile engagement funnel
- DirectorySearch — Search logging
- ProfileAnalyticsDaily — Daily rollups
- ProductEvent / LearningEvent / ActivityEvent — Product analytics
- Notification / NotificationPreference — Notifications
- MarketingConsent — Consent tracking
- EmailLog / Unsubscribe — Email compliance
- ConnectedApp — Connected app state
- ProfileSetupProgress — Onboarding progress
- BadgeAward / ReputationEvent / Certificate — Recognition
- Mentorship — Mentorship program
- AiMatch / AiRecommendation / AiAnalysis — AI records
- Workspace — Future workspace isolation
- FAQ — Public FAQs
- Photo — Photo records
9. KNOWN ISSUES & AREAS NEEDING ATTENTION
Scaling
- In-memory geo-distance filtering fetches all profiles with coordinates; needs native geospatial index for scale
- DimensionCatalog city resolution limited to 5,000 records in chunked path
- ProfileAnalyticsDaily rollup not yet wired for search impression tracking
Data
- robots.txt not served in preview environment
- Potential Shannon@ user account role/profile linking misconfiguration
- User account dashboard may redirect incorrectly to profile setup screen
Potential Tweaks for New Direction
- Match Quiz: verify "Not Sure" handling across all dimensions (recently fixed but worth QA)
- Consultation form: verify prefilled data mapping for all hair loss and specialized needs categories
- Professional dashboard: MatchOriginSection only shows for match-origin consultations — verify non-match consultations still look clean
- Client navigation:
/matches as default landing — verify for new vs returning clients - Role detection:
useAccountType prioritizes explicit client type over admin defaults — verify edge cases
10. SUMMARY
What's Working:
- Full client funnel: marketing → match quiz → search → profile → consultation → booking
- Full professional app: onboarding → dashboard → clients → consultations → community → messaging → formulas
- SEO infrastructure: method pages, landing pages, sitemap, structured data
- Analytics: page views, sessions, engagement events, search logging, dashboard
- Payments: Stripe (live), Square (OAuth + webhook)
- Integrations: Google Calendar, Instagram, Klaviyo, Meta CAPI
- AI: virtual try-on, formula generation, portfolio analysis, bio generation
- Admin: full management suite for content, profiles, verification, team, campaigns
What May Need Tweaking:
- Match scoring weights and signal priorities (based on new direction)
- Consultation prefilled data completeness
- Professional onboarding flow sequence
- Mobile experience QA across all flows
- Analytics dashboard completeness for new KPIs
- Any new features not yet built (depends on new direction specifics)