Documentation
Technical reference for power users. Covers import/export file formats, keyboard shortcuts, session behavior, and the data model used by the tree builder.
Data Model
Each person in the tree is a FamilyMember node. The tree is a recursive structure: each member can have one partner and any number of children.
| Field | Type | Required | Description |
|---|---|---|---|
| generationLabel | string | Yes | "G0", "G1", "G2", etc. G0 is the Canadian ancestor. |
| name | string | Yes | Full name of the person. |
| citizenshipStatus | string | Yes | One of: canadian, canadian_by_descent, foreign, or unknown. |
| birthDate | string | No | Date in YYYY-MM-DD format. |
| birthPlace | string | No | Free-text birthplace. |
| deathDate | string | No | Date in YYYY-MM-DD format. |
| deathPlace | string | No | Free-text death place. |
| marriageDate | string | No | Date in YYYY-MM-DD format. Shown on the PDF connector between member and partner. |
| relationship | string | No | e.g. "Great-Grandfather", "Applicant". Auto-generated if left blank. |
| notes | string | No | Freeform notes. Not shown on the PDF. |
| partner | object | No | A nested FamilyMember representing the spouse/partner. |
| children | array | No | Array of nested FamilyMember objects. |
JSON Format
The JSON export is a recursive tree. Each member may contain a partner object and a children array. IDs are stripped on export and regenerated on import, so you don't need to manage them.
{
"generationLabel": "G0",
"name": "Jean Tremblay",
"birthDate": "1920-03-15",
"birthPlace": "Quebec City, QC",
"citizenshipStatus": "canadian",
"relationship": "Great-Grandfather",
"partner": {
"generationLabel": "G0",
"name": "Marie Gagnon",
"birthDate": "1922-07-01",
"birthPlace": "Quebec City, QC",
"citizenshipStatus": "canadian",
"marriageDate": "1945-06-20"
},
"children": [
{
"generationLabel": "G1",
"name": "Pierre Tremblay",
"birthDate": "1948-11-02",
"birthPlace": "Detroit, MI",
"citizenshipStatus": "canadian_by_descent",
"children": [
{
"generationLabel": "G2",
"name": "Sarah Tremblay",
"birthDate": "1975-04-10",
"birthPlace": "Chicago, IL",
"citizenshipStatus": "canadian_by_descent",
"relationship": "Applicant"
}
]
}
]
}A flat JSON array is also accepted on import. Each element becomes a generation chained linearly (G0 → G1 → G2 → ...).
CSV Format
CSV files must include a header row. The following columns are recognized:
| Column | Description |
|---|---|
| depth | Nesting depth (0 for root). Used for ordering. |
| isPartner | true or false. Partner rows are excluded from the main chain. |
| generationLabel | "G0", "G1", etc. |
| name | Full name. |
| birthDate | YYYY-MM-DD format. |
| birthPlace | Free text. |
| deathDate | YYYY-MM-DD format. |
| deathPlace | Free text. |
| marriageDate | YYYY-MM-DD format. |
| citizenshipStatus | canadian, canadian_by_descent, foreign, or unknown. |
| relationship | e.g. "Applicant", "Grandfather". |
| notes | Freeform notes. |
CSV import builds a linear chain (G0 → G1 → G2). It cannot represent branching trees with multiple children per generation. For complex trees, use JSON.
Keyboard Shortcuts
| Key | Action |
|---|---|
| Escape | Close the editor panel. |
Sessions & Storage
- Your tree is stored server-side, encrypted at rest (AES-256-GCM), and tied to a session cookie in your browser.
- Sessions last 48 hours from your last activity. Every time you view or edit the tree, the timer resets.
- There are no accounts. If you clear your cookies or switch browsers, your session is lost. Use Export JSON to back up your work.
- The Delete My Data button in the builder permanently deletes your tree from the server and clears the session cookie.
- Share links expire when the underlying session expires (up to 48 hours). They are read-only and do not extend the session timer.
Auto-Save Behavior
The tree saves automatically roughly one second after your last edit. The builder bar shows the current save state:
- Yellow (mobile dot) / "Unsaved changes" (desktop) — edits pending.
- Blue (mobile dot) / "Saving..." (desktop) — sync in progress.
- Green (mobile dot) / "Saved" with timestamp (desktop) — all changes saved.
PDF Output
The generated PDF is designed to supplement Section 9 (Family Information) of the CIT 0001 application form. It is not an official government form and is not required.
- The PDF renders entirely in the browser. No data is sent to any server for PDF generation.
- Long chains automatically split across multiple pages with continuation indicators.
- Partner/spouse connections are shown with T-connectors and marriage dates.
- Citizenship status is color-coded: red for Canadian, blue for Canadian by descent, gray for foreign/unknown.