- architecture.md: add Event model, services/events.py, routes/events.py, CalendarView.vue, EventSlideOver.vue; update Conversation and Project data model tables with new columns; update RAG Pipeline section with three-value scope system, search_projects/set_rag_scope tools, and project summary background job; fix dead-code note for models/event.py; update execute_tool() signature docs; add services/projects.py entry - features.md: replace CalDAV section with full Calendar section covering internal store, AI tools, HomeView widget, and optional CalDAV sync; update AI Chat scope chip description; remove done "Calendar view" item from roadmap Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
9.5 KiB
Features
Notes
Write in Markdown with a live-preview editor (Tiptap/ProseMirror). Headings, bold, italic, lists, code blocks, and task checklists render inline. A slash-command menu (/) inserts common blocks.
Wikilinks — Link notes with [[Title]] or [[Title|Display Text]] syntax. Clicking a wikilink navigates to (or auto-creates) the referenced note. The editor suggests existing note titles as candidate links while typing [[. Backlinks appear in the note viewer sidebar.
Tags — First-class ARRAY[text] column. Tag autocomplete in the editor sidebar suggests existing tags. Hierarchical tags (project/webapp) supported — filtering by project matches all project/* children. Tags are browsable via the knowledge graph.
Version history — Every body edit snapshots a version (up to 20 per note). Browse and restore from the editor's History panel. Diff view shows changes against the current body.
AI writing assist — Select a passage or work on the full document. Give an instruction ("make this more concise", "add examples"). The assistant streams a proposal; a diff view shows changes to accept or reject. Drafts persist across page loads.
Link suggestions — The editor detects note titles appearing as plain text in the body and suggests converting them to wikilinks.
Tasks
Tasks carry status (todo → in_progress → done), priority (none/low/medium/high), due date, milestone assignment, and a parent task (sub-tasks).
Task work logs — Append progress log entries to a task with optional duration. Time tracking is visible in the task editor sidebar.
Sub-tasks — Any task can have child tasks via parent_id. The task viewer shows sub-tasks inline.
Convert freely — Convert a note to a task (sets status=todo) or a task back to a note from the viewer toolbar.
Projects and Milestones
Projects — Group related notes and tasks. Each project has a title, description, goal, status (active/completed/archived), and a colour.
Milestones — Ordered stages within a project. Tasks are assigned to milestones. Milestone completion percentage shown on the project page.
Kanban view — /projects/:id groups tasks by milestone in a kanban-style column layout with status-advance buttons directly on cards (→ advance, ✓ complete).
Project Workspace — /workspace/:projectId opens a three-panel environment (tasks / chat / notes) locked to a project. The AI assistant creates and updates content directly in the workspace; new notes auto-load in the editor and the task list refreshes automatically after tool calls.
Knowledge Graph
/graph renders all notes, tasks, and tags as a D3 force-directed graph. Tag nodes cluster notes that share tags; invisible project hub nodes attract project members. Physics controls: repulsion, link distance, link strength, hub pull, gravity. Click any node to open a slide-in peek panel. Click a tag node to filter the notes list.
AI Chat
Full conversation history with SSE streaming. Features:
- RAG — Semantically relevant notes (≥ 0.60 cosine similarity) auto-injected as context. Notes 0.45–0.60 shown in sidebar as "Suggested."
- Attach notes — Paperclip icon to include specific notes in context.
- RAG scope chip — Pill above the input bar shows the current note scope. Click to switch: "Orphan notes only" (default — project notes stay out of general chat), any active project, or "All notes." Scope is persisted per conversation. The AI can also call
search_projectsandset_rag_scopemid-conversation to switch scope automatically; the chip pulses when this happens. - Tool calls — The assistant can create/update notes, tasks, projects, milestones, search the web, check weather, read RSS, query calendar events, and more. Tool calls display inline with confirm/deny for creates.
- Thinking mode — Toggle extended reasoning for complex questions.
- Abort — Stop button cancels in-flight generation.
- Message queue — Messages sent while generation is in progress are queued and drained sequentially.
- Save to note — Save any assistant reply directly as a note.
- Bulk delete — Select and delete multiple conversations.
- Retention — Conversations auto-pruned after configurable days (default 90).
Daily Briefing
/briefing is a scheduled, dialogue-based morning briefing. The assistant compiles tasks, calendar events, projects, weather forecast, and RSS digest at configurable times, then checks in throughout the day. You can reply interactively.
Schedule — Configurable slots: morning (default 4am compile), midday (8am check-in), evening (12pm check-in), night (4pm). Scheduler catches up missed slots on startup.
Configuration — Settings → Briefing: enable toggle, location geocoding, office days, time slot toggles, RSS feed management, push notification toggle.
RSS feeds — Add feed URLs with optional name and category. Feeds are fetched and cached; the briefing digest includes recent items. Category badges shown in the UI. Feeds can be manually refreshed.
Weather — Location-based forecast via Open-Meteo. Multiple locations supported (home, work, or any city name). Geocoding via Nominatim.
Profile note — The assistant maintains a profile note for each user that it updates based on briefing conversations, improving personalisation over time.
Web Research
The assistant can search the web (SearXNG) and fetch pages, synthesising findings into notes. A lightweight search_web tool answers quick questions inline without saving. Requires SEARXNG_URL to be configured.
Calendar
/calendar shows a full FullCalendar view (month, week, day). Click an empty slot to create an event; click an existing event to edit or delete it via a slide-over panel.
Internal events store — Events are stored in the app database (events table), making them available without any external calendar. Fields: title, description, start/end datetime, all-day toggle, location, colour.
AI tools — create_event, list_events, search_events, update_event, delete_event all operate on the internal store. Tool-call result cards in chat are clickable and open the same EventSlideOver for editing.
HomeView widget — The dashboard shows today's and the next 7 days' events as clickable cards above the hero project.
CalDAV sync (optional) — Connect an external CalDAV server (Nextcloud, Radicale, etc.) in Settings → Integrations. Events sync bidirectionally via a caldav_uid field.
Sharing and Collaboration
Share — Share any project or note/task with users or groups at viewer/editor/admin permission levels. Share button in the viewer/project toolbar opens a dialog.
Groups — Admins create platform-wide groups and assign users member/owner roles. Share a resource with a group in one action.
Shared with me — /shared lists all incoming shared projects and notes with permission badges.
Notifications — Bell icon in nav shows unread count (60s polling). Notifications generated for: project shared, note shared, added to group. Click navigates to the resource.
Push notifications — Web Push (VAPID) notifies when AI generation completes, even in another tab. Works over HTTPS only. Configurable per-user.
Quick Capture
Quick capture from the Android app routes to the intent classifier. It creates notes, tasks, or projects based on content — using the user's configured model, not the hardcoded default.
Data Export and Backup
- Personal export — Settings → Data: download all notes/tasks as a Markdown ZIP (with YAML frontmatter) or JSON array.
- Admin backup — Full application backup (version 2): includes projects, milestones, task logs, AI drafts, note versions, push subscriptions. ID remapping on restore for cross-instance migration.
PWA
Installable as a desktop or mobile app. Service worker caches the shell; push notifications are suppressed when the relevant tab is already focused. Works over HTTPS only in Firefox.
Settings
Settings are tabbed:
| Tab | Contents |
|---|---|
| General | Assistant name, default model, model management (pull/delete) |
| Account | Email change, password change, session invalidation |
| Notifications | Push notification subscription, briefing push toggle |
| Integrations | CalDAV configuration, SearXNG status |
| Data | Personal export, backup/restore (admin) |
| Briefing | Enable, location, office days, slots, RSS feeds, weather |
| API Keys | Create/revoke API keys, Fable MCP download and install |
| Config (admin) | Base URL, SMTP, OIDC settings |
| Users (admin) | User list, invite links, registration toggle |
| Logs (admin) | Error, audit, and usage logs with search |
| Groups (admin) | Create/manage groups and membership |
Roadmap
- Email integration (read/send via IMAP/SMTP tools in chat)
- Session invalidation on user deletion
- Flutter push notifications (requires FCM/APNs — separate from web VAPID)
- Flutter milestone support in project view
Keyboard Shortcuts
| Key | Action |
|---|---|
g + h |
Go to Home |
g + n |
Go to Notes |
g + t |
Go to Tasks |
g + p |
Go to Projects |
g + c |
Go to Chat |
g (bare) |
Go to Graph |
n |
New note |
t |
New task |
c |
Focus chat input |
e |
Edit current item |
/ |
Search |
? |
Show shortcuts panel |
j / k |
Navigate list items |
Enter |
Open selected item |
Escape |
Close panel / blur / go home (progressive) |
Ctrl+S |
Save in editor |