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/vault is the N9Life-endemic Aspirations Safe Vault. It is not a chart, not a council voter, and not a match signal. The page lives under app/[locale]/n9/layout.tsx so it outranks Layer 1 /[username]/[slug]. Metadata uses n9life-home.vault.seo because path n9/vault does not match generic SEO templates. Robots: noindex, nofollow. Unauthenticated visitors get LoginGateCta with callbackUrl=/n9/vault.
Table n9life_aspirations_vault (migration 001_n9life_tables.sql). API GET/POST/DELETE /api/n9life/aspirations is owner-only. SELECT/RETURNING omit user_id. DELETE returns 400 unless id is a UUID. List GET uses ?limit=500. Export refetches that list and downloads owner JSON (admin-matcher pattern, revoke object URL after click).
Client: separate useTransition for load, save, and delete so the first fetch does not label Save as saving. Session 401 renders the login gate. Crisis keywords on save return 422 and keep the textarea (CrisisCallout).
These modules must not import vault or pass diary body:
features/evolvement/services/compute-charts.tslib/evolvement/knowledge-council.ts and council-synthesis.tsfeatures/n9life/services/specialist-match.ts and /api/n9life/matchfeatures/n9life/services/profile.ts chart builders/council and /numerologyCosmic Mirror panel.vaultHint is the in-product reminder: write intentions only you will read. navigation.userMenu.extra vault link reaches signed-in mobile-web avatar. Mini App hides that avatar; the panel CTA remains.
n9life-home.vault.* (EN/UK/RU). Overlay features/n9life/i18n.ts injects navigation.mainNav.vault from vault.navLabel. Do not copy whole navigation.json onto L3.
Client-side vault encryption, Destiny Dating, and Gene Keys are out of scope. Dating seed notes also say: never read n9life_aspirations_vault for dating.
/n9/vault is the N9Life-endemic Aspirations Safe Vault. It is not a chart, not a council voter, and not a match signal. The page lives under app/[locale]/n9/layout.tsx so it outranks Layer 1 /[username]/[slug]. Metadata uses n9life-home.vault.seo because path n9/vault does not match generic SEO templates. Robots: noindex, nofollow. Unauthenticated visitors get LoginGateCta with callbackUrl=/n9/vault.
Table n9life_aspirations_vault (migration 001_n9life_tables.sql). API GET/POST/DELETE /api/n9life/aspirations is owner-only. SELECT/RETURNING omit user_id. DELETE returns 400 unless id is a UUID. List GET uses ?limit=500. Export refetches that list and downloads owner JSON (admin-matcher pattern, revoke object URL after click).
Client: separate useTransition for load, save, and delete so the first fetch does not label Save as saving. Session 401 renders the login gate. Crisis keywords on save return 422 and keep the textarea (CrisisCallout).
These modules must not import vault or pass diary body:
features/evolvement/services/compute-charts.tslib/evolvement/knowledge-council.ts and council-synthesis.tsfeatures/n9life/services/specialist-match.ts and /api/n9life/matchfeatures/n9life/services/profile.ts chart builders/council and /numerologyCosmic Mirror panel.vaultHint is the in-product reminder: write intentions only you will read. navigation.userMenu.extra vault link reaches signed-in mobile-web avatar. Mini App hides that avatar; the panel CTA remains.
n9life-home.vault.* (EN/UK/RU). Overlay features/n9life/i18n.ts injects navigation.mainNav.vault from vault.navLabel. Do not copy whole navigation.json onto L3.
Client-side vault encryption, Destiny Dating, and Gene Keys are out of scope. Dating seed notes also say: never read n9life_aspirations_vault for dating.
/n9/vault is the N9Life-endemic Aspirations Safe Vault. It is not a chart, not a council voter, and not a match signal. The page lives under app/[locale]/n9/layout.tsx so it outranks Layer 1 /[username]/[slug]. Metadata uses n9life-home.vault.seo because path n9/vault does not match generic SEO templates. Robots: noindex, nofollow. Unauthenticated visitors get LoginGateCta with callbackUrl=/n9/vault.
Table n9life_aspirations_vault (migration 001_n9life_tables.sql). API GET/POST/DELETE /api/n9life/aspirations is owner-only. SELECT/RETURNING omit user_id. DELETE returns 400 unless id is a UUID. List GET uses ?limit=500. Export refetches that list and downloads owner JSON (admin-matcher pattern, revoke object URL after click).
Client: separate useTransition for load, save, and delete so the first fetch does not label Save as saving. Session 401 renders the login gate. Crisis keywords on save return 422 and keep the textarea (CrisisCallout).
These modules must not import vault or pass diary body:
features/evolvement/services/compute-charts.tslib/evolvement/knowledge-council.ts and council-synthesis.tsfeatures/n9life/services/specialist-match.ts and /api/n9life/matchfeatures/n9life/services/profile.ts chart builders/council and /numerologyCosmic Mirror panel.vaultHint is the in-product reminder: write intentions only you will read. navigation.userMenu.extra vault link reaches signed-in mobile-web avatar. Mini App hides that avatar; the panel CTA remains.
n9life-home.vault.* (EN/UK/RU). Overlay features/n9life/i18n.ts injects navigation.mainNav.vault from vault.navLabel. Do not copy whole navigation.json onto L3.
Client-side vault encryption, Destiny Dating, and Gene Keys are out of scope. Dating seed notes also say: never read n9life_aspirations_vault for dating.