# thisisankit27/f-tree architecture

> Architecture diagram of the GitHub repository thisisankit27/f-tree, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/thisisankit27/f-tree
- Repository: https://github.com/thisisankit27/f-tree

## Overview

f-tree is an offline family-tree product centered on recording people and relationships, exploring the family visually, and asking how two members are related. The Android app persists the family locally; its graph layer supports kinship answers and chart layouts. Users can also export or merge tree files, share nearby, and compose printable family books. The repository includes a desktop editor and a browser-based viewer. The README documents these capabilities; sampled source is partial, so links between less-visible subsystems are not inferred beyond documented workflows.

Main entry points: [`app/src/main/java/com/vibethroughcode/ftree/data/FamilyRepository.kt`](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/data/FamilyRepository.kt) (Family repository), [`app/src/main/java/com/vibethroughcode/ftree/ui/FTreeApp.kt`](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/FTreeApp.kt) (Compose screens), [`app/src/main/java/com/vibethroughcode/ftree/transfer/TreeExporter.kt`](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/transfer/TreeExporter.kt) (Tree file transfer), [`app/src/main/java/com/vibethroughcode/ftree/ui/tree/TreeViewModel.kt`](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/tree/TreeViewModel.kt) (Family charts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Family experience"]
  node_android["Android app<br/>[MainActivity.kt]"]
  node_screens["Compose screens<br/>[FTreeApp.kt]"]
  node_people["People editing"]
  node_treeview["Family charts<br/>[TreeViewModel.kt]"]
  node_relationview["Relation finder"]
end

subgraph group_domain["Family domain"]
  node_repository["Family repository"]
  node_database[("Local family database<br/>[FTreeDatabase.kt]")]
  node_graph["Family graph<br/>[FamilyGraph.kt]"]
  node_kinship["Kinship answers<br/>[Kinship.kt]"]
  node_layout["Chart layout"]
end

subgraph group_sharing["Import and sharing"]
  node_treefiles["Tree file transfer<br/>[TreeExporter.kt]"]
  node_importreview["Import and merge"]
  node_nearbyui["Nearby sharing UI<br/>[NearbyViewModel.kt]"]
  node_nearby["Nearby transfer"]
end

subgraph group_books["Family books"]
  node_bookui["Book composer UI<br/>[BookViewModel.kt]"]
  node_bookcompose["Book composition<br/>[BookComposer.kt]"]
  node_bookprint["PDF output<br/>[BookPrinter.kt]"]
end

subgraph group_companion["Desktop and browser"]
  node_desktop["Desktop editor<br/>[app.js]"]
  node_viewer["Browser viewer<br/>[main.js]"]
  node_archive["Archive reader<br/>[archive.js]"]
  node_archivegraph["Viewer graph and layout<br/>[model.js]"]
end

node_user(("Family member"))
node_network(("Nearby device"))

node_user -->|"uses"| node_android
node_android -->|"opens"| node_screens
node_screens -->|"edits people"| node_people
node_screens -->|"explores tree"| node_treeview
node_screens -->|"asks relation"| node_relationview
node_people -->|"saves changes"| node_repository
node_treeview -->|"loads family"| node_repository
node_relationview -->|"loads family"| node_repository
node_repository -->|"reads and writes"| node_database
node_repository -->|"builds snapshot"| node_graph
node_relationview -->|"finds relation"| node_kinship
node_treeview -->|"arranges chart"| node_layout
node_graph -->|"provides family links"| node_kinship
node_graph -->|"provides family links"| node_layout
node_user -->|"exports tree"| node_treefiles
node_treefiles -->|"opens for review"| node_importreview
node_importreview -->|"merges family"| node_repository
node_screens -->|"starts sharing"| node_nearbyui
node_nearbyui -->|"controls transfer"| node_nearby
node_nearby -->|"sends or receives"| node_network
node_nearby -->|"transfers tree file"| node_treefiles
node_user -->|"creates book"| node_bookui
node_bookui -->|"composes pages"| node_bookcompose
node_bookcompose -->|"uses family data"| node_repository
node_bookcompose -->|"renders book"| node_bookprint
node_user -->|"uses editor"| node_desktop
node_desktop -->|"draws family"| node_archivegraph
node_desktop -->|"imports and exports"| node_treefiles
node_user -->|"opens tree file"| node_viewer
node_viewer -->|"reads archive"| node_archive
node_viewer -->|"builds and lays out"| node_archivegraph
node_archive -->|"supplies tree data"| node_archivegraph

click node_android "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/MainActivity.kt"
click node_screens "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/FTreeApp.kt"
click node_people "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/person/PersonEditViewModel.kt"
click node_treeview "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/tree/TreeViewModel.kt"
click node_relationview "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/relation/RelationViewModel.kt"
click node_repository "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/data/FamilyRepository.kt"
click node_database "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/data/FTreeDatabase.kt"
click node_graph "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/graph/FamilyGraph.kt"
click node_kinship "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/graph/Kinship.kt"
click node_layout "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/graph/TreeLayoutEngine.kt"
click node_treefiles "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/transfer/TreeExporter.kt"
click node_importreview "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/transfer/TransferViewModel.kt"
click node_nearbyui "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/nearby/NearbyViewModel.kt"
click node_nearby "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/nearby/NearbyRepository.kt"
click node_bookui "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/book/BookViewModel.kt"
click node_bookcompose "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/book/BookComposer.kt"
click node_bookprint "https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/book/BookPrinter.kt"
click node_desktop "https://github.com/thisisankit27/f-tree/blob/main/desktop/renderer/app.js"
click node_viewer "https://github.com/thisisankit27/f-tree/blob/main/site/playground/main.js"
click node_archive "https://github.com/thisisankit27/f-tree/blob/main/site/playground/archive.js"
click node_archivegraph "https://github.com/thisisankit27/f-tree/blob/main/site/playground/model.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_android,node_screens,node_people,node_treeview,node_relationview toneBlue
class node_repository,node_database,node_graph,node_kinship,node_layout toneAmber
class node_treefiles,node_importreview,node_nearbyui,node_nearby toneMint
class node_bookui,node_bookcompose,node_bookprint toneRose
class node_desktop,node_viewer,node_archive,node_archivegraph,node_user,node_network toneIndigo
```

## Components

### Family experience

- [Android app](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/MainActivity.kt): `app/src/main/java/com/vibethroughcode/ftree/MainActivity.kt`
- [Compose screens](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/FTreeApp.kt): `app/src/main/java/com/vibethroughcode/ftree/ui/FTreeApp.kt`
- [People editing](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/person/PersonEditViewModel.kt): `app/src/main/java/com/vibethroughcode/ftree/ui/person/PersonEditViewModel.kt`
- [Family charts](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/tree/TreeViewModel.kt): `app/src/main/java/com/vibethroughcode/ftree/ui/tree/TreeViewModel.kt`
- [Relation finder](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/relation/RelationViewModel.kt): `app/src/main/java/com/vibethroughcode/ftree/ui/relation/RelationViewModel.kt`

### Family domain

- [Family repository](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/data/FamilyRepository.kt): `app/src/main/java/com/vibethroughcode/ftree/data/FamilyRepository.kt`
- [Local family database](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/data/FTreeDatabase.kt): `app/src/main/java/com/vibethroughcode/ftree/data/FTreeDatabase.kt`
- [Family graph](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/graph/FamilyGraph.kt): `app/src/main/java/com/vibethroughcode/ftree/graph/FamilyGraph.kt`
- [Kinship answers](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/graph/Kinship.kt): `app/src/main/java/com/vibethroughcode/ftree/graph/Kinship.kt`
- [Chart layout](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/graph/TreeLayoutEngine.kt): `app/src/main/java/com/vibethroughcode/ftree/graph/TreeLayoutEngine.kt`

### Import and sharing

- [Tree file transfer](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/transfer/TreeExporter.kt): `app/src/main/java/com/vibethroughcode/ftree/transfer/TreeExporter.kt`
- [Import and merge](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/transfer/TransferViewModel.kt): `app/src/main/java/com/vibethroughcode/ftree/ui/transfer/TransferViewModel.kt`
- [Nearby sharing UI](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/nearby/NearbyViewModel.kt): `app/src/main/java/com/vibethroughcode/ftree/ui/nearby/NearbyViewModel.kt`
- [Nearby transfer](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/nearby/NearbyRepository.kt): `app/src/main/java/com/vibethroughcode/ftree/nearby/NearbyRepository.kt`

### Family books

- [Book composer UI](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/ui/book/BookViewModel.kt): `app/src/main/java/com/vibethroughcode/ftree/ui/book/BookViewModel.kt`
- [Book composition](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/book/BookComposer.kt): `app/src/main/java/com/vibethroughcode/ftree/book/BookComposer.kt`
- [PDF output](https://github.com/thisisankit27/f-tree/blob/main/app/src/main/java/com/vibethroughcode/ftree/book/BookPrinter.kt): `app/src/main/java/com/vibethroughcode/ftree/book/BookPrinter.kt`

### Desktop and browser

- [Desktop editor](https://github.com/thisisankit27/f-tree/blob/main/desktop/renderer/app.js): `desktop/renderer/app.js`
- [Browser viewer](https://github.com/thisisankit27/f-tree/blob/main/site/playground/main.js): `site/playground/main.js`
- [Archive reader](https://github.com/thisisankit27/f-tree/blob/main/site/playground/archive.js): `site/playground/archive.js`
- [Viewer graph and layout](https://github.com/thisisankit27/f-tree/blob/main/site/playground/model.js): `site/playground/model.js`

### Other components

- **Family member**
- **Nearby device**

## Connections

- Family member → Android app: uses
- Android app → Compose screens: opens
- Compose screens → People editing: edits people
- Compose screens → Family charts: explores tree
- Compose screens → Relation finder: asks relation
- People editing → Family repository: saves changes
- Family charts → Family repository: loads family
- Relation finder → Family repository: loads family
- Family repository → Local family database: reads and writes
- Family repository → Family graph: builds snapshot
- Relation finder → Kinship answers: finds relation
- Family charts → Chart layout: arranges chart
- Family graph → Kinship answers: provides family links
- Family graph → Chart layout: provides family links
- Family member → Tree file transfer: exports tree
- Tree file transfer → Import and merge: opens for review
- Import and merge → Family repository: merges family
- Compose screens → Nearby sharing UI: starts sharing
- Nearby sharing UI → Nearby transfer: controls transfer
- Nearby transfer → Nearby device: sends or receives
- Nearby transfer → Tree file transfer: transfers tree file
- Family member → Book composer UI: creates book
- Book composer UI → Book composition: composes pages
- Book composition → Family repository: uses family data
- Book composition → PDF output: renders book
- Family member → Desktop editor: uses editor
- Desktop editor → Viewer graph and layout: draws family
- Desktop editor → Tree file transfer: imports and exports
- Family member → Browser viewer: opens tree file
- Browser viewer → Archive reader: reads archive
- Browser viewer → Viewer graph and layout: builds and lays out
- Archive reader → Viewer graph and layout: supplies tree data
