Notechondria

Version: 0.1.15 Build Date: 2026-04-09T00:00

What's Changed

OAuth error diagnostics

  • OAuth 400 responses now include the actual error detail from Google/GitHub (e.g. redirect_uri_mismatch, bad_verification_code) instead of a generic message, aiding debugging of production OAuth failures.

Frontend performance: HTML web renderer

  • Switched all three frontend apps (editor, planner, portal) from CanvasKit to the HTML web renderer (--web-renderer html) in both GitHub Pages workflow and Docker builds.
    • Fixes webGLVersion is -1 CPU-only rendering fallback that caused extreme lag.
    • Fixes cross-origin image loading (avatars from Cloudflare R2) since HTML renderer uses native <img> tags that don't require CORS.
    • Reduces initial load size (no CanvasKit WASM download).

Gaussian blur dialog backdrop

  • All auth dialogs (login, register, verify, password reset) now show a gaussian-blurred background (BackdropFilter, sigma 6) with a tinted overlay instead of the default Material barrier.
  • Slide-in dialogs (note editor, note viewer) also use the blurred backdrop.

Login loading animation

  • Added CircularProgressIndicator to the login dialog during credential submission, providing clear visual feedback while the API call is in progress.

Splash screen: skeletal structural formulas

  • Redesigned the Krebs cycle splash animation to use 2D bond-line skeletal formulas instead of the previous small inline text notation.
    • Carbon backbones drawn as zigzag bond lines with proper single/double bond notation.
    • Functional groups (COOH, OH, CoA, S, O) rendered as labeled text at bond endpoints.
    • Active metabolite shown prominently in the center-right area with its name and full skeletal structure.
    • Scales responsively based on canvas width (bond length 28-48px, font size 10-16px).
    • Applied to all three frontend apps.

Note editor: file attachments

  • Added NoteAttachment model for per-note file uploads (stored under user_upload/user_{id}/notes/note_{note_id}/).
  • Backend upload (POST), list (GET), and delete (DELETE) endpoints at /api/v1/notes/<id>/attachments/.
  • 20 MB max upload size enforced in both Django settings (DATA_UPLOAD_MAX_MEMORY_SIZE, FILE_UPLOAD_MAX_MEMORY_SIZE) and the upload endpoint.
  • Frontend uploadNoteAttachment / listNoteAttachments / deleteNoteAttachment client methods using multipart upload.
  • Attach-file FAB (lower-right) in the note editor opens a file picker; uploaded files are embedded as ![name](url) (images) or [name](url) (other files) in the markdown body.

Environment and deployment (continued from 0.1.14)

  • Removed Cloudflare R2 variables from prepare_env.sh (Jenkins uses Docker volumes, not R2).
  • Updated docs/deployment/deploy.md Properties Content example with complete variable set, added image tag auto-generation note, added SMTP to required variable list.

Files Changed

  • backend/creators/api.py -- OAuth 400 responses include provider error details
  • .github/workflows/frontend-pages.yml -- Added --web-renderer html to all three build commands
  • frontend/editor_app/Dockerfile -- Added --web-renderer html
  • frontend/planner_app/Dockerfile -- Added --web-renderer html
  • frontend/portal_app/Dockerfile -- Added --web-renderer html
  • frontend/editor_app/lib/main.dart -- Added dart:ui import for BackdropFilter
  • frontend/editor_app/lib/core/helpers.dart -- _showSlideInDialog uses blur backdrop, new _showBlurDialog helper
  • frontend/editor_app/lib/components/auth_dialogs.dart -- Dialogs use _showBlurDialog, login shows CircularProgressIndicator
  • frontend/editor_app/lib/components/splash_screen.dart -- Redesigned with skeletal structural formulas
  • frontend/planner_app/lib/components/splash_screen.dart -- Same splash redesign
  • frontend/portal_app/lib/components/splash_screen.dart -- Same splash redesign
  • deployment/jenkins/scripts/prepare_env.sh -- Removed R2 vars
  • docs/deployment/deploy.md -- Updated Properties Content example
  • docs/versions/0.1.14.md -- Updated changelog for R2 removal
  • sample.env -- Updated image tags to v0.1.15.local
  • VERSION -- Bumped from 0.1.14 to 0.1.15
  • backend/notes/models.py -- Added NoteAttachment model and note_attachment_path
  • backend/notes/api.py -- Added NoteAttachmentApiView and NoteAttachmentDetailApiView
  • backend/notes/admin.py -- Registered NoteAttachment in admin
  • backend/notes/migrations/0015_noteattachment.py -- Migration for NoteAttachment table
  • backend/notechondria/api_urls.py -- Added attachment URL routes
  • backend/notechondria/settings.py -- Added 20 MB upload size limits
  • frontend/editor_app/lib/core/client.dart -- Added attachment client methods
  • frontend/editor_app/lib/modules/note_editor.dart -- Added attach-file FAB and upload flow
  • frontend/editor_app/lib/modules/learner.dart -- Wired onUploadAttachment callback
  • frontend/editor_app/lib/app_shell.dart -- Added _uploadNoteAttachment and passed to editor/learner
  • docs/versions/0.1.15.md -- This version document