-
Notifications
You must be signed in to change notification settings - Fork 0
screens
All screens, navigation hierarchy, and deep link paths. See Architecture for context.
AppNavigator (Native Stack Navigator)
│
├── OnboardingScreen # First-run onboarding flow
├── MainTabs (TabNavigator) # Bottom tab navigator (5 tabs)
│ ├── HomeTab → HomeScreen
│ ├── NotesTab → NotesListScreen
│ ├── ExploreTab → ExploreScreen
│ ├── TodosTab → TodoListScreen
│ ├── SettingsTab → SettingsScreen
│ └── CanvasList → CanvasListScreen (hidden tab)
│
├── NoteEditorScreen # Stack screen — note/:noteId
├── CanvasEditorScreen # Stack screen — canvas/:canvasId
├── ChatThreadListScreen # Stack screen — chat
├── ChatScreen # Stack screen — chat/:threadId
├── SyncStatusScreen # Stack screen
├── AddReminderScreen # Stack screen
├── TemplateManagerScreen # Stack screen
├── RenderStyleSettingsScreen # Stack screen
├── RenderStyleEditorScreen # Stack screen
├── GraphViewScreen # Stack screen
├── PaywallScreen # Stack screen (interstitial or direct)
├── ThoughtDumpScreen # Stack screen — thought-dump
├── ImageViewerScreen # Stack screen
├── FileViewerScreen # Stack screen
├── PdfViewerScreen # Stack screen
├── VideoViewerScreen # Stack screen
├── ExploreCommitScreen # Stack screen
├── ExploreDiffScreen # Stack screen
├── ExploreFileScreen # Stack screen
├── ExploreRepoInfoScreen # Stack screen
├── ExploreIssuesScreen # Stack screen
├── ExplorePullRequestsScreen # Stack screen
└── NeumorphicGallery # __dev__/neumorphic (dev only)
GitNotēs uses the custom scheme gitnotes:// for deep links.
| Route | URL Pattern | Example |
|---|---|---|
| Note | gitnotes://note/:noteId |
gitnotes://note/1699876543-abc123 |
| Canvas | gitnotes://canvas/:canvasId |
gitnotes://canvas/1699876543-def456 |
| Chat thread list | gitnotes://chat |
gitnotes://chat |
| Chat thread | gitnotes://chat/:threadId |
gitnotes://chat/1699876543-ghi789 |
| Home | gitnotes://home |
gitnotes://home |
| Notes list | gitnotes://notes |
gitnotes://notes |
| Explore | gitnotes://explore |
gitnotes://explore |
| Settings | gitnotes://settings |
gitnotes://settings |
| Thought dump | gitnotes://thought-dump |
gitnotes://thought-dump |
Note: Tab bar screens (Home, Notes, Explore, Todos, Settings) ARE reachable via
gitnotes://home,gitnotes://notes, etc. Universal links (https://gitnotes.app/...) require associated domains entitlement configuration — see Architecture.
The canonical route param types are in src/navigation/types.ts:
| Screen | Route Param Type |
|---|---|
NoteEditor |
{ noteId?, format?, initialTitle?, initialContent?, initialTags?, repo?, branch?, folderPath?, anchor? } |
CanvasEditor |
{ canvasId?, canvasWidth?, canvasHeight?, canvasTitle? } |
ChatScreen |
{ threadId: string } |
ThoughtDump |
{ openVoiceOnMount? } |
Explore |
{ repoId? } |
ExploreDiff |
{ repoId: string; path: string } |
ExploreCommit |
{ repoId: string; commitId: string } |
ExploreFile |
{ repoId: string; path: string } |
ConflictResolve |
{ repoId: string; path: string } (in types, no screen component — navigation target only)
|
PdfViewer |
{ owner: string; repo: string; branch?; path: string; title? } |
Purpose: Dashboard with quick access to recent notes, daily quote, and sync status.
Key components:
-
BentoRecent— bento-grid layout of recent notes -
DailyQuoteCard— philosopher quote fromDailyQuoteService -
QuickAccessShelf— pinned/favorite notes -
FloatingGitButton— floating sync button
Purpose: Browse and search all notes in the selected repo/folder.
Key components:
-
NoteCard— note preview card with title, excerpt, tags, color -
NotesFilterModal— filter by folder, tag, color, date -
NotesViewModePicker— list vs grid view toggle -
ActiveFilterStrip— shows active filters -
BulkActionBar— bulk delete, move, tag operations
Navigation: Tapping a note → NoteEditorScreen. Long-press → context menu.
Purpose: Full note editing with toolbar, tag input, and AI assist.
Key components:
-
NoteEditorForm— main editor (Markdown input) -
EditorToolbar— formatting toolbar (bold, italic, heading, list, code) -
EditorHeader— title input, folder breadcrumb -
MarkdownBody— rendered Markdown preview pane -
TagInput— tag editor -
BacklinksSection— notes that link to this note -
FloatingAIButton— AI assist trigger
States: Editing, Preview, Split (edit + preview side-by-side)
Purpose: Browse, filter, and manage todos.
Key components:
-
TodoCard— todo with checkbox, title, due date, tags -
TodoEditorModal— create/edit todo -
TodosListHeader— filter tabs (All, Today, Upcoming, Overdue)
Purpose: Browse all canvas documents.
Key components:
-
CanvasThumbnail— grid thumbnail of canvas -
CanvasPreview— preview on tap -
CanvasPickerModal— embed canvas picker in note editor
Navigation: Tapping → CanvasEditorScreen
Purpose: Infinite canvas with tile-based layout, drawing, and AI vision.
Key components:
- Sparse tile canvas (handled by native Skia/canvas layer)
-
AtlasComposer— tile composition -
HotspotGrid— tappable regions - AI vision toolbar (OCR, object detection)
Purpose: AI chat with context from the current note or repo.
Key components:
-
ChatMessageBubble— user and AI message bubbles -
ChatInputBar— message input with send button -
FloatingAIHubMenu— AI provider picker -
ContextPickerModal— pick which note/repo to chat about -
ModelSelector— pick AI model
Purpose: List all AI chat threads.
Key components:
-
ChatThreadCard— thread preview with last message, timestamp -
ChatThreadContextMenu— delete, rename thread
Purpose: Git repository explorer — view commits, diffs, files, branches, and pull requests. Branch-aware: shows the active checked-out branch from activeBranchStore, and all branch operations are routed through GitBranchCoordinator for checkout safety.
Wraps ExploreScreen — gates mutation operations during branch checkout via CheckoutSafetyProvider. Components inside can call useCheckoutSafety() to access checkout state and show blocking overlays.
Git → Branches ownership: The Explore tab (Git UI) is the sole authority for branch operations. The Git tab owns all branch state — no external UI (note editors, sync services, or other tabs) may trigger or control branch switches. Note editing never triggers implicit branch switches.
Branch UI: Only the Explore screen exposes branch selection. No branch selector exists in the note editor or elsewhere. When checking out a remote branch, GitBranchCoordinator fetches the remote ref first and retries checkout locally.
Sections:
-
FilesSection— repo file tree -
ChangesSection— unstaged/staged changes in working tree -
StagingSection— staged files ready to commit -
CommitsSection— recent commit history -
BranchesSection— local and remote branches; checkout viaGitBranchCoordinator -
RemotesSection— configured remotes -
ConflictsSection— unresolved merge conflicts -
PullRequestsSection— open PRs (GitHub only) -
IssuesSection— repo issues (GitHub only) -
RepoInfoSection— repo metadata (name, URL, branch, ahead/behind)
Purpose: View a single commit — message, author, changed files, diff.
Route params: { repoId: string; commitId: string }
Navigation: Tapped from ExploreScreen commit list.
Purpose: View diff between two commits or branch state.
Route params: { repoId: string; path: string } — path is the file path
Navigation: Tapped from ExploreScreen changes list.
Purpose: View and edit a text file from the local working tree. Binary files and LFS pointer files are read-only. Text files are editable as plain text via a multiline editor.
Route params: { repoId: string; path: string }
Save behavior: Save writes raw UTF-8 content directly to the working tree without staging, committing, or pushing. The file appears as an unstaged modification in the Git workspace. User reviews, stages, commits, and pushes from the existing Git workspace.
Navigation: Tapped from ExploreScreen file tree.
Purpose: App settings hub.
Sections:
- Account management (
AccountsContext) - GitHub connection (
GitHubAuthContext) - Theme selection (
ThemeContext) - Sync settings (
ForegroundSyncSettings) - Notification preferences
- Pro/paywall access (
PaywallScreen) - Biometric lock toggle (
BiometricLockContext) - Language (i18n)
Purpose: Detailed sync status — pending changes, last sync time, push/pull controls.
Navigation: From SettingsScreen or floating git button.
Purpose: First-run setup — clone a repo or create a new one.
Flow:
- Welcome + feature intro
- GitHub sign-in (optional)
- Clone existing repo or create new
- Initial sync
- Done →
HomeScreen
Purpose: Pro subscription purchase UI.
Components:
-
PaywallPlanGrid— monthly/yearly/lifetime plan cards -
PaywallFeatureGrid— feature comparison (free vs Pro) - Purchase flow handled by
RevenueCatService - Restore purchases button
Purpose: Note/wiki-link graph visualization.
Purpose: Configure how notes are rendered (Markdown, rich text, plaintext).
Purpose: Create and manage note templates.
Key components:
-
TemplateListItem— template preview -
TemplateEditorModal— create/edit template
Purpose: Rapid capture mode — voice or text input that dumps into a note as stream-of-consciousness.
Flow: User talks/types → captured as draft note → saved to selected repo.
Purpose: Full-screen viewer for attachments.
Supported formats:
- Images: JPEG, PNG, GIF, WebP, HEIC
- Files: generic file preview
- PDF: multi-page PDF renderer
- Video: MP4, MOV (native playback)
Purpose: App lock screen shown when app returns from background.
Trigger: BiometricLockContext — enabled in settings.
- Navigation types — TypeScript type definitions for route params
- Architecture — Context