Skip to content

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.

FieldTypeRequiredDescription
generationLabelstringYes"G0", "G1", "G2", etc. G0 is the Canadian ancestor.
namestringYesFull name of the person.
citizenshipStatusstringYesOne of: canadian, canadian_by_descent, foreign, or unknown.
birthDatestringNoDate in YYYY-MM-DD format.
birthPlacestringNoFree-text birthplace.
deathDatestringNoDate in YYYY-MM-DD format.
deathPlacestringNoFree-text death place.
marriageDatestringNoDate in YYYY-MM-DD format. Shown on the PDF connector between member and partner.
relationshipstringNoe.g. "Great-Grandfather", "Applicant". Auto-generated if left blank.
notesstringNoFreeform notes. Not shown on the PDF.
partnerobjectNoA nested FamilyMember representing the spouse/partner.
childrenarrayNoArray 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:

ColumnDescription
depthNesting depth (0 for root). Used for ordering.
isPartnertrue or false. Partner rows are excluded from the main chain.
generationLabel"G0", "G1", etc.
nameFull name.
birthDateYYYY-MM-DD format.
birthPlaceFree text.
deathDateYYYY-MM-DD format.
deathPlaceFree text.
marriageDateYYYY-MM-DD format.
citizenshipStatuscanadian, canadian_by_descent, foreign, or unknown.
relationshipe.g. "Applicant", "Grandfather".
notesFreeform 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

KeyAction
EscapeClose 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.