952 lines
No EOL
25 KiB
Markdown
952 lines
No EOL
25 KiB
Markdown
# Notes System - Behavior Rules
|
|
|
|
This document explains how the Notes system works in tududi from a user behavior perspective. For technical implementation details, see the backend code in `/backend/modules/notes/` and frontend components in `/frontend/components/Notes.tsx`.
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
**Notes** are tududi's flexible capture and reference system - a place to store information, ideas, bookmarks, meeting notes, and any other content that doesn't fit the structured task workflow. Unlike tasks, notes don't have due dates, priorities, or completion states - they're purely informational.
|
|
|
|
**Key characteristics:**
|
|
- Rich text support via Markdown
|
|
- Optional project association
|
|
- Tag-based organization
|
|
- Color customization (10 predefined colors)
|
|
- Focus mode for distraction-free writing
|
|
- Auto-save every 1 second
|
|
- Search across title and content
|
|
|
|
**URL:** `/notes` or `/notes/:uid`
|
|
|
|
---
|
|
|
|
## Core Principles
|
|
|
|
1. **Information, not action**
|
|
- Notes store knowledge, not tasks
|
|
- No due dates, priorities, or status tracking
|
|
- Permanent reference material vs. temporary to-dos
|
|
|
|
2. **Flexible structure**
|
|
- Can be standalone or linked to projects
|
|
- Tag-based categorization
|
|
- Full Markdown formatting support
|
|
|
|
3. **Seamless capture**
|
|
- Auto-save prevents data loss
|
|
- Quick creation from inbox items
|
|
- Inline editing without modals
|
|
|
|
---
|
|
|
|
## Note Structure
|
|
|
|
### Fields
|
|
|
|
| Field | Type | Required | Description |
|
|
|-------|------|----------|-------------|
|
|
| **Title** | String | No | Note heading (untitled if empty) |
|
|
| **Content** | Text | No | Main note body (Markdown supported) |
|
|
| **Project** | Reference | No | Associated project |
|
|
| **Tags** | Array | No | Categorization tags |
|
|
| **Color** | String | No | Background color (visual organization) |
|
|
| **Created At** | Timestamp | Auto | Creation timestamp |
|
|
| **Updated At** | Timestamp | Auto | Last modification timestamp |
|
|
|
|
### Unique Identifier
|
|
|
|
- Each note has a **UID** (unique identifier): `uid` field
|
|
- Used in URLs: `/notes/abc123def456`
|
|
- Immutable - persists through all edits
|
|
|
|
---
|
|
|
|
## Creating Notes
|
|
|
|
### Method 1: Direct Creation
|
|
|
|
**From Notes page:**
|
|
1. Navigate to `/notes`
|
|
2. Click **+ icon** in top right
|
|
3. New note opens in edit mode
|
|
4. Start typing - auto-saves after 1 second
|
|
5. No explicit "Save" required
|
|
|
|
**Keyboard shortcut:**
|
|
- `n` (while on Notes page) - Create new note
|
|
|
|
### Method 2: From Inbox
|
|
|
|
**Convert inbox item to note:**
|
|
1. Capture item in Inbox: `Article link https://example.com +Reading #bookmark`
|
|
2. Click "Note" button or press Ctrl+N (Cmd+N on Mac)
|
|
3. System creates note with:
|
|
- Title: Fetched from URL (or URL itself if fetch fails)
|
|
- Content: Full inbox text
|
|
- Project: Linked from `+Reading`
|
|
- Tags: Extracted from `#bookmark`
|
|
4. Inbox item marked as processed
|
|
|
|
**See:** [Inbox Page documentation](04-inbox-page.md) for details
|
|
|
|
### Method 3: From Project Page
|
|
|
|
**Via project view:**
|
|
1. Open project detail page
|
|
2. Click "Add Note" in notes section
|
|
3. Note pre-linked to current project
|
|
4. Start editing
|
|
|
|
---
|
|
|
|
## Editing Notes
|
|
|
|
### Inline Editing
|
|
|
|
**How it works:**
|
|
1. Click on a note in the list to preview it
|
|
2. Click anywhere on the preview (title or content)
|
|
3. Note switches to edit mode
|
|
4. Changes auto-save every 1 second
|
|
5. Press Escape to save and exit edit mode
|
|
|
|
**Save behavior:**
|
|
- **Auto-save:** Triggers 1 second after you stop typing
|
|
- **Save status indicators:**
|
|
- ✓ Saved (green) - Changes persisted
|
|
- Saving... (blue) - Upload in progress
|
|
- • Unsaved changes (amber) - Save failed or pending
|
|
|
|
**What triggers auto-save:**
|
|
- Typing in title field
|
|
- Typing in content field
|
|
- Changing project
|
|
- Adding/removing tags
|
|
- Changing note color
|
|
|
|
### Title Editing
|
|
|
|
**Rules:**
|
|
- Title is optional - can be blank
|
|
- Blank titles show as "Untitled Note" in UI
|
|
- Auto-save only triggers if title is non-empty
|
|
- Click title in preview mode to enter edit mode
|
|
|
|
### Content Editing
|
|
|
|
**Markdown support:**
|
|
- Full GitHub-flavored Markdown
|
|
- Headings: `# H1`, `## H2`, `### H3`
|
|
- Lists: `- item` or `1. item`
|
|
- Links: `[text](url)`
|
|
- Bold: `**text**`
|
|
- Italic: `_text_`
|
|
- Code: `` `inline` `` or triple backticks for blocks
|
|
- Checkboxes: `- [ ] unchecked` or `- [x] checked`
|
|
|
|
**Preview rendering:**
|
|
- Content renders as formatted Markdown in preview mode
|
|
- Click to edit - shows raw Markdown
|
|
- Live preview updates on save
|
|
|
|
### Multi-line Editing
|
|
|
|
**Textarea behavior:**
|
|
- Content field is a resizable textarea
|
|
- Minimum height: 300px
|
|
- Expands to fill available vertical space
|
|
- Shift+Enter for new lines
|
|
|
|
---
|
|
|
|
## Note Organization
|
|
|
|
### Projects
|
|
|
|
**Linking notes to projects:**
|
|
1. In edit mode, click **project icon** or "Add project"
|
|
2. Dropdown shows all available projects
|
|
3. Select project or choose "No Project" to unlink
|
|
4. Auto-saves immediately
|
|
|
|
**Project behavior:**
|
|
- Notes can belong to 0 or 1 project (not multiple)
|
|
- Changing projects moves the note
|
|
- Deleting a project unlinks all its notes (notes remain)
|
|
- Project appears in note metadata (preview and edit mode)
|
|
|
|
**Permission handling:**
|
|
- Can only link notes to projects you have write access to
|
|
- Shared projects: respects collaboration permissions
|
|
- Attempting to link to restricted project shows error
|
|
|
|
### Tags
|
|
|
|
**Adding tags:**
|
|
1. In edit mode, click **tag icon** or "Add tags"
|
|
2. Tag input field appears
|
|
3. Type tag name and press Enter
|
|
4. Select from existing tags (autocomplete) or create new
|
|
5. Tags save immediately with note
|
|
|
|
**Tag rules:**
|
|
- **Valid characters:** Alphanumeric, hyphens, underscores
|
|
- ✅ `work`, `high-priority`, `q1_2026`
|
|
- ❌ `tag with spaces`, `emoji🎉`, `punctuation!`
|
|
- **Case insensitive:** `Work` = `work` = `WORK`
|
|
- **Auto-create:** New tags created on-the-fly
|
|
- **Multiple tags:** No limit on number per note
|
|
|
|
**Removing tags:**
|
|
- Click **X** on tag chip in tag input
|
|
- Changes save immediately
|
|
|
|
**Tag navigation:**
|
|
- Click tag name in preview mode → Go to tag page
|
|
- Shows all tasks/notes/projects with that tag
|
|
|
|
### Colors
|
|
|
|
**Note color feature:**
|
|
- **Feature flag:** `ENABLE_NOTE_COLOR` (enabled by default)
|
|
- **10 predefined colors:** Red, Orange, Amber, Green, Teal, Blue, Indigo, Purple, Pink, Grey
|
|
- **None option:** Default white/dark background
|
|
|
|
**Setting color:**
|
|
1. Click **⋮ menu** (three vertical dots) in top right
|
|
2. Color palette grid appears
|
|
3. Click desired color swatch
|
|
4. Background changes immediately
|
|
5. Auto-saves
|
|
|
|
**Color behavior:**
|
|
- Applies to entire note background (edit and preview)
|
|
- Text color adjusts automatically (dark text on light colors, light text on dark colors)
|
|
- Persists across sessions
|
|
- Visible in note preview (full panel uses color)
|
|
|
|
**Accessibility:**
|
|
- Luminance calculation ensures readable text contrast
|
|
- Dark colors → White text (#ffffff)
|
|
- Light colors → Dark gray text (#333333)
|
|
|
|
---
|
|
|
|
## Note Views
|
|
|
|
### List View (Left Panel)
|
|
|
|
**Default behavior:**
|
|
- Shows all notes in scrollable list
|
|
- Most recent first (by default)
|
|
- Each item displays:
|
|
- Title (bold, truncated)
|
|
- Content preview (first 100 characters, 2 lines max)
|
|
- Last updated date
|
|
|
|
**Active note indicator:**
|
|
- Blue vertical bar on left edge
|
|
- Highlighted background (white/gray-900)
|
|
- Indicates currently selected note
|
|
|
|
**Empty state:**
|
|
- "No notes found" message
|
|
- Appears when search returns zero results
|
|
- Or when user has no notes
|
|
|
|
### Preview Mode (Right Panel)
|
|
|
|
**When note selected:**
|
|
- Full title at top (large, bold)
|
|
- Metadata row:
|
|
- 🕐 Last updated date
|
|
- 📁 Project (clickable link if assigned)
|
|
- 🏷️ Tags (clickable links)
|
|
- Content rendered as Markdown below
|
|
- Click anywhere to enter edit mode
|
|
|
|
**Click behavior:**
|
|
- Title → Enter edit mode
|
|
- Content → Enter edit mode
|
|
- Project link → Navigate to project page
|
|
- Tag link → Navigate to tag page
|
|
|
|
**Empty state:**
|
|
- "Select a note to preview" message
|
|
- Shows when no note is selected (desktop only)
|
|
|
|
### Edit Mode (Right Panel)
|
|
|
|
**Layout:**
|
|
- Title input at top (large, 2rem font)
|
|
- Metadata controls:
|
|
- 🕐 Last updated or "New"
|
|
- 📁 Project selector
|
|
- 🏷️ Tag manager
|
|
- Save status indicator (✓ Saved / Saving... / • Unsaved)
|
|
- Content textarea (full height)
|
|
- **⋮ menu** (options):
|
|
- Color picker
|
|
- Save button
|
|
- Delete button (if note exists)
|
|
|
|
**Back button (mobile):**
|
|
- ← Back to list
|
|
- Appears only on mobile/tablet views
|
|
- Saves note before returning
|
|
|
|
**Keyboard shortcuts:**
|
|
- `Esc` - Save and exit edit mode (if title exists)
|
|
- `Ctrl/Cmd+S` - Manual save (implicit - auto-save handles this)
|
|
|
|
---
|
|
|
|
## Focus Mode
|
|
|
|
**Purpose:** Distraction-free editing for deep work
|
|
|
|
**Entering focus mode:**
|
|
1. Click **expand icon** (↗️) in top right
|
|
2. Note expands to full screen
|
|
3. Hides sidebar, navigation, and note list
|
|
|
|
**What's visible in focus mode:**
|
|
- Note title (editable)
|
|
- Note content (editable)
|
|
- Minimal toolbar:
|
|
- Close button (top right)
|
|
- Save status
|
|
- Optional: Project and tag buttons (collapsed)
|
|
|
|
**Exiting focus mode:**
|
|
- Click **X** or **close button**
|
|
- Press `Esc` key
|
|
- Returns to standard two-panel view
|
|
|
|
**Auto-save in focus mode:**
|
|
- Same 1-second debounce
|
|
- Save status indicator remains visible
|
|
- Changes persist automatically
|
|
|
|
---
|
|
|
|
## Searching and Filtering
|
|
|
|
### Search
|
|
|
|
**How to search:**
|
|
1. Enter query in search box (top of note list)
|
|
2. Results filter in real-time
|
|
3. Searches both title AND content
|
|
|
|
**Search behavior:**
|
|
- **Case insensitive:** "markdown" matches "Markdown", "MARKDOWN"
|
|
- **Substring matching:** "task" matches "tasks", "multitasking"
|
|
- **Multi-word:** All words must appear (AND logic)
|
|
- **No regex:** Plain text search only
|
|
|
|
**Search scope:**
|
|
- Title field
|
|
- Content field (full text)
|
|
- Does NOT search tags or project names
|
|
|
|
### Sorting
|
|
|
|
**Sort options:**
|
|
1. **Created At** (default) - Newest first
|
|
2. **Title** - Alphabetical A-Z
|
|
3. **Updated** - Most recently modified first
|
|
|
|
**How to sort:**
|
|
- Click **sort icon** (top of note list)
|
|
- Select sort option from dropdown
|
|
- List re-orders immediately
|
|
|
|
**Sort persistence:**
|
|
- Persists during session
|
|
- Resets to "Created At" on page reload
|
|
|
|
### Tag Filtering
|
|
|
|
**Via URL query:**
|
|
- `/notes?tag=bookmark` - Show only notes with #bookmark tag
|
|
- API endpoint: `GET /api/notes?tag=bookmark`
|
|
- Filter by single tag only (not multiple)
|
|
|
|
**No UI filter currently:**
|
|
- Must use URL directly or navigate via tag page
|
|
- Click tag in note preview → Navigates to tag page showing all tagged items
|
|
|
|
---
|
|
|
|
## Deleting Notes
|
|
|
|
### Confirmation Required
|
|
|
|
**Steps:**
|
|
1. Select note or enter edit mode
|
|
2. Click **⋮ menu** (three dots)
|
|
3. Click **Delete** (red text)
|
|
4. Confirmation dialog appears:
|
|
- "Are you sure you want to delete this note?"
|
|
- Shows note title
|
|
5. Confirm or cancel
|
|
|
|
**What gets deleted:**
|
|
- Note record (title, content, metadata)
|
|
- Tag associations (note-tag links)
|
|
- Project association (if any)
|
|
|
|
**What's preserved:**
|
|
- Project (unlinking only)
|
|
- Tags (remain in tag list)
|
|
- No note history (deletion is permanent)
|
|
|
|
**No undo:**
|
|
- Deletion is immediate and irreversible
|
|
- No trash/archive feature
|
|
- Ensure confirmation before proceeding
|
|
|
|
---
|
|
|
|
## Responsive Behavior
|
|
|
|
### Desktop (≥768px)
|
|
|
|
**Two-panel layout:**
|
|
- Left panel: Note list (fixed width: 320px)
|
|
- Right panel: Preview/edit (flexible width)
|
|
- Both panels visible simultaneously
|
|
|
|
**Auto-selection:**
|
|
- First note auto-selected on page load
|
|
- Clicking note updates right panel
|
|
- No "back" navigation needed
|
|
|
|
### Mobile/Tablet (<768px)
|
|
|
|
**Single panel:**
|
|
- Shows note list OR preview/edit (not both)
|
|
- Clicking note → Hides list, shows preview
|
|
- "← Back to list" button → Returns to list
|
|
|
|
**Navigation flow:**
|
|
1. View note list
|
|
2. Tap note → Preview opens (list hidden)
|
|
3. Tap anywhere → Edit mode
|
|
4. Tap "← Back" → Returns to list
|
|
|
|
---
|
|
|
|
## Integration with Other Features
|
|
|
|
### Inbox Integration
|
|
|
|
**Creating notes from inbox:**
|
|
- Inbox items with URLs suggest "Note"
|
|
- Inbox items with `#bookmark` tag suggest "Note"
|
|
- Conversion preserves tags and project references
|
|
- See: [Inbox Page documentation](04-inbox-page.md)
|
|
|
|
**URL title extraction:**
|
|
- System fetches webpage `<title>` tag
|
|
- 3-second timeout
|
|
- Falls back to URL if fetch fails
|
|
- Auto-adds `#bookmark` tag
|
|
|
|
### Project Integration
|
|
|
|
**Notes in project view:**
|
|
- Project detail page shows associated notes
|
|
- "Add Note" button creates pre-linked note
|
|
- Notes count appears in project card
|
|
- Deleting project unlinks notes (notes remain)
|
|
|
|
**Shared project notes:**
|
|
- Respects collaboration permissions
|
|
- Read-only access: Can view notes, cannot edit
|
|
- Read-write access: Can create/edit/delete notes
|
|
- Admin access: Full control
|
|
|
|
### Tag Integration
|
|
|
|
**Tag page shows notes:**
|
|
- `/tag/:uid` lists all tasks, notes, projects with tag
|
|
- Notes appear in dedicated "Notes" section
|
|
- Clicking note → Opens in Notes page
|
|
|
|
**Tag management:**
|
|
- Tags created via notes appear in tag list
|
|
- Deleting tag removes from all notes
|
|
- Renaming tag (if supported) updates all notes
|
|
|
|
---
|
|
|
|
## Auto-Save Behavior
|
|
|
|
### Debounced Save
|
|
|
|
**How it works:**
|
|
1. User types in title or content
|
|
2. Save status changes to "• Unsaved changes"
|
|
3. After 1 second of inactivity, triggers save
|
|
4. Status changes to "Saving..."
|
|
5. On success: "✓ Saved"
|
|
6. On failure: "• Unsaved changes" (stays amber)
|
|
|
|
**Debounce settings:**
|
|
- **Delay:** 1000ms (1 second)
|
|
- **Trailing:** Yes (saves after typing stops)
|
|
- **Leading:** No (doesn't save on first keystroke)
|
|
|
|
### What Triggers Save
|
|
|
|
**Auto-save triggers:**
|
|
- Title field changes
|
|
- Content field changes
|
|
- Project selection changes
|
|
- Tag additions/removals
|
|
- Color changes
|
|
|
|
**No save triggers:**
|
|
- Focusing input fields
|
|
- Scrolling
|
|
- Opening dropdowns
|
|
- Viewing preview mode
|
|
|
|
### Save Guarantees
|
|
|
|
**When navigation occurs:**
|
|
- Leaving Notes page → Pending saves complete first
|
|
- Selecting different note → Current note saves first
|
|
- Mobile "Back" button → Saves before hiding panel
|
|
|
|
**Error handling:**
|
|
- Network failure → Status shows "• Unsaved changes"
|
|
- No automatic retry (user must trigger re-save by editing)
|
|
- Console error logged for debugging
|
|
|
|
**Edge case - empty title:**
|
|
- Auto-save only triggers if `title` is non-empty
|
|
- Empty title note → Not saved to server
|
|
- User must enter title to persist note
|
|
|
|
---
|
|
|
|
## Display and Rendering
|
|
|
|
### Markdown Rendering
|
|
|
|
**Supported syntax:**
|
|
- **Headings:** `#`, `##`, `###`, `####`, `#####`, `######`
|
|
- **Bold:** `**text**` or `__text__`
|
|
- **Italic:** `*text*` or `_text_`
|
|
- **Links:** `[text](url)` or `<url>`
|
|
- **Lists:** `- item` (unordered) or `1. item` (ordered)
|
|
- **Checkboxes:** `- [ ] todo` or `- [x] done`
|
|
- **Code:** `` `inline` `` or ` ```language\nblock\n``` `
|
|
- **Blockquotes:** `> quote`
|
|
- **Horizontal rules:** `---` or `***`
|
|
- **Tables:** Pipe-separated cells
|
|
- **Images:** `` (rendered as `<img>`)
|
|
|
|
**Rendering engine:**
|
|
- Uses `MarkdownRenderer` component
|
|
- Safe HTML escaping (prevents XSS)
|
|
- Syntax highlighting for code blocks
|
|
- Opens external links in new tab
|
|
|
|
### Title Display
|
|
|
|
**Preview mode:**
|
|
- Large heading (2rem font size)
|
|
- Medium weight (500)
|
|
- Truncated if very long (responsive)
|
|
- Shows "Untitled Note" if empty
|
|
|
|
**Edit mode:**
|
|
- Full-width input field
|
|
- Same size/weight as preview (2rem/500)
|
|
- Placeholder: "Note title..."
|
|
- Auto-focus on new note creation
|
|
|
|
### Content Display
|
|
|
|
**Preview mode:**
|
|
- Rendered Markdown with styling
|
|
- Text size: 0.875rem (14px) on mobile, 1rem (16px) on desktop
|
|
- Line height: 1.5
|
|
- Scrollable if content exceeds viewport
|
|
|
|
**Edit mode:**
|
|
- Plain textarea (raw Markdown)
|
|
- Minimum height: 300px
|
|
- Expands to fill vertical space
|
|
- Monospace font (not specified, browser default)
|
|
- Placeholder: "Write your note content here... (Markdown supported)"
|
|
|
|
### Color-Aware Text
|
|
|
|
**Text color adjustment:**
|
|
- Background luminance calculated from hex color
|
|
- Luminance < 0.4 → White text (#ffffff)
|
|
- Luminance ≥ 0.4 → Dark gray text (#333333)
|
|
- Applies to title, content, and metadata text
|
|
|
|
**Formula:**
|
|
```
|
|
luminance = (0.299 * R + 0.587 * G + 0.114 * B) / 255
|
|
```
|
|
|
|
---
|
|
|
|
## Keyboard Shortcuts
|
|
|
|
### Global (anywhere in app)
|
|
|
|
| Shortcut | Action |
|
|
|----------|--------|
|
|
| `g` then `n` | Go to Notes page |
|
|
|
|
### On Notes page
|
|
|
|
| Shortcut | Action |
|
|
|----------|--------|
|
|
| `n` | Create new note |
|
|
| Click note | Open in preview mode |
|
|
|
|
### In edit mode
|
|
|
|
| Shortcut | Action |
|
|
|----------|--------|
|
|
| `Esc` | Save and exit edit mode (if title exists) |
|
|
| `Tab` | Navigate between fields |
|
|
|
|
### In focus mode
|
|
|
|
| Shortcut | Action |
|
|
|----------|--------|
|
|
| `Esc` | Exit focus mode |
|
|
| Click X | Close focus mode |
|
|
|
|
---
|
|
|
|
## Common Workflows
|
|
|
|
### Workflow 1: Quick Note Capture
|
|
|
|
**Scenario:** Capture a fleeting idea
|
|
|
|
1. Press `g` then `n` to open Notes page
|
|
2. Click **+** to create new note
|
|
3. Type title: "Product idea - Voice control"
|
|
4. Write content:
|
|
```markdown
|
|
## Overview
|
|
Users want hands-free interaction
|
|
|
|
## Features
|
|
- Voice commands for task creation
|
|
- Smart parsing of natural language
|
|
- Integration with existing task flow
|
|
```
|
|
5. Auto-saves after 1 second
|
|
6. Add tags: `#product`, `#ideas`
|
|
7. Link to project: "Product Roadmap"
|
|
8. Press Esc to exit edit mode
|
|
|
|
### Workflow 2: Meeting Notes
|
|
|
|
**Scenario:** Documenting a client meeting
|
|
|
|
1. Navigate to `/notes`
|
|
2. Create new note
|
|
3. Title: "Client Meeting - Acme Corp - 2026-03-14"
|
|
4. Content:
|
|
```markdown
|
|
## Attendees
|
|
- John (Acme Corp CEO)
|
|
- Sarah (Product Manager)
|
|
- Me
|
|
|
|
## Discussion
|
|
- Requested new reporting dashboard
|
|
- Timeline: Q2 2026
|
|
- Budget: $50k
|
|
|
|
## Action Items
|
|
- [ ] Send proposal by Monday
|
|
- [ ] Schedule follow-up call
|
|
- [ ] Share mockups
|
|
```
|
|
5. Link to project: "Acme Corp"
|
|
6. Add tags: `#meetings`, `#clients`, `#acme`
|
|
7. Auto-saves throughout
|
|
8. Click "Focus mode" for distraction-free review
|
|
|
|
### Workflow 3: Bookmark Collection
|
|
|
|
**Scenario:** Save an article to read later
|
|
|
|
1. From Inbox: `https://example.com/article +Reading #bookmark`
|
|
2. Press `Ctrl+N` (or `Cmd+N`)
|
|
3. System:
|
|
- Fetches title: "10 Tips for Better Focus"
|
|
- Creates note with URL as content
|
|
- Links to "Reading" project
|
|
- Adds `#bookmark` tag
|
|
4. Note auto-saved and opens in edit mode
|
|
5. Add notes below URL:
|
|
```markdown
|
|
https://example.com/article
|
|
|
|
## Key Takeaways
|
|
- Pomodoro technique
|
|
- Single-tasking
|
|
- Environment matters
|
|
```
|
|
6. Press Esc to save and exit
|
|
|
|
### Workflow 4: Knowledge Base
|
|
|
|
**Scenario:** Building a personal wiki
|
|
|
|
1. Create note: "Git Cheatsheet"
|
|
2. Content:
|
|
```markdown
|
|
## Common Commands
|
|
|
|
### Branching
|
|
- `git branch <name>` - Create branch
|
|
- `git checkout <name>` - Switch branch
|
|
- `git checkout -b <name>` - Create and switch
|
|
|
|
### Committing
|
|
- `git add .` - Stage all changes
|
|
- `git commit -m "message"` - Commit with message
|
|
- `git commit --amend` - Amend last commit
|
|
|
|
### Remote
|
|
- `git push origin <branch>` - Push to remote
|
|
- `git pull` - Fetch and merge
|
|
```
|
|
3. Add tags: `#reference`, `#git`, `#dev`
|
|
4. Link to project: "Developer Resources"
|
|
5. Set color: Blue (for tech references)
|
|
6. Bookmark `/notes/:uid` for quick access
|
|
|
|
### Workflow 5: Weekly Review
|
|
|
|
**Scenario:** Process and organize accumulated notes
|
|
|
|
1. Navigate to `/notes`
|
|
2. Sort by "Updated" to see recent notes
|
|
3. Search for "meeting" to find unprocessed meeting notes
|
|
4. For each note:
|
|
- Review content
|
|
- Extract action items → Convert to tasks
|
|
- Add relevant tags
|
|
- Link to appropriate projects
|
|
- Archive or delete if no longer needed
|
|
5. Search for untagged notes (manual review)
|
|
6. Ensure all bookmarks are properly categorized
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### "Auto-save not working"
|
|
|
|
**Possible causes:**
|
|
1. Title is empty → Auto-save only triggers with non-empty title
|
|
2. Network error → Check browser console for errors
|
|
3. Session expired → Re-authenticate
|
|
4. Debounce hasn't elapsed → Wait 1 second after typing
|
|
|
|
**Solution:**
|
|
- Add a title (at minimum)
|
|
- Check network connection
|
|
- Refresh page and re-login if needed
|
|
- Observe save status indicator
|
|
|
|
### "Note disappeared after creating"
|
|
|
|
**Likely cause:** Empty title + navigated away
|
|
|
|
**What happened:**
|
|
- Created note without title
|
|
- Auto-save didn't trigger (requires title)
|
|
- Navigated away → Note not persisted
|
|
|
|
**Prevention:**
|
|
- Always add a title before leaving edit mode
|
|
- Check for "✓ Saved" status before navigating
|
|
|
|
### "Markdown not rendering"
|
|
|
|
**Check:**
|
|
1. Are you in edit mode? (shows raw Markdown)
|
|
2. Switch to preview mode (click note in list or press Esc)
|
|
3. Ensure Markdown syntax is correct
|
|
- ❌ `#Heading` (no space)
|
|
- ✅ `# Heading` (space required)
|
|
|
|
### "Can't link note to project"
|
|
|
|
**Possible causes:**
|
|
1. Project doesn't exist → Create project first
|
|
2. No write access to project → Check collaboration permissions
|
|
3. Project is archived → Unarchive or choose different project
|
|
|
|
**Solution:**
|
|
- Verify project exists in project list
|
|
- Check permissions with project owner
|
|
- Select different project
|
|
|
|
### "Tags not saving"
|
|
|
|
**Check:**
|
|
1. Tag name has invalid characters?
|
|
- Use only alphanumeric, hyphens, underscores
|
|
2. Network error during save?
|
|
- Check browser console
|
|
3. Tag input didn't close properly?
|
|
- Click outside tag input to trigger save
|
|
|
|
### "Color not appearing"
|
|
|
|
**Check:**
|
|
1. Is `ENABLE_NOTE_COLOR` feature flag enabled?
|
|
- Check with admin/developer
|
|
2. Browser caching issue?
|
|
- Hard refresh: `Ctrl+Shift+R` or `Cmd+Shift+R`
|
|
3. Dark mode conflict?
|
|
- Try switching theme
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
### Organization
|
|
|
|
1. **Use consistent tagging:**
|
|
- Create a tag hierarchy: `#project-ideas`, `#project-specs`, `#project-retros`
|
|
- Avoid tag proliferation: Reuse existing tags
|
|
|
|
2. **Link notes to projects:**
|
|
- Project-specific notes → Link to project
|
|
- General knowledge → Leave unlinked or create "Resources" project
|
|
|
|
3. **Color coding:**
|
|
- Develop personal system: Red = urgent, Blue = reference, Green = ideas
|
|
- Or by topic: Purple = client work, Teal = personal
|
|
|
|
### Content
|
|
|
|
1. **Use Markdown effectively:**
|
|
- Headings for structure
|
|
- Lists for clarity
|
|
- Checkboxes for tracking follow-ups within notes
|
|
- Code blocks for technical snippets
|
|
|
|
2. **Include metadata:**
|
|
- Date in title for meeting notes: "Meeting - Client - 2026-03-14"
|
|
- Context in content: "Source: [Article](url)"
|
|
|
|
3. **Break up long notes:**
|
|
- Split into multiple notes by subtopic
|
|
- Link between notes using markdown links
|
|
- Use tags to group related notes
|
|
|
|
### Maintenance
|
|
|
|
1. **Regular review:**
|
|
- Weekly: Process new notes, add tags, link to projects
|
|
- Monthly: Archive or delete obsolete notes
|
|
- Quarterly: Reorganize tag system
|
|
|
|
2. **Search before creating:**
|
|
- Check if similar note exists
|
|
- Consolidate duplicates
|
|
|
|
3. **Bookmark frequently accessed:**
|
|
- Copy note URL: `/notes/:uid`
|
|
- Save in browser bookmarks for quick access
|
|
|
|
---
|
|
|
|
## Limitations and Constraints
|
|
|
|
### Current Limitations
|
|
|
|
1. **No note history/versions:**
|
|
- Edits overwrite previous content
|
|
- No undo beyond current session
|
|
- Workaround: Use external version control for critical notes
|
|
|
|
2. **Single project per note:**
|
|
- Cannot link note to multiple projects
|
|
- Workaround: Duplicate note or use tags for cross-referencing
|
|
|
|
3. **No hierarchical notes:**
|
|
- Flat structure only (no sub-notes)
|
|
- Workaround: Use Markdown headings and lists
|
|
|
|
4. **No collaborative editing:**
|
|
- Only one user can edit at a time
|
|
- No conflict resolution
|
|
- Last save wins (potential data loss)
|
|
|
|
5. **No attachments:**
|
|
- Cannot upload files/images to notes
|
|
- Workaround: Host elsewhere, link via Markdown
|
|
|
|
6. **Limited rich text:**
|
|
- Markdown only (no WYSIWYG editor)
|
|
- No inline images (must use external URLs)
|
|
- No tables with complex formatting
|
|
|
|
### Technical Constraints
|
|
|
|
1. **Search limitations:**
|
|
- No fuzzy matching
|
|
- No search within tags/projects
|
|
- No advanced operators (AND, OR, NOT)
|
|
|
|
2. **Performance:**
|
|
- All notes loaded at once (no pagination)
|
|
- Slow with 1000+ notes
|
|
- No virtualized scrolling
|
|
|
|
3. **Mobile experience:**
|
|
- Single-panel only (no split view)
|
|
- Harder to reference multiple notes
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [Inbox Page](04-inbox-page.md) - Quick capture and conversion to notes
|
|
- [Today Page Sections](02-today-page-sections.md) - Task-focused workflow
|
|
- [Architecture Overview](architecture.md) - Technical architecture
|
|
- [Development Workflow](development-workflow.md) - Working with the codebase
|
|
- [Common Tasks](common-tasks.md) - How to modify notes functionality
|
|
|
|
**Technical Implementation Files:**
|
|
- Note model: `/backend/models/note.js`
|
|
- Note service: `/backend/modules/notes/service.js`
|
|
- Note controller: `/backend/modules/notes/controller.js`
|
|
- Note repository: `/backend/modules/notes/repository.js`
|
|
- Note API routes: `/backend/modules/notes/routes.js`
|
|
- Notes component: `/frontend/components/Notes.tsx`
|
|
- Note modal: `/frontend/components/Note/NoteModal.tsx`
|
|
- Note focus mode: `/frontend/components/Note/NoteFocusMode.tsx`
|
|
- Markdown renderer: `/frontend/components/Shared/MarkdownRenderer.tsx`
|
|
- Note service (frontend): `/frontend/utils/notesService.ts`
|
|
|
|
---
|
|
|
|
**Document Version:** 1.0.0
|
|
**Last Updated:** 2026-03-14
|
|
**Audience:** Developers, AI assistants, and end users |