Files
OpenNoodl/dev-docs/tasks/phase-2-react-migration/TASK-006-preview-font-loading/CHANGELOG.md

4.2 KiB

TASK-006 Changelog

Overview

This file tracks all changes made during TASK-006: Fix Custom Font Loading in Editor Preview.

Problem: Custom fonts don't load in editor preview due to dev server not serving project directory assets.

Solution: (To be documented as implementation progresses)


Changes

[December 15, 2024] - Session 1 - Cline AI Assistant

Summary: Fixed custom font loading in editor preview by adding missing MIME types to web server configuration. The issue was simpler than expected - the server was already serving project files, but was missing MIME type mappings for modern font formats.

Files Modified:

  • packages/noodl-editor/src/main/src/web-server.js - Added MIME type mappings for all font formats and fixed audio fallthrough bug
    • Added .otffont/otf
    • Added .wofffont/woff
    • Added .woff2font/woff2
    • Fixed .wav case missing break; statement (was falling through to .mp4)

Testing Notes:

  • New projects: Fonts load correctly
  • Legacy projects: Fonts still failing (needs investigation)

[December 15, 2024] - Session 2 - Cline AI Assistant

Summary: Added font fallback mechanism to handle legacy projects that may store font paths differently. The issue was that legacy projects might store fontFamily as just the filename (e.g., Inter-Regular.ttf) while new projects store the full relative path (e.g., fonts/Inter-Regular.ttf).

Files Modified:

  • packages/noodl-editor/src/main/src/web-server.js - Added font fallback path resolution
    • When a font file isn't found at the requested path, the server now searches common locations:
      1. /fonts{originalPath} - prepend fonts folder
      2. /fonts/{filename} - fonts folder + just filename
      3. /{filename} - project root level
      4. /assets/fonts/{filename} - assets/fonts folder
    • Added console logging for fallback resolution debugging
    • Fixed ESLint unused variable error in server.on('listening') callback

Technical Details:

  • Font path resolution flow:
    1. First tries exact path: projectDirectory + requestPath
    2. If not found and it's a font file (.ttf, .otf, .woff, .woff2), tries fallback locations
    3. Logs successful fallback resolutions to console for debugging
    4. Returns 404 only if all fallback paths fail

Breaking Changes:

  • None - this enhancement only adds fallback behavior when files aren't found

Testing Notes:

  • Requires rebuild and restart of editor
  • Check console for "Font fallback:" messages to verify mechanism is working
  • Test with legacy projects that have fonts in various locations

[Date] - [Developer Name]

Summary: Brief description of what was accomplished in this session

Files Modified:

  • path/to/file.ts - Description of changes and reasoning
  • path/to/file2.tsx - Description of changes and reasoning

Files Created:

  • path/to/newfile.ts - Purpose and description

Files Deleted:

  • path/to/oldfile.ts - Reason for removal

Configuration Changes:

  • webpack.config.js: Added middleware for project asset serving
  • MIME types configured for font formats

Breaking Changes:

  • None expected (dev server only)

Testing Notes:

  • Manual testing performed: [list scenarios]
  • Edge cases discovered: [list any issues]
  • Performance impact: [measurements if relevant]

Known Issues:

  • [Any remaining issues to address]

Next Steps:

  • [What needs to be done next]

Implementation Notes

(Document key decisions and discoveries here as work progresses)

Architecture Decision

  • Chose Option [A/B/C] because...
  • Dev server implementation details...

Security Considerations

  • Path sanitization approach: ...
  • Directory traversal prevention: ...

Performance Impact

  • Asset serving overhead: ...
  • Caching strategy: ...

Testing Summary

(To be completed after implementation)

Tests Passed

  • Custom fonts load in preview
  • Multiple font formats work
  • Project switching works correctly
  • No 404 errors in console
  • Security tests pass

Tests Failed

  • (Document any failures and solutions)

Final Status

Status: 📋 Not Started

Outcome: (To be documented upon completion)

Follow-up Tasks: (List any follow-up work needed)