Concepts, value, and typical clone scenarios — less code.
Concepts, value, and typical clone scenarios — less code.
Preparing N9Life content
Preparing N9Life content
Preparing N9Life content
/n9/specialists is a clone-only page under app/[locale]/n9/layout.tsx (ModuleShell, LoginGateCta like the vault). It is not an L1 opportunity type and not the AI matcher. There is no LLM.
POST /api/n9life/match (auth() + connection()) runs detectCrisisKeywords. Crisis → 422 crisis_pause with the ethics response. The vault is not read.deriveSignals(profile) builds labeled facts from charts_by_system only: life_path, matrix_center, hall_id, hd_type, hd_authority, ready_systems.findSpecialists loads public entities with db().queryDocs on collection entities, types from NUMEROLOGY_CATEGORY_ENTITY_TYPES .id values (numerologist, human_design_analyst, …), visibility == public. Using Object.keys of that preset would send NUMEROLOGIST and match nothing.features/n9life/specialist-match-weights.json, overridable by ring-config.n9life.specialistMatch.weights.topN default 8) return with keyed reason codes. Rows persist on n9life_match_requests (owner scoped). GET lists own requests (limit 50). DELETE closes.| Key | Default | Meaning |
|---|---|---|
systemFit | 0.5 | Catalog type fits ready or selected systems |
keywordOverlap | 0.3 | Need-text tokens vs entity tags, services, short description |
locationOrRemote | 0.1 | Remote/online or stated location, weak tie-break |
verifiedOrMembership | 0.1 | Verified listing or active membership, not a ranking of the person |
systemToEntityType examples: numerology → numerologist, astrologer, spiritual_coach; Human Design → human_design_analyst, spiritual_coach.
Reason codes: system_fit, keyword_overlap, location_or_remote, verified_or_membership. The results list links with next-intl { pathname: '/entities/[id]', params: { id } } (a template string /entities/${id} fails the typed Link href).
Match returns no hits until public practitioner entities exist in those types. That is data, not a bug in the scorer.
notifyThreshold 0.75 is in config. L1 createNotification expects CreateNotificationRequest plus a NotificationType. There is no specialist-match type. Member-side results ship without notifying the entity owner.
Need text is the member's request, not the vault. specialist-match.ts must not import aspirations. Signals JSON stored on the request is chart-derived.
/n9/specialists is a clone-only page under app/[locale]/n9/layout.tsx (ModuleShell, LoginGateCta like the vault). It is not an L1 opportunity type and not the AI matcher. There is no LLM.
POST /api/n9life/match (auth() + connection()) runs detectCrisisKeywords. Crisis → 422 crisis_pause with the ethics response. The vault is not read.deriveSignals(profile) builds labeled facts from charts_by_system only: life_path, matrix_center, hall_id, hd_type, hd_authority, ready_systems.findSpecialists loads public entities with db().queryDocs on collection entities, types from NUMEROLOGY_CATEGORY_ENTITY_TYPES .id values (numerologist, human_design_analyst, …), visibility == public. Using Object.keys of that preset would send NUMEROLOGIST and match nothing.features/n9life/specialist-match-weights.json, overridable by ring-config.n9life.specialistMatch.weights.topN default 8) return with keyed reason codes. Rows persist on n9life_match_requests (owner scoped). GET lists own requests (limit 50). DELETE closes.| Key | Default | Meaning |
|---|---|---|
systemFit | 0.5 | Catalog type fits ready or selected systems |
keywordOverlap | 0.3 | Need-text tokens vs entity tags, services, short description |
locationOrRemote | 0.1 | Remote/online or stated location, weak tie-break |
verifiedOrMembership | 0.1 | Verified listing or active membership, not a ranking of the person |
systemToEntityType examples: numerology → numerologist, astrologer, spiritual_coach; Human Design → human_design_analyst, spiritual_coach.
Reason codes: system_fit, keyword_overlap, location_or_remote, verified_or_membership. The results list links with next-intl { pathname: '/entities/[id]', params: { id } } (a template string /entities/${id} fails the typed Link href).
Match returns no hits until public practitioner entities exist in those types. That is data, not a bug in the scorer.
notifyThreshold 0.75 is in config. L1 createNotification expects CreateNotificationRequest plus a NotificationType. There is no specialist-match type. Member-side results ship without notifying the entity owner.
Need text is the member's request, not the vault. specialist-match.ts must not import aspirations. Signals JSON stored on the request is chart-derived.
/n9/specialists is a clone-only page under app/[locale]/n9/layout.tsx (ModuleShell, LoginGateCta like the vault). It is not an L1 opportunity type and not the AI matcher. There is no LLM.
POST /api/n9life/match (auth() + connection()) runs detectCrisisKeywords. Crisis → 422 crisis_pause with the ethics response. The vault is not read.deriveSignals(profile) builds labeled facts from charts_by_system only: life_path, matrix_center, hall_id, hd_type, hd_authority, ready_systems.findSpecialists loads public entities with db().queryDocs on collection entities, types from NUMEROLOGY_CATEGORY_ENTITY_TYPES .id values (numerologist, human_design_analyst, …), visibility == public. Using Object.keys of that preset would send NUMEROLOGIST and match nothing.features/n9life/specialist-match-weights.json, overridable by ring-config.n9life.specialistMatch.weights.topN default 8) return with keyed reason codes. Rows persist on n9life_match_requests (owner scoped). GET lists own requests (limit 50). DELETE closes.| Key | Default | Meaning |
|---|---|---|
systemFit | 0.5 | Catalog type fits ready or selected systems |
keywordOverlap | 0.3 | Need-text tokens vs entity tags, services, short description |
locationOrRemote | 0.1 | Remote/online or stated location, weak tie-break |
verifiedOrMembership | 0.1 | Verified listing or active membership, not a ranking of the person |
systemToEntityType examples: numerology → numerologist, astrologer, spiritual_coach; Human Design → human_design_analyst, spiritual_coach.
Reason codes: system_fit, keyword_overlap, location_or_remote, verified_or_membership. The results list links with next-intl { pathname: '/entities/[id]', params: { id } } (a template string /entities/${id} fails the typed Link href).
Match returns no hits until public practitioner entities exist in those types. That is data, not a bug in the scorer.
notifyThreshold 0.75 is in config. L1 createNotification expects CreateNotificationRequest plus a NotificationType. There is no specialist-match type. Member-side results ship without notifying the entity owner.
Need text is the member's request, not the vault. specialist-match.ts must not import aspirations. Signals JSON stored on the request is chart-derived.