Notechondria
Version: 0.1.22 Build Date: 2026-04-15T02:00
What's Changed
Frontend — splash / start-up animation
-
SplashScreennow accepts aValueListenable<String>? loadingStatus. Host apps push phase strings (e.g.Restoring session,Connecting to server,Loading public notes data,Loading notes) and the splash cross-fades between them with anAnimatedSwitcher. When the listenable is omitted or empty the fallbackLoading...is used. -
Title (
Notechondria) and loading-status text now fade+slide in on first mount via a secondAnimationController, so the texts are no longer popped in at full opacity. The status line fades in ~320 ms after the title, giving the sequence a deliberate feel instead of a single cut. -
Acetyl-CoA feeding the cycle is now drawn as a skeletal structural
formula (CH3–C(=O)–S–CoA) pointing inward along the feed arrow, replacing
the plain
Acetyl-CoAEnglish label. Byproduct labels (NADH, CO2, GTP, FADH2) retain their English names — changing those is out of scope for this round. -
When the active metabolite's step crosses
stepFraction = 0.6, the incoming metabolite's skeletal formula is cross-faded in at the next node position. This makes the "one chemical becoming the other" morph visible on each cycle step without requiring per-atom morph-target logic. - Cycle rotation slowed from 12 s to 16 s per full revolution so the cross-fade reads clearly.
Frontend — app_shell.dart status wiring (three apps)
-
editor_app,planner_app,portal_appeach declare aValueNotifier<String> _splashStatusfield (disposed indispose). The notifier is threaded intoSplashScreen(loadingStatus: _splashStatus)and updated in_bootstrapApp()(and, for editor, inside_loadInitialData()) at each phase boundary:- Editor:
Starting editor→Loading local workspace→Restoring session→Completing sign-in→Connecting to server→Loading public notes data→Loading categories→Loading notes. - Planner:
Starting planner→Loading local planner data→Completing sign-in→Connecting to server. - Portal:
Starting portal→Loading local state→Completing sign-in→Connecting to server.
- Editor:
Files Changed
Modified
frontend/notechondria_shared/lib/src/components/splash_screen.dart— addsloadingStatusparameter,_HeaderColumn+_LoadingStatusTextwidgets, fade/slide-in on mount, cross-fade between loading strings,_drawAcetylCoAskeletal-formula painter, and a cross-fade between adjacent metabolite skeletal formulas near each step boundary.flutter/foundationimport added forValueListenable.frontend/editor_app/lib/app_shell.dart—_splashStatusValueNotifier<String>field (+ dispose); status updates in_bootstrapAppand inside_loadInitialDataat front-page, courses, and listNotes boundaries;SplashScreen(loadingStatus: _splashStatus).frontend/planner_app/lib/app_shell.dart— same wiring.frontend/portal_app/lib/app_shell.dart— same wiring.VERSION— 0.1.21 -> 0.1.22.docs/TODO.md— completed start-up animation items removed.
Verification
notechondria_shared:flutter pub get && flutter analyze— no new issues (only 2 pre-existingsurfaceVariantdeprecation infos).- Each of
editor_app/planner_app/portal_app:flutter test test/smoke_test.dart -r compact— all pass.flutter analyze— no new errors; existing warnings unchanged.
Notes / follow-ups
- Debug log window upgrades (log levels, per-request timings, terminal
input with
ls/cd/clear) remain pending indocs/TODO.md. - Note-view local-category delete semantics remain pending.
- Planner / portal
app_shell.dartstill needs the 0.1.20 editor_app invalid-token session-clear and bind-without-token short-circuit replicated (pre-existing bug fromdocs/TODO.md).