Notechondria
Version: 0.1.21 Build Date: 2026-04-15T01:00
What's Changed
Frontend — shared UI extracted into notechondria_shared package (URGENT)
-
New
frontend/notechondria_shared/Flutter package, consumed by editor / planner / portal viapath: ../notechondria_shared. Each app'slib/main.dartadds one library-level import (package:notechondria_shared/notechondria_shared.dart) so every existingpart of notechondria_frontend;file inherits the shared symbols transparently. -
Symbols moved to the shared package (and dropped from each app):
Symbol What ActionFeedbacksuccess/failure feedback model ApiDebugSnapshotlast-API-response snapshot model showBlurDialog<T>gaussian-blurred backdrop dialog helper formatCompactTimestampday-of-week / MM/DD/YY/MM/DDformatterSidebarItemwide-layout sidebar row (overflow-safe) ConfirmWithDelayDialogdestructive-action delay confirmation ApiDebugCard,ApiDebugSummarydebug-log API surface ErrorStateViewfull-page error + retry surface SplashScreencitric acid cycle splash (now takes appVersion)AuthHub+ 5 dialog classes +FeedbackTextaccount / login / verify / password reset / sign-up AppPreferencesCarddefault-editor + theme-preset + theme-mode + API base URL rows, with optional extrasBuilderslot for app-specific rows -
Underscore prefixes were stripped on every symbol that's now visible across packages (e.g.
_ApiDebugCard→ApiDebugCard,_AuthHub→AuthHub). Internal helpers and State classes that stay file-local in the shared package keep their underscore. -
Settings UI changes (deliberate, per "synchronize across apps" decision):
- Planner gains a "Default editor" dropdown in App preferences.
The
_editorModefield was already wired in planner state but never surfaced in the UI; the sharedAppPreferencesCardnow surfaces it consistently in all three apps. - Portal's editor mode dropdown moves out from behind the
is-authenticatedguard and into App preferences alongside the theme rows. - Portal's editor-mode option list narrows from
{G, B, P}to{P, G}to match the editor-app canonical set. The block-editor option ('B') was already deprecated. - Portal and planner auth dialogs gain the gaussian-blurred dialog
backdrop (via the shared
showBlurDialoghelper). They were previously falling through to plainshowDialog; editor's helper is now the canonical one.
- Planner gains a "Default editor" dropdown in App preferences.
The
-
docs/TODO.md"Global reusable components" URGENT item is marked done. -
frontend/AGENTS.mddevelopment rule #3 updated: shared widgets live innotechondria_shared/, not copy-pasted between apps. Standard verification block adds thenotechondria_sharedpub-get + analyze step. -
docs/index.mdrepo map and §4 "Frontend verification reality" + §6 "Open work" reflect the shared package.
Files Changed
New
frontend/notechondria_shared/pubspec.yamlfrontend/notechondria_shared/analysis_options.yamlfrontend/notechondria_shared/lib/notechondria_shared.dartfrontend/notechondria_shared/lib/src/models/action_feedback.dartfrontend/notechondria_shared/lib/src/models/api_debug_snapshot.dartfrontend/notechondria_shared/lib/src/utils/blur_dialog.dartfrontend/notechondria_shared/lib/src/utils/compact_timestamp.dartfrontend/notechondria_shared/lib/src/components/auth_dialogs.dartfrontend/notechondria_shared/lib/src/components/debug_widgets.dartfrontend/notechondria_shared/lib/src/components/error_state.dartfrontend/notechondria_shared/lib/src/components/navigation.dartfrontend/notechondria_shared/lib/src/components/splash_screen.dartfrontend/notechondria_shared/lib/src/settings/app_preferences_card.dartdocs/versions/0.1.21.md(this file)
Deleted
frontend/editor_app/lib/components/auth_dialogs.dartfrontend/{editor,portal,planner}_app/lib/components/navigation.dartfrontend/{editor,portal,planner}_app/lib/components/debug_widgets.dartfrontend/{editor,portal,planner}_app/lib/components/error_state.dartfrontend/{editor,portal,planner}_app/lib/components/splash_screen.dart
Modified
frontend/{editor,portal,planner}_app/pubspec.yaml— addsnotechondria_shared: {path: ../notechondria_shared}.frontend/{editor,portal,planner}_app/lib/main.dart— drops the fivepart 'components/X.dart';lines for the moved widgets and adds the package import.frontend/{editor,portal,planner}_app/lib/core/client.dart— dropsActionFeedbackandApiDebugSnapshotdefinitions.frontend/{editor,portal,planner}_app/lib/core/helpers.dart— drops_formatCompactTimestamp; editor also drops_showBlurDialog.frontend/{editor,portal,planner}_app/lib/app_shell.dart—_SidebarItem→SidebarItem,_ConfirmWithDelayDialog→ConfirmWithDelayDialog,_SplashScreen→SplashScreen(now passesappVersion: _kAppVersion).frontend/{editor,portal,planner}_app/lib/modules/settings.dart— inlined preference rows replaced byAppPreferencesCard(...); portal and planner shed ~815 lines each by deleting their inlined copies of the auth-dialog stack.frontend/{portal,planner}_app/lib/modules/activity.dart—_FeedbackText→FeedbackTextreference sweep.VERSION— bumped 0.1.20 → 0.1.21.frontend/AGENTS.md— "Current shape" listsnotechondria_shared/, development rule #3 updated, verification block adds shared-package step.docs/index.md— repo map + §4 + §6 reflect the shared package.docs/TODO.md— URGENT "Global reusable components" item marked done.
Notes / follow-ups
- The bug fixes from 0.1.20 (invalid-token session-clear,
bind-without-token short-circuit) still need to be replicated from
editor's
app_shell.dartinto planner / portal. Theapp_shell.dartfiles are still per-app and were not touched this round; tracked indocs/TODO.mdBugs section. - Per-app
_themePresetEntriesconstants incore/helpers.dartare now unused but left in place to keep this round's diff scoped to the four widgets the user named. - Several pre-existing analyzer warnings (
surfaceVariantdeprecated,withOpacitydeprecated,BuildContextacross async gaps,use_string_in_part_of_directives,_StatChipdead in planner) were carried over verbatim and not addressed — they predate this round and would inflate the diff with unrelated churn.