Notechondria

Version: 0.1.6 Build Date: 2026-04-07T07:00

What's Changed

Fix web package CI build failure

  • Replaced package:web (v1.1.1, incompatible with CI Dart SDK) with conditional-import URL strategy (url_strategy.dart stub + url_strategy_web.dart using dart:html). Tests now pass in both VM and browser.
  • Removed web: ^1.1.0 from pubspec.yaml and dart:js_interop import — eliminates the external dependency that caused the build failure.

Gitignore update

  • Added backend/mediafiles/ to .gitignore to prevent generated test media files from being committed.

Invitation code and email verification (frontend completion)

  • Invitation code backend was already implemented (InvitationCode model with SHA-256 hash, auto-hash on save, consume on use, required only when codes exist in DB). Marked as complete.
  • Email verification backend was already implemented (VerificationCode model with SHA-256 hashed 6-digit codes, ResendVerificationSerializer with 60s cooldown, SMTP env vars). Marked as complete.
  • Added resendVerification(email) method to the frontend HTTP client interface and implementation, calling POST /auth/resend-verification/.
  • Added "Resend code" button with 60-second cooldown timer to the _EmailCodeDialog verify dialog. Button is disabled during cooldown and shows remaining seconds.
  • Wired onResendVerification callback through _AuthHub_SettingsPage_AppShellState for the editor app.

Remove planner front page module

  • Deleted frontend/planner_app/lib/modules/front.dart and its part import.
  • Removed _frontPage state, _frontPageFallbackPayload(), _refreshFrontPageData(), and getFrontPage() client method.
  • Simplified _chooseDefaultCourse() — no longer references front page default_course.
  • Renumbered navigation indices (Learner=0, Course=1, Activity=2, Settings=3). Updated _buildPage(), _showWidePageHeader, _showCompactPageHeader, and _hasRenderableLocalState.
  • Removed front_page from local cache persistence and default cache template.

Files Changed

  • .gitignore -- Added backend/mediafiles/ entry
  • frontend/editor_app/pubspec.yaml -- Removed web: ^1.1.0 dependency
  • frontend/editor_app/lib/main.dart -- Replaced dart:js_interop + package:web with conditional URL strategy import
  • frontend/editor_app/lib/core/url_strategy.dart -- New stub (no-op for VM/test)
  • frontend/editor_app/lib/core/url_strategy_web.dart -- New web impl using dart:html
  • frontend/editor_app/lib/app_shell.dart -- Uses url_strategy.browserPushState/replaceState; added _resendVerification handler
  • frontend/editor_app/lib/core/client.dart -- Added resendVerification(email) to interface and HTTP implementation
  • frontend/editor_app/lib/components/auth_dialogs.dart -- Added onResend callback and 60s cooldown timer to _EmailCodeDialog; added onResendVerification to _AuthHub
  • frontend/editor_app/lib/modules/settings.dart -- Added onResendVerification parameter to _SettingsPage
  • frontend/planner_app/lib/main.dart -- Removed part 'modules/front.dart'; updated initialIndex and visibleIndices
  • frontend/planner_app/lib/modules/front.dart -- Deleted
  • frontend/planner_app/lib/app_shell.dart -- Removed front page state/methods/caching; renumbered nav indices
  • frontend/planner_app/lib/core/client.dart -- Removed getFrontPage() from interface and implementation
  • frontend/planner_app/lib/core/local_store.dart -- Removed front_page from default cache
  • docs/TASKS.md -- Marked invitation code, email verification, and remove front page tasks as complete