bvandeusen
d97f7b0ebd
feat(knowledge): wire 4-tab shell, retire LibraryScreen, complete Knowledge View feature
2026-04-05 00:03:23 -04:00
bvandeusen
b5d9efa3ec
feat(knowledge): add KnowledgeItemCard widget
2026-04-04 23:49:18 -04:00
bvandeusen
23509adfa8
feat: news story cards in Android briefing screen
...
Replaces bare Story-N reaction rows with full NewsCard widgets: source label,
relative timestamp, linked headline, 2-line snippet, and 👍 /👎 reactions.
Reads rss_items from message metadata (requires backend ≥ this sprint).
Adds url_launcher ^6.3.1 for opening article links in the browser.
Adds https/http <queries> entries to AndroidManifest for Android 11+.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-27 00:08:51 -04:00
bvandeusen
9f524e158d
fix: weather card spacing and sizing consistency
...
- Consistent 8px vertical rhythm (was 6/4/10 mix)
- Larger current temp (36px vs 32px) for better visual weight
- Fixed 64px forecast column width prevents uneven wrapping
- Forecast condition text clipped at 2 lines with ellipsis
- 12px spacing around forecast divider
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-26 17:36:53 -04:00
bvandeusen
46d0427901
feat: weather card and RSS reactions in briefing screen
...
- Parse metadata field on Message model (weather, rss_item_ids)
- Add WeatherCard widget: location, current temp, condition, today hi/lo,
delta from yesterday, scrollable 3-day forecast strip
- BriefingScreen shows WeatherCard above the first assistant message that
carries weather metadata (mirrors web BriefingView.vue behaviour)
- RSS reaction buttons (👍 /👎 ) shown below assistant messages with
rss_item_ids; optimistic toggle with rollback on failure
- Add postRssReaction / deleteRssReaction to BriefingApi
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-26 17:30:26 -04:00
bvandeusen
5ca5856f15
Project task view: tapping a project shows milestone-grouped task list
...
- ProjectLibraryCard.onTap navigates to /projects/:id/tasks
- New ProjectTasksScreen: milestone sections with coloured dot,
done/total counter and thin progress bar; unassigned tasks at bottom
- Status cycle icon updates optimistically (pendingStatus map) so
the list doesn't flash on every tap; syncs global tasksProvider
- New route /projects/:id/tasks registered in app.dart
- TasksApi.getByProject + TasksRepository + projectTasksProvider (family)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-12 21:40:14 -04:00
bvandeusen
def7519feb
fix: resolve all flutter analyze warnings and infos
...
- app.dart: add braces to single-statement if body
- briefing_api.dart: escape <id> in doc comment (unintended HTML)
- notes_api.dart, tasks_api.dart, projects_api.dart: use null-aware
map elements (?'key': value) instead of if-null guards
- task_edit_screen.dart: remove unused tasks_api.dart import
- task_edit_screen.dart, project_selector.dart: suppress
deprecated_member_use on DropdownButtonFormField.value (value is
the controlled-widget param; switching to initialValue would break
current-selection display)
- project_selector.dart: use _ instead of __ for ignored error params
2026-03-12 00:36:05 -04:00
bvandeusen
6232c7c99a
feat: app overhaul — Briefing-first navigation, Library, capture queue
...
Plans 1-3 implemented:
Plan 1 — Foundation
- Add google_fonts ^6.2.1
- lib/core/theme.dart: slate-indigo ColorScheme (dark/light), Fraunces
headings, GradientButton widget
- lib/providers/capture_work_queue_provider.dart: in-memory sequential
work queue; CaptureWorkQueueNotifier drains one item at a time;
captureResultProvider feeds snackbars to UI
- lib/app.dart: wire fabledDarkTheme/fabledLightTheme; replace blocking
_QuickCaptureBar with queue-based implementation (progress bar, badge)
Plan 2 — Navigation
- 3-tab shell: Briefing · Library · Chat (was Notes · Tasks · Projects · Chat)
- lib/screens/library/library_screen.dart: unified notes+tasks+projects list
with filter pills, status sub-filter for tasks, live search, FAB
- lib/widgets/library_item_card.dart: NoteLibraryCard, TaskLibraryCard
(status cycle), ProjectLibraryCard
- lib/screens/chat/conversations_tab_screen.dart: focused replacement for
ConversationsListScreen
- Delete 5 dead screens: notes_list, tasks_list, project_list,
conversations_list, quick_capture
Plan 3 — Briefing
- lib/data/models/briefing_conversation.dart
- lib/data/api/briefing_api.dart: getToday, getHistory, getMessages,
triggerSlot
- lib/providers/briefing_provider.dart: BriefingNotifier with sendReply
(optimistic + SSE + poll, same pattern as MessagesNotifier) and refresh
- lib/widgets/chat_message_bubble.dart: extracted + redesigned shared bubble
(ghost user bubbles, left-accent assistant bubbles)
- lib/widgets/briefing_digest_card.dart: expandable first-message card
- lib/screens/briefing/briefing_screen.dart: digest card, conversation list,
streaming reply bar, refresh button, history overflow menu
- lib/screens/briefing/briefing_history_screen.dart: read-only past dates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-11 23:17:38 -04:00
bvandeusen
fceae5529d
Add Projects feature; sync Note/Task models with backend additions
...
## New: Projects
- Project model, API, repository, Riverpod provider
- ProjectListScreen: active/archived sections, create dialog, long-press status/delete
- ProjectSelector widget: DropdownButtonFormField for note + task editors
- Projects tab added to shell (bottom nav + navigation rail, 4th position)
- /projects route registered in GoRouter ShellRoute
## Updated: Note model
- Added tags: List<String>, projectId: int?, milestoneId: int?
- NotesApi.create/update pass tags and project_id
- NotesRepository and NotesNotifier signatures updated
- NoteEditScreen: chip-based tag input + ProjectSelector
## Updated: Task model
- Added projectId: int?, milestoneId: int?, parentId: int?
- TasksApi.create passes project_id; update payload includes project_id
- TasksRepository and TasksNotifier signatures updated
- TaskEditScreen: ProjectSelector added; project_id sent on save
## Provider fix
- ProjectsNotifier.update renamed to updateProject to avoid conflict
with AsyncNotifier.update(FutureOr<State> Function(State)) base method
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-02 20:52:59 -05:00