Notechondria

Version: 0.1.73 Build Date: 2026-04-26T18:30

What's Changed

Online account → 3 sub-pages + Logout

  • Spec: "Use the same logic [as 0.1.68] to organize the online account setting into: personal information; sign in and security (third party account, email, password); API settings (mcp for now). Logout (or login, hide former sections when not logged in, show the below sections). Signup (align in same line as prev, signup and login(logout) always as button in the same row). Signin with github / Signin with google (show in round button, span horizontal line)."

  • Signed-in account block restructured. Old single Card with embedded profile / sync / API key / connected accounts split into three Apple-style sub-page rows + a separate destructive Logout card:

    • Personal information_PersonalInfoPage (avatar, names, motto, social link).
    • Sign in & security_SignInSecurityPage (third-party account linking + change email + change password).
    • API settings_ApiSettingsPage (MCP API key + endpoint).
    • Logout — full-width red row at the bottom of the account section, separate Card.
  • Signed-out account block also restructured. Replaces the shared AuthHub Card with a tighter layout:

    • "Sign up" + "Login" on the same row as equal-width FilledButtons.
    • "Continue with GitHub" and "Continue with Google" as full-width pill buttons (StadiumBorder OutlinedButtons that span the full row) below a or divider.
    • New _OAuthPillButton widget at the bottom of settings_build.dart.

Sub-page feedback bus — fixes "feedback only on first level"

  • Spec: "Note that since we have secondary menu, the user should see the feedback / error message in the secondary menu; now the error message is on first level menu only, fix that."

  • Refactored ActionFeedback? _saveFeedback (a setState field that only re-rendered the top page) into a ValueNotifier<ActionFeedback?> _feedback. The new _FeedbackBanner widget watches the notifier and renders at the top of every sub-page. _runMaintenanceAction, _submitSettings, and the avatar upload all write to the notifier instead of setState — sub-pages see the same errors / success messages without bouncing back to the top page.

Restore template — local + remote variants

  • Spec: "The restore template should have two options depends on availability, one is to restore local inbox category with default welcome note. … in a new developer section, place the original restore remote template with three course."

  • New _restoreLocalStarterTemplate extension method on _AppShellState (in editor_app/lib/core/maintenance_actions.dart). Re-seeds the local Inbox + welcome note regardless of online state, by clearing the seeded marker and delegating to _ensureStarterWorkspace. Surfaced in Local data sub-page as "Restore starter inbox".

  • The original admin-only _restoreTemplateCourses (3-course remote catalog re-seed) moves to a new Developer sub-page, reachable from the top-level menu via a science-flask-icon row. Non-admin sessions get a clear backend error in the per-page feedback banner.

Auto-save in sub-pages — "always save and persist across

restarts"

  • Spec: "In secondary menu, always save and persist across restarts."

  • Theme preset / theme mode / default editor mode picks now call _autoSavePreferences (delegates to _submitSettings) so changes persist across restarts without forcing the user back to a Save button. The API URL field saves on onSubmitted (Enter / software-keyboard Done).

Sync rows moved to Local data sub-page

  • Push local→cloud and Pull cloud→local moved into the Local data sub-page where data movement lives. Old Sync subsection inside the giant online-account Card is gone with the restructure.

Files Changed

  • frontend/editor_app/lib/modules/settings.dart_feedback notifier; top-level build() reads via ValueListenableBuilder; _autoSavePreferences method added; Developer sub-page row in _buildSettingsMenu.
  • frontend/editor_app/lib/modules/settings_pages.dart_FeedbackBanner, _DeveloperSettingsPage, _PersonalInfoPage, _SignInSecurityPage, _ApiSettingsPage. Local data sub-page gets new "Push" / "Pull" / "Restore starter inbox" rows.
  • frontend/editor_app/lib/modules/settings_build.dart_buildOnlineAccountSection rewritten as _buildSignedInAccount / _buildSignedOutAccount; _OAuthPillButton widget; _openSignUpDialog / _openLoginDialog / _apiBaseHostSubtitle helpers.
  • frontend/editor_app/lib/core/maintenance_actions.dart — new _restoreLocalStarterTemplate action.
  • frontend/editor_app/lib/core/build_helpers.dart — pass onRestoreLocalStarterTemplate: _restoreLocalStarterTemplate through to _SettingsPage.

Notes

  • All editor module files still under the §1.5 1000-line cap after the additions. Editor smoke test passes.
  • The 3-course remote-template restore is now visibly demoted to "Developer" with a science-flask icon — clear indication that it's not for end users. The per-page feedback banner shows the backend-permissions error inline if a non-admin session triggers it.