Notechondria
Version: 0.1.12 Build Date: 2026-04-08T00:00
What's Changed
Cloudflare R2 static/media storage
-
Rewired backend to use Cloudflare R2 (S3-compatible) for static and media files when
CLOUDFLARE_R2_BUCKET_NAMEis set. Falls back to local filesystem + nginx when unset (Docker Compose). -
Added
django-storages[s3]andboto3torequirements.txtandrequirements-render.txt. -
Added conditional
STORAGESconfiguration insettings.pywith credential validation. -
Added Cloudflare R2 environment variables to
sample.render.env. -
Added "Cloudflare R2 storage" setup section to
docs/deployment/render_free_tier.md.
Splash animation improvements
- Slowed Krebs cycle animation from 4s to 8s duration across all three apps.
- Removed "Citric Acid Cycle" center title label.
-
Replaced English chemical names with structural formula representations drawn via Canvas (e.g.
HOOC-CH2-C(OH)-CH2-COOHfor Citrate, double-bond notation for Fumarate,S-CoAgroups for Succinyl-CoA). -
Changed Acetyl-CoA label to structural formula
CH3-CO-S-CoA.
OAuth callback redirect
-
Added
oauth_callbackview inapi_views.pythat handles GET redirects from Google/GitHub OAuth providers. - On error: renders a styled static HTML page with failure icon and message.
-
On success: redirects to the frontend SPA with
codeandstatequery parameters. -
Added
/auth/google/callbackand/auth/github/callbackURL routes inurls.py.
OAuth bind feedback
-
Added SnackBar feedback in all three app shells (
editor,planner,portal) for social account bind success/failure after OAuth callback.
Lazy loading for note list
- Replaced "Load more" button in the learner note list with scroll-based lazy loading.
-
Added
ScrollControllerwith listener that triggers load when scrolled within 200px of the bottom. -
Shows
CircularProgressIndicatorat list bottom while loading more notes.
Files Changed
backend/notechondria/settings.py-- Conditional Cloudflare R2 storage configurationbackend/notechondria/api_views.py-- OAuth callback view, error handler viewsbackend/notechondria/urls.py-- OAuth callback URL routesbackend/requirements.txt-- Added django-storages[s3], boto3backend/requirements-render.txt-- Added django-storages[s3], boto3frontend/editor_app/lib/components/splash_screen.dart-- Structural formulas, slower animation, removed titlefrontend/planner_app/lib/components/splash_screen.dart-- Same splash changesfrontend/portal_app/lib/components/splash_screen.dart-- Same splash changesfrontend/editor_app/lib/app_shell.dart-- OAuth bind SnackBar feedbackfrontend/planner_app/lib/app_shell.dart-- OAuth bind SnackBar feedbackfrontend/portal_app/lib/app_shell.dart-- OAuth bind SnackBar feedbackfrontend/editor_app/lib/modules/learner.dart-- Scroll-based lazy loading replacing load-more buttondocs/deployment/render_free_tier.md-- Cloudflare R2 setup instructionssample.render.env-- Cloudflare R2 environment variablessample.env-- Updated image tags to v0.1.12.localVERSION-- Bumped from 0.1.11 to 0.1.12docs/versions/0.1.12.md-- This version documentdocs/TASKS.md-- Marked completed items