Notechondria

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

What's Changed

Note preview

  • Avatar CORS on production. Nginx /media/ location now sends Access-Control-Allow-Origin headers; Django ApiCorsMiddleware extended to cover /media/ paths (was /api/ only). Fixes cross-origin avatar loads from GitHub Pages frontend.

Editor Settings

  • Unified save/cancel buttons per section. Both "Online account" and "Editor preferences" cards now have a full-width Save (left) / Cancel (right) button row. Cancel is greyed out when nothing changed; clicking it restores values from the server. Added _hasProfileChanges, _hasPreferenceChanges, _cancelProfileChanges, _cancelPreferenceChanges helpers and _buildSectionButtons factory.

Login and account info

  • Username displayed as read-only @username subtext below the display name. Removed the read-only TextField for username.
  • Added First name / Last name text fields on the same row, replacing the username editor. Backend SettingsSerializer and auth_payload now include first_name/last_name; display_name derived from first_name + last_name (falls back to username).
  • Avatar tap now opens a preview dialog showing the full-size image. The "Change avatar" button remains as the upload trigger. Added _previewAvatar method.

Files Changed

  • backend/creators/api.pySettingsSerializer: added first_name/last_name fields, to_representation, update; auth_payload: added first_name/last_name/display_name
  • backend/nginx/nginx.conf — CORS headers on /media/ location and @django_media fallback
  • backend/notechondria/middleware.pyApiCorsMiddleware now covers /media/ paths
  • docs/TASKS.md — removed completed items
  • frontend/editor_app/lib/app_shell.dart_updateSettings accepts firstName/lastName, diff logic added
  • frontend/editor_app/lib/modules/settings.dart_firstNameController/_lastNameController, _previewAvatar, _buildSectionButtons, _hasProfileChanges/_hasPreferenceChanges, _cancelProfileChanges/_cancelPreferenceChanges; profile fields restructured with first/last name row, username as subtext, avatar tap = preview