# sebhernandezamoros/noutynotes architecture

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

- Interactive diagram: https://gitdiagram.com/sebhernandezamoros/noutynotes
- Repository: https://github.com/sebhernandezamoros/noutynotes

## Overview

NoutyNotes is a visual, Markdown-first workspace for arranging notes, images, and relationships on boards, backed by local files or temporary memory and shared across web and Android. The main flow is to create or open a workspace, edit and organize its cards, and save it through the workspace session. The graph includes documented capabilities such as search, archive, diary, assets, presentation, printing, templates, and undo. Some feature links rely on the README because their implementations were not sampled.

Main entry points: [`packages/application/src/workspace-use-cases.ts`](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/workspace-use-cases.ts) (Workspace use cases), [`packages/application/src/workspace-editing.ts`](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/workspace-editing.ts) (Editing and history), [`apps/noutynotes/src/session/WorkspaceSession.tsx`](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/session/WorkspaceSession.tsx) (Workspace session), [`apps/noutynotes/src/home/HomeScreen.tsx`](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/home/HomeScreen.tsx) (Home and templates)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["App experience"]
  node_home["Home and templates<br/>[HomeScreen.tsx]"]
  node_session["Workspace session"]
end

subgraph group_workspace["Workspace interaction"]
  node_canvas["Boards and canvas"]
  node_editor["Workspace editor"]
  node_canvas_ui["Canvas rendering<br/>[Canvas.tsx]"]
  node_search_ui["Search panel<br/>[SearchPanel.tsx]"]
  node_archive_diary["Archive and diary<br/>[ArchiveView.tsx]"]
  node_assets_ui["Assets and settings<br/>[AssetsView.tsx]"]
  node_present_print["Present and print<br/>[PresentView.tsx]"]
end

subgraph group_application["Application logic"]
  node_usecases["Workspace use cases"]
  node_editing["Editing and history"]
  node_search_logic["Search logic<br/>[search.ts]"]
  node_asset_logic["Assets and imports<br/>[assets-library.ts]"]
end

subgraph group_domain["Workspace domain"]
  node_domain_workspace["Workspace validation<br/>[workspace.ts]"]
  node_domain_cards["Cards and types<br/>[card.ts]"]
  node_domain_layout["Grid and layout<br/>[operations.ts]"]
  node_domain_relations["Card relations<br/>[relation.ts]"]
  node_templates["Template validation<br/>[template.ts]"]
end

subgraph group_persistence["Persistence"]
  node_storage_api["Workspace storage"]
  node_folder_storage["Folder storage<br/>[folder-storage.ts]"]
  node_memory_storage["Memory storage<br/>[memory-storage.ts]"]
  node_codec["Workspace codec<br/>[workspace-codec.ts]"]
  node_archive_storage["Archive files<br/>[archive-storage.ts]"]
end

node_person(("Workspace user"))

node_person -->|"opens app"| node_home
node_home -.->|"opens workspace"| node_session
node_session -->|"loads and saves"| node_storage_api
node_canvas -->|"edits workspace"| node_editor
node_editor -->|"uses session"| node_session
node_editor -->|"invokes operations"| node_usecases
node_canvas -->|"renders canvas"| node_canvas_ui
node_search_ui -->|"searches workspace"| node_search_logic
node_archive_diary -->|"manages entries"| node_usecases
node_assets_ui -->|"manages assets"| node_asset_logic
node_present_print -->|"presents or prints"| node_usecases
node_usecases -.->|"delegates edits"| node_editing
node_usecases -.->|"validates workspace"| node_domain_workspace
node_editing -.->|"changes cards"| node_domain_cards
node_editing -.->|"changes layout"| node_domain_layout
node_editing -.->|"changes relations"| node_domain_relations
node_home -.->|"offers templates"| node_templates
node_storage_api -.->|"stores in folder"| node_folder_storage
node_storage_api -.->|"stores in memory"| node_memory_storage
node_folder_storage -->|"encodes files"| node_codec
node_memory_storage -->|"parses workspace"| node_codec
node_session -.->|"manages archive"| node_archive_storage

