Notechondria

Version: 0.1.9 Build Date: 2026-04-08T00:00

What's Changed

Registration wizard

  • Added ValidateInvitationApiView backend endpoint (POST /api/v1/auth/validate-invitation/) that checks invitation code validity without consuming it. Returns {required, valid}.
  • Replaced simple _RegisterDialog with multi-step _RegistrationWizard in all three apps (editor, planner, portal):
    • Step 0: Invitation code input with Back/Confirm.
    • Step 1: Registration method selection (Email, Google, GitHub).
    • Step 2: Email registration form with username, email, password (8+ chars, strength validation), confirm password, and Back/Register buttons. Post-registration shows verification prompt with resend cooldown.
  • Updated register() client method signatures across all three apps to accept username and optional invitationCode.
  • Added validateInvitation() client method to all three apps.
  • OAuth callbacks now accept and persist invitation code through SharedPreferences so it survives the redirect flow.

Version-tagged Docker images

  • Created VERSION file at repo root to define the project version.
  • Updated prepare_env.sh to read VERSION file and produce image tags in v<VERSION>.<BUILD_NUMBER> format (e.g. v0.1.9.42).
  • Updated sample.env image tags to v0.1.9.local.
  • Updated docs/deployment/deploy.md with version tagging documentation.
  • Added versioning rule to TASKS.md so future agents increment the third digit on each update.

Splash screen fix

  • Fixed splash screen being skipped when local cached state existed. Replaced _isLoading && !_hasRenderableLocalState condition with dedicated _showSplash flag in all three apps.
  • Splash now always displays on startup (including web with slow backend) and dismisses only when initial data loads or the 10-second timeout fires.
  • Removed unused _hasRenderableLocalState getter from all three apps.

Frontend deploy port conflict fix

  • Fixed deploy_frontends.sh using root full-stack docker-compose.yml which pulled in db/app/nginx via depends_on chains, causing port 9032 conflict with the already-running backend db container.
  • deploy_frontends.sh now deploys each frontend from its own standalone Compose file (frontend/*/docker-compose.yml) which only defines the frontend service on the shared external network.
  • deploy_gateway.sh now uses a standalone gateway Compose file (deployment/docker/gateway/docker-compose.yml) instead of the root compose.
  • Added network aliases to backend nginx (backend_nginx), editor (editor_frontend), planner (planner_frontend), and portal (portal_frontend) so the gateway can resolve services by name across separate Compose projects.
  • Both frontend and gateway deploy scripts now call ensure_shared_network.sh before starting containers, preventing race conditions when backend and frontend deploy in parallel.

Files Changed

  • backend/creators/api.py -- Added ValidateInvitationApiView
  • backend/notechondria/api_urls.py -- Added validate-invitation URL route
  • backend/docker-compose.yml -- Added backend_nginx network alias to nginx service
  • VERSION -- New: project version file (0.1.9)
  • sample.env -- Updated image tags to version format
  • deployment/jenkins/scripts/prepare_env.sh -- VERSION file reading and version-tagged image defaults
  • deployment/jenkins/scripts/deploy_frontends.sh -- Use individual frontend compose files instead of root compose
  • deployment/jenkins/scripts/deploy_gateway.sh -- Use standalone gateway compose instead of root compose
  • deployment/docker/gateway/docker-compose.yml -- New: standalone gateway compose file
  • docs/deployment/deploy.md -- Version tagging and compose stack documentation updates
  • frontend/editor_app/docker-compose.yml -- Added editor_frontend network alias
  • frontend/editor_app/lib/core/client.dart -- Added validateInvitation, updated register signature
  • frontend/editor_app/lib/components/auth_dialogs.dart -- Replaced _RegisterDialog with _RegistrationWizard
  • frontend/editor_app/lib/modules/settings.dart -- Wired onValidateInvitation, updated OAuth callback types
  • frontend/editor_app/lib/app_shell.dart -- Added _showSplash flag, invitation code persistence in OAuth flow, removed _hasRenderableLocalState
  • frontend/planner_app/docker-compose.yml -- Added planner_frontend network alias
  • frontend/planner_app/lib/core/client.dart -- Added validateInvitation, updated register signature
  • frontend/planner_app/lib/modules/settings.dart -- Added _RegistrationWizard, updated _AuthHub and _SettingsPage
  • frontend/planner_app/lib/app_shell.dart -- Added _showSplash flag, updated register/OAuth signatures, removed _hasRenderableLocalState
  • frontend/portal_app/docker-compose.yml -- Added portal_frontend network alias
  • frontend/portal_app/lib/core/client.dart -- Added validateInvitation, updated register signature
  • frontend/portal_app/lib/modules/settings.dart -- Added _RegistrationWizard, updated _AuthHub and _SettingsPage
  • frontend/portal_app/lib/app_shell.dart -- Added _showSplash flag, updated register/OAuth signatures, removed _hasRenderableLocalState
  • docs/versions/0.1.9.md -- This version document
  • docs/TASKS.md -- Marked registration wizard tasks complete, added versioning rule