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
/chart is a pack page (ring-presets/evolvement/web/app/[locale]/chart/page.tsx). It renders ChartInputsForm and the labeled system cards. Time and place fields appear only when evolvement.systems includes human_design (showTimePlace={config.systems.includes('human_design')}).
On this clone, saving the form does not write users.data.evolvement. L3 overwrites features/evolvement/services/chart-inputs.ts so reads and writes go to n9life_profiles. birth_date on that table wins once set.
| Field | Stored as | Used by |
|---|---|---|
| Birth date | birth_date (date) | Numerology, Destiny Matrix, chertogi, Personal Day, HD civil date |
| Given, surname, patronymic | text columns / JSON | Anthroponymics layers |
| Full birth name | optional override | Expression / Soul Urge / Personality |
| Common name | optional | Labeled Chaldean layer |
| Birth time | HH:mm or HHmm | Human Design local wall clock |
| Birth place label | text | Display only |
| Latitude, longitude | birth_lat, birth_lng | Human Design + tz-lookup |
| IANA timezone | birth_tz | localBirthToUtc |
| Birth UTC | birth_utc timestamptz | HD Personality instant; snapshot reuse key |
Migration data/migrations/002_n9life_hd_match.sql adds birth_lat, birth_lng, birth_tz, birth_utc. Apply that migration on the n9life database before expecting HD or match tables in production.
Pack default (users.data.evolvement) still exists for other evolvement clones. N9Life saveChartInputs maps the form to upsertN9LifeProfile. If lat and lng are present and tz is empty, server-side tz-lookup(lat, lng) fills birthTz. localBirthToUtc(date, time, tz) uses a two-pass Intl.DateTimeFormat offset probe so historic Soviet offsets in tzdata are respected.
Crisis language on the form is handled by pack CrisisCallout (detectCrisisKeywords, including Ukrainian phrases). That pause is ethics UX. It is not a chart input.
calendarFromProfile / buildTodayForUser recompute date-only engines on every request (numerology, matrix, anthroponymics, chertogi). They do not trust a stale charts_by_system snapshot for those systems.
Human Design is expensive (ephemeris + Design solver). The HD snapshot is reused only when birth_utc, latitude, and longitude are unchanged. If any of those three change, calculateHumanDesign runs again. Missing time, tz, or coordinates keep the placeholder: pending_inputs or pending_tz. status: 'ready' is the only status that shows Type / Strategy / Authority as computed values. The HD page maps ready to t('status.ready'), not pending.
OwnerJsonExportButton can download the member's own JSON. JSDoc on computeCharts forbids diary or aspiration text in that payload.
Pack BirthPlaceFields dynamically imports LocationMapModal with persistProfile={false}, hidden birthLat / birthLng inputs, and a timezone select. The Cosmic Mirror panel uses the same contract through BirthPlacePicker.
Birth place is not "current city". Cultural address on the Ring profile and HD birth coordinates are different writes. The map modal default remains persistProfile={true} for profile-address flows elsewhere in Ring.
/chart is a pack page (ring-presets/evolvement/web/app/[locale]/chart/page.tsx). It renders ChartInputsForm and the labeled system cards. Time and place fields appear only when evolvement.systems includes human_design (showTimePlace={config.systems.includes('human_design')}).
On this clone, saving the form does not write users.data.evolvement. L3 overwrites features/evolvement/services/chart-inputs.ts so reads and writes go to n9life_profiles. birth_date on that table wins once set.
| Field | Stored as | Used by |
|---|---|---|
| Birth date | birth_date (date) | Numerology, Destiny Matrix, chertogi, Personal Day, HD civil date |
| Given, surname, patronymic | text columns / JSON | Anthroponymics layers |
| Full birth name | optional override | Expression / Soul Urge / Personality |
| Common name | optional | Labeled Chaldean layer |
| Birth time | HH:mm or HHmm | Human Design local wall clock |
| Birth place label | text | Display only |
| Latitude, longitude | birth_lat, birth_lng | Human Design + tz-lookup |
| IANA timezone | birth_tz | localBirthToUtc |
| Birth UTC | birth_utc timestamptz | HD Personality instant; snapshot reuse key |
Migration data/migrations/002_n9life_hd_match.sql adds birth_lat, birth_lng, birth_tz, birth_utc. Apply that migration on the n9life database before expecting HD or match tables in production.
Pack default (users.data.evolvement) still exists for other evolvement clones. N9Life saveChartInputs maps the form to upsertN9LifeProfile. If lat and lng are present and tz is empty, server-side tz-lookup(lat, lng) fills birthTz. localBirthToUtc(date, time, tz) uses a two-pass Intl.DateTimeFormat offset probe so historic Soviet offsets in tzdata are respected.
Crisis language on the form is handled by pack CrisisCallout (detectCrisisKeywords, including Ukrainian phrases). That pause is ethics UX. It is not a chart input.
calendarFromProfile / buildTodayForUser recompute date-only engines on every request (numerology, matrix, anthroponymics, chertogi). They do not trust a stale charts_by_system snapshot for those systems.
Human Design is expensive (ephemeris + Design solver). The HD snapshot is reused only when birth_utc, latitude, and longitude are unchanged. If any of those three change, calculateHumanDesign runs again. Missing time, tz, or coordinates keep the placeholder: pending_inputs or pending_tz. status: 'ready' is the only status that shows Type / Strategy / Authority as computed values. The HD page maps ready to t('status.ready'), not pending.
OwnerJsonExportButton can download the member's own JSON. JSDoc on computeCharts forbids diary or aspiration text in that payload.
Pack BirthPlaceFields dynamically imports LocationMapModal with persistProfile={false}, hidden birthLat / birthLng inputs, and a timezone select. The Cosmic Mirror panel uses the same contract through BirthPlacePicker.
Birth place is not "current city". Cultural address on the Ring profile and HD birth coordinates are different writes. The map modal default remains persistProfile={true} for profile-address flows elsewhere in Ring.
/chart is a pack page (ring-presets/evolvement/web/app/[locale]/chart/page.tsx). It renders ChartInputsForm and the labeled system cards. Time and place fields appear only when evolvement.systems includes human_design (showTimePlace={config.systems.includes('human_design')}).
On this clone, saving the form does not write users.data.evolvement. L3 overwrites features/evolvement/services/chart-inputs.ts so reads and writes go to n9life_profiles. birth_date on that table wins once set.
| Field | Stored as | Used by |
|---|---|---|
| Birth date | birth_date (date) | Numerology, Destiny Matrix, chertogi, Personal Day, HD civil date |
| Given, surname, patronymic | text columns / JSON | Anthroponymics layers |
| Full birth name | optional override | Expression / Soul Urge / Personality |
| Common name | optional | Labeled Chaldean layer |
| Birth time | HH:mm or HHmm | Human Design local wall clock |
| Birth place label | text | Display only |
| Latitude, longitude | birth_lat, birth_lng | Human Design + tz-lookup |
| IANA timezone | birth_tz | localBirthToUtc |
| Birth UTC | birth_utc timestamptz | HD Personality instant; snapshot reuse key |
Migration data/migrations/002_n9life_hd_match.sql adds birth_lat, birth_lng, birth_tz, birth_utc. Apply that migration on the n9life database before expecting HD or match tables in production.
Pack default (users.data.evolvement) still exists for other evolvement clones. N9Life saveChartInputs maps the form to upsertN9LifeProfile. If lat and lng are present and tz is empty, server-side tz-lookup(lat, lng) fills birthTz. localBirthToUtc(date, time, tz) uses a two-pass Intl.DateTimeFormat offset probe so historic Soviet offsets in tzdata are respected.
Crisis language on the form is handled by pack CrisisCallout (detectCrisisKeywords, including Ukrainian phrases). That pause is ethics UX. It is not a chart input.
calendarFromProfile / buildTodayForUser recompute date-only engines on every request (numerology, matrix, anthroponymics, chertogi). They do not trust a stale charts_by_system snapshot for those systems.
Human Design is expensive (ephemeris + Design solver). The HD snapshot is reused only when birth_utc, latitude, and longitude are unchanged. If any of those three change, calculateHumanDesign runs again. Missing time, tz, or coordinates keep the placeholder: pending_inputs or pending_tz. status: 'ready' is the only status that shows Type / Strategy / Authority as computed values. The HD page maps ready to t('status.ready'), not pending.
OwnerJsonExportButton can download the member's own JSON. JSDoc on computeCharts forbids diary or aspiration text in that payload.
Pack BirthPlaceFields dynamically imports LocationMapModal with persistProfile={false}, hidden birthLat / birthLng inputs, and a timezone select. The Cosmic Mirror panel uses the same contract through BirthPlacePicker.
Birth place is not "current city". Cultural address on the Ring profile and HD birth coordinates are different writes. The map modal default remains persistProfile={true} for profile-address flows elsewhere in Ring.