click node_home "https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/home/HomeScreen.tsx"
click node_session "https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/session/WorkspaceSession.tsx"
click node_canvas "https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/WorkspaceScreen.tsx"
click node_editor "https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/useWorkspaceEditor.ts"
click node_canvas_ui "https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/canvas/Canvas.tsx"
click node_search_ui "https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/SearchPanel.tsx"
click node_archive_diary "https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/ArchiveView.tsx"
click node_assets_ui "https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/AssetsView.tsx"
click node_present_print "https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/PresentView.tsx"
click node_usecases "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/workspace-use-cases.ts"
click node_editing "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/workspace-editing.ts"
click node_search_logic "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/search.ts"
click node_asset_logic "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/assets-library.ts"
click node_domain_workspace "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/workspace/workspace.ts"
click node_domain_cards "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/cards/card.ts"
click node_domain_layout "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/layouts/operations.ts"
click node_domain_relations "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/relations/relation.ts"
click node_templates "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/templates/template.ts"
click node_storage_api "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/workspace-storage.ts"
click node_folder_storage "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/storage/src/folder-storage.ts"
click node_memory_storage "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/storage/src/memory-storage.ts"
click node_codec "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/storage/src/workspace-codec.ts"
click node_archive_storage "https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/storage/src/archive-storage.ts"

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_home,node_session,node_person toneBlue
class node_canvas,node_editor,node_canvas_ui,node_search_ui,node_archive_diary,node_assets_ui,node_present_print toneAmber
class node_usecases,node_editing,node_search_logic,node_asset_logic toneMint
class node_domain_workspace,node_domain_cards,node_domain_layout,node_domain_relations,node_templates toneRose
class node_storage_api,node_folder_storage,node_memory_storage,node_codec,node_archive_storage toneIndigo
```

## Components

### App experience

- [Home and templates](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/home/HomeScreen.tsx): `apps/noutynotes/src/home/HomeScreen.tsx`
- [Workspace session](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/session/WorkspaceSession.tsx): `apps/noutynotes/src/session/WorkspaceSession.tsx`

### Workspace interaction

- [Boards and canvas](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/WorkspaceScreen.tsx): `apps/noutynotes/src/workspace/WorkspaceScreen.tsx`
- [Workspace editor](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/useWorkspaceEditor.ts): `apps/noutynotes/src/workspace/useWorkspaceEditor.ts`
- [Canvas rendering](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/canvas/Canvas.tsx): `apps/noutynotes/src/workspace/canvas/Canvas.tsx`
- [Search panel](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/SearchPanel.tsx): `apps/noutynotes/src/workspace/SearchPanel.tsx`
- [Archive and diary](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/ArchiveView.tsx): `apps/noutynotes/src/workspace/ArchiveView.tsx`
- [Assets and settings](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/AssetsView.tsx): `apps/noutynotes/src/workspace/AssetsView.tsx`
- [Present and print](https://github.com/sebhernandezamoros/noutynotes/blob/main/apps/noutynotes/src/workspace/PresentView.tsx): `apps/noutynotes/src/workspace/PresentView.tsx`

### Application logic

- [Workspace use cases](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/workspace-use-cases.ts): `packages/application/src/workspace-use-cases.ts`
- [Editing and history](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/workspace-editing.ts): `packages/application/src/workspace-editing.ts`
- [Search logic](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/search.ts): `packages/application/src/search.ts`
- [Assets and imports](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/assets-library.ts): `packages/application/src/assets-library.ts`

### Workspace domain

- [Workspace validation](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/workspace/workspace.ts): `packages/domain/src/workspace/workspace.ts`
- [Cards and types](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/cards/card.ts): `packages/domain/src/cards/card.ts`
- [Grid and layout](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/layouts/operations.ts): `packages/domain/src/layouts/operations.ts`
- [Card relations](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/relations/relation.ts): `packages/domain/src/relations/relation.ts`
- [Template validation](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/domain/src/templates/template.ts): `packages/domain/src/templates/template.ts`

### Persistence

- [Workspace storage](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/application/src/workspace-storage.ts): `packages/application/src/workspace-storage.ts`
- [Folder storage](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/storage/src/folder-storage.ts): `packages/storage/src/folder-storage.ts`
- [Memory storage](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/storage/src/memory-storage.ts): `packages/storage/src/memory-storage.ts`
- [Workspace codec](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/storage/src/workspace-codec.ts): `packages/storage/src/workspace-codec.ts`
- [Archive files](https://github.com/sebhernandezamoros/noutynotes/blob/main/packages/storage/src/archive-storage.ts): `packages/storage/src/archive-storage.ts`

### Other components

- **Workspace user**

## Connections

- Workspace user → Home and templates: opens app
- Home and templates → Workspace session: opens workspace
- Workspace session → Workspace storage: loads and saves (evidence: `apps/noutynotes/src/session/WorkspaceSession.tsx`)
- Boards and canvas → Workspace editor: edits workspace
- Workspace editor → Workspace session: uses session (evidence: `apps/noutynotes/src/workspace/useWorkspaceEditor.ts`)
- Workspace editor → Workspace use cases: invokes operations (evidence: `apps/noutynotes/src/workspace/useWorkspaceEditor.ts`)
- Boards and canvas → Canvas rendering: renders canvas
- Search panel → Search logic: searches workspace
- Archive and diary → Workspace use cases: manages entries
- Assets and settings → Assets and imports: manages assets
- Present and print → Workspace use cases: presents or prints
- Workspace use cases → Editing and history: delegates edits
- Workspace use cases → Workspace validation: validates workspace
- Editing and history → Cards and types: changes cards
- Editing and history → Grid and layout: changes layout
- Editing and history → Card relations: changes relations
- Home and templates → Template validation: offers templates
- Workspace storage → Folder storage: stores in folder
- Workspace storage → Memory storage: stores in memory
- Folder storage → Workspace codec: encodes files (evidence: `packages/storage/src/folder-storage.ts`)
- Memory storage → Workspace codec: parses workspace (evidence: `packages/storage/src/memory-storage.ts`)
- Workspace session → Archive files: manages archive
