docs: remove Flutter companion app from project surface
The Flutter app (separate fabled_app repo) no longer adds value over web/PWA access. Strip the in-repo surface that referenced it: - delete docs/android-app.md - drop README docs-table row and feature-list mention - drop the two Flutter roadmap bullets from docs/features.md - remove the Flutter port subsection from docs/design-system.md The standalone fabled_app repo is untouched here; archival/deletion of that repo is a separate decision. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@ A self-hosted second brain and project management application with integrated LL
|
|||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
Notes and tasks with a Markdown editor, sub-tasks, milestones, and kanban project workspaces. AI chat with streaming responses, RAG over your notes, and tool use (web search, calendar, weather). A daily briefing that digests your tasks, RSS feeds, and weather on a schedule. Knowledge graph, per-user/group sharing, PWA with push notifications, an MCP server for external AI clients, and an Android companion app.
|
Notes and tasks with a Markdown editor, sub-tasks, milestones, and kanban project workspaces. AI chat with streaming responses, RAG over your notes, and tool use (web search, calendar, weather). A daily briefing that digests your tasks, RSS feeds, and weather on a schedule. Knowledge graph, per-user/group sharing, PWA with push notifications, and an MCP server for external AI clients.
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
@@ -36,7 +36,6 @@ Open `http://localhost:5000`. The first user to register becomes admin. Go to **
|
|||||||
| [API Keys & MCP](docs/api-keys-and-mcp.md) | API key management and Fable MCP install guide |
|
| [API Keys & MCP](docs/api-keys-and-mcp.md) | API key management and Fable MCP install guide |
|
||||||
| [SSO / OAuth](docs/sso-oauth.md) | OIDC setup for Authentik, Keycloak, and other providers |
|
| [SSO / OAuth](docs/sso-oauth.md) | OIDC setup for Authentik, Keycloak, and other providers |
|
||||||
| [API Reference](docs/api-reference.md) | All REST API endpoints |
|
| [API Reference](docs/api-reference.md) | All REST API endpoints |
|
||||||
| [Android App](docs/android-app.md) | Flutter companion app architecture and feature status |
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
# Android Companion App
|
|
||||||
|
|
||||||
The Android companion app lives in a separate repository at `/home/bvandeusen/Nextcloud/Projects/fabled_app`.
|
|
||||||
|
|
||||||
## Stack
|
|
||||||
|
|
||||||
- Flutter + Dart
|
|
||||||
- Riverpod (state management)
|
|
||||||
- GoRouter (navigation)
|
|
||||||
- Dio (HTTP client)
|
|
||||||
- PersistCookieJar (session persistence)
|
|
||||||
- SSE streaming via `fetch` + `ReadableStream` bridge
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
```
|
|
||||||
lib/
|
|
||||||
app.dart # GoRouter + _Shell + _QuickCaptureBar
|
|
||||||
core/constants.dart # Routes.*
|
|
||||||
data/
|
|
||||||
models/ # note.dart, task.dart, project.dart
|
|
||||||
api/ # notes_api.dart, tasks_api.dart, projects_api.dart
|
|
||||||
repositories/ # notes, tasks, projects repositories
|
|
||||||
providers/
|
|
||||||
api_client_provider.dart # all API + repository providers
|
|
||||||
notes_provider.dart # NotesNotifier
|
|
||||||
tasks_provider.dart # TasksNotifier
|
|
||||||
projects_provider.dart # ProjectsNotifier
|
|
||||||
screens/
|
|
||||||
notes/note_edit_screen.dart # chip tag input + ProjectSelector
|
|
||||||
tasks/task_edit_screen.dart # ProjectSelector
|
|
||||||
projects/project_list_screen.dart
|
|
||||||
widgets/
|
|
||||||
project_selector.dart # reusable DropdownButtonFormField
|
|
||||||
```
|
|
||||||
|
|
||||||
## Navigation
|
|
||||||
|
|
||||||
4-tab shell (Notes · Tasks · Projects · Chat):
|
|
||||||
- Phone: bottom `NavigationBar`
|
|
||||||
- Tablet/landscape: `NavigationRail`
|
|
||||||
|
|
||||||
Quick Capture bar persists across all tabs. Settings accessible from top-right icon.
|
|
||||||
|
|
||||||
## Feature Status
|
|
||||||
|
|
||||||
| Feature | Status | Notes |
|
|
||||||
|---------|--------|-------|
|
|
||||||
| Notes CRUD | ✅ | Tags chip input; project selector in editor |
|
|
||||||
| Tasks CRUD | ✅ | Project selector in editor |
|
|
||||||
| Projects list | ✅ | Active/archived sections; long-press status change; create dialog |
|
|
||||||
| Chat + SSE | ✅ | Full streaming |
|
|
||||||
| Quick Capture | ✅ | Offline queue with retry |
|
|
||||||
| Tags | ✅ | Chip input in NoteEditScreen; typed as `List<String>` |
|
|
||||||
| Project assignment | ✅ | `ProjectSelector` dropdown in Note + Task editors |
|
|
||||||
| Milestones | ❌ deferred | Too granular for mobile; web UI handles it |
|
|
||||||
| Push notifications | ❌ incompatible | Backend uses browser VAPID; Flutter needs FCM/APNs — separate implementation required |
|
|
||||||
| CalDAV settings | ❌ intentional | Server-side config only; not exposed in mobile app |
|
|
||||||
|
|
||||||
## API Compatibility Notes
|
|
||||||
|
|
||||||
- `GET /api/projects/:id` returns a flat JSON object (not `{project: ...}` wrapper); includes `summary` field.
|
|
||||||
- `POST /api/projects` returns the project dict directly (201).
|
|
||||||
- `PATCH /api/projects/:id` returns the updated project dict.
|
|
||||||
- Task body field is `body` (not `description`) — the app maps `description` → `body` on serialize.
|
|
||||||
|
|
||||||
## Self-Update
|
|
||||||
|
|
||||||
The app supports self-update via the Forgejo release API (`update_provider.dart`). It checks the latest release tag and prompts the user to download and install a new APK when one is available.
|
|
||||||
|
|
||||||
## CI
|
|
||||||
|
|
||||||
Builds are triggered from the Forgejo Actions pipeline in the `fabled_app` repository. The APK is attached to the release as a downloadable artifact.
|
|
||||||
@@ -568,17 +568,6 @@ Items deliberately not addressed in this round; revisit when a real need surface
|
|||||||
- Standalone voice/tone audit across every UI string — opportunistic-only; full sweep deferred unless drift becomes visible.
|
- Standalone voice/tone audit across every UI string — opportunistic-only; full sweep deferred unless drift becomes visible.
|
||||||
- A handful of editor utility buttons (`.btn-suggest-tags`, `.btn-link-all`, AI assist generate/proofread/accept/reject set, etc.) — currently ghost-styled and visually compliant; revisited only if they read off in practice.
|
- A handful of editor utility buttons (`.btn-suggest-tags`, `.btn-link-all`, AI assist generate/proofread/accept/reject set, etc.) — currently ghost-styled and visually compliant; revisited only if they read off in practice.
|
||||||
|
|
||||||
### Flutter app port — shipped 2026-04-28
|
|
||||||
|
|
||||||
The companion mobile app (`fabled_app` / FabledApp repo) tracks the same design system. Two commits:
|
|
||||||
|
|
||||||
- **Foundation port** — `0f05f47`. `lib/core/theme.dart` rewritten with the Obsidian/Iron/Pewter dark palette, warm parchment light palette, dusty violet `#5B4A8A` primary. Inter loaded for body, JetBrains Mono available at call sites, Fraunces for headlines ≥18px. New `ActionColors` ThemeExtension exposes Moss/Bronze/Oxblood/Pewter outside the `ColorScheme` (Material's primary/secondary/tertiary slots all carry brand accent, so action tokens need their own home). `GradientButton` recolored to dusty-violet gradient.
|
|
||||||
- **Surface phase** — `b9e68e3`. `lucide_icons ^0.257.0` installed; 107 `Icons.*` references across 21 files swapped to `LucideIcons.*`. Input border radius 24 → 8 in both themes. ChatMessageBubble Illuminated Transcript fixes — neutral border on user bubbles, `surface`/Iron bg on assistant bubbles, asymmetric corner restoration (only bottom-left clipped, not both left corners), accent-tinted glow shadow added. 5 destructive confirm buttons across notes / tasks / chat / calendar wired to `ActionColors.destructive`. Calendar event Save wired to `ActionColors.primary` as the reference Moss site. 4 hardcoded indigo Color literals → dusty-violet equivalents.
|
|
||||||
|
|
||||||
The Flutter port doesn't decompose into 7 PRs the way web did because Flutter's centralized `theme.dart` means most palette/font work happens in one file. Per-screen Save / Cancel reclassification beyond the calendar event Save is opportunistic — the wiring pattern (`Theme.of(context).extension<ActionColors>()!.primary`) is established and applied incrementally as files are touched.
|
|
||||||
|
|
||||||
Pattern reference for downstream screens: see `lib/screens/calendar/event_form_sheet.dart` for `ActionColors.primary` usage on Save buttons; see the dialog spots in `note_edit_screen.dart` / `task_edit_screen.dart` / `note_detail_screen.dart` / `conversations_tab_screen.dart` for `ActionColors.destructive` on confirm-Delete buttons.
|
|
||||||
|
|
||||||
### Open threads
|
### Open threads
|
||||||
|
|
||||||
*New threads will accumulate here as gaps surface in real use.*
|
*New threads will accumulate here as gaps surface in real use.*
|
||||||
|
|||||||
@@ -132,8 +132,6 @@ Settings are tabbed:
|
|||||||
|
|
||||||
- Email integration (read/send via IMAP/SMTP tools in chat)
|
- Email integration (read/send via IMAP/SMTP tools in chat)
|
||||||
- Session invalidation on user deletion
|
- Session invalidation on user deletion
|
||||||
- Flutter push notifications (requires FCM/APNs — separate from web VAPID)
|
|
||||||
- Flutter milestone support in project view
|
|
||||||
|
|
||||||
## Keyboard Shortcuts
|
## Keyboard Shortcuts
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user