Notechondria
Version: 0.1.86 Build Date: 2026-04-28
What's Changed
Cover images and multi-device session manager ported from editor_app to planner_app and portal_app.
Cover images — planner + portal
NoteCoverImage upload, delete, and display in the note editor metadata
dialog, note viewer, and note cards for both planner_app and portal_app.
- Client layer — Added
uploadNoteCoverImage(multipart POST to/notes/$noteId/cover/) anddeleteNoteCoverImage(DELETE to/notes/$noteId/cover/) to both apps'NotechondriaClientinterface andHttpNotechondriaClientimplementation. - App shell — Wired
onUploadCover/onDeleteCovercallbacks in_buildPage()for both apps. - Note metadata dialog — Added cover section with file picker,
upload/replace/remove actions, and
NoteCoverImagepreview to both apps'_NoteMetadataDialog. Extracted fromlearner_note_editor.dartinto newnote_metadata_dialog.dartpart-files to stay under the 1000-line ceiling. - Note viewer — Added cover image banner above the markdown body
when
cover_image_urlis present. - Note cards — Added
NoteCoverImagebanner to_LearnerNoteCardin both apps (21/9 aspect ratio, clipped anti-alias).
Multi-device session manager — planner + portal
ActiveSessionsCard in the Settings page for both planner_app and
portal_app, enabling users to view and revoke active sessions.
- App shell state — Added
_currentSessionId,_multiDevice,_otherSessionsCountfields andapplySessionMetadata/clearSessionMetadataoverrides viaAppShellSessionMixin. - Callback wiring —
onListSessions,onRevokeSession,onCurrentSessionRevokedwired in_buildPage()for both apps. - Settings UI — Added constructor params, field declarations, and
ActiveSessionsCardembed for both apps.
Files Changed
VERSION— 0.1.85 → 0.1.86.frontend/planner_app/lib/core/client.dart— abstract + HTTP impl foruploadNoteCoverImage/deleteNoteCoverImage.frontend/portal_app/lib/core/client.dart— same additions.frontend/planner_app/lib/app_shell.dart— cover + session callbacks, session state fields and mixin overrides.frontend/planner_app/lib/modules/learner.dart— cover params, card banner.frontend/planner_app/lib/modules/learner_note_editor.dart— cover params, extracted metadata dialog.frontend/planner_app/lib/modules/note_metadata_dialog.dart— new part-file with cover section UI.frontend/planner_app/lib/modules/note_viewer.dart— cover image banner.frontend/planner_app/lib/modules/settings.dart— session params + ActiveSessionsCard.frontend/planner_app/lib/main.dart— added part directive for note_metadata_dialog.frontend/portal_app/lib/app_shell.dart— cover + session callbacks, session state fields and mixin overrides.frontend/portal_app/lib/modules/learner.dart— cover params, card banner.frontend/portal_app/lib/modules/learner_note_editor.dart— cover params, extracted metadata dialog.frontend/portal_app/lib/modules/note_metadata_dialog.dart— new part-file with cover section UI.frontend/portal_app/lib/modules/note_viewer.dart— cover image banner.frontend/portal_app/lib/modules/settings.dart— session params + ActiveSessionsCard.frontend/portal_app/lib/main.dart— added part directive for note_metadata_dialog.docs/TODO.md— cover images and session manager items removed.