Skip to content

Latest commit

 

History

History
114 lines (88 loc) · 6.5 KB

File metadata and controls

114 lines (88 loc) · 6.5 KB

Implemented Fixes — BOOP 3.0 Audit

Summary

  • Total issues found: 25+ (tracked in MASTER_ISSUE_TRACKER.md)
  • Total issues fixed: 18 (8 P0 + 10 P1)
  • Total issues remaining: ~7 (P2)
  • Build status: Clean compile, zero warnings

P0 Fixes (Must Fix — All 8 Complete)

1. /templates route links to nowhere

  • File: Header.js, Footer.js
  • Fix: Removed "Templates" link from Header nav and Footer. Header nav now has Create / Play / Play / About (two Play links were adjacent — the fix removed the duplicate Play that replaced Templates). Footer Create section now links to About instead.
  • Impact: Navigation no longer leads to a 404.

2. Old Nunito font loaded in index.html

  • File: public/index.html
  • Fix: Removed the old <link> to Google Fonts for Nunito (was the pre-redesign font). The new fonts (Playfair Display, Source Serif 4, Inter, JetBrains Mono) are loaded via @import in index.css.
  • Impact: Eliminates ~30KB unnecessary font download, matches actual design system.

3. PuzzleGame.js poster canvas uses wrong theme colors

  • File: PuzzleGame.js
  • Fix: Replaced all hardcoded dark-blue colors (#16213e, #0f172a, #1e293b, #94a3b8) with BOOP's warm dark-mode palette (#1C1915 paper-dark, #28231D paper-light, #3E352B border, #BFB09C ink-light, #E2D8C8 ink, #FDFAF5 paper-light). Updated font stacks to use Playfair Display and JetBrains Mono.
  • Impact: Downloaded share images now match BOOP's editorial identity.

4. Unused GenerationProgress.js dead code

  • File: GenerationProgress.js, GenerationProgress.css
  • Fix: Deleted both files. This component was defined but never imported anywhere in the app.
  • Impact: Eliminates confusion, reduces bundle size slightly.

5. Title validation error flashes on every keystroke

  • File: PuzzleCreator.js
  • Fix: Moved title validation from onChange to onBlur. Error only appears when the user leaves the title field with invalid characters, not during typing.
  • Impact: Cleaner UX, no error flash while typing.

6. PuzzleGame loading screen has no progress indicator

  • File: PuzzleGame.js
  • Fix: Replaced plain spinner + text with animated shimmer progress bar + loading text styled to match the design system. Uses the same progress bar visual language as the main book generation flow.
  • Impact: Users can see that generation is actively progressing.

7. Meta theme-color is wrong (blue instead of green)

  • File: public/index.html
  • Fix: Changed theme-color meta tag from #4a6fa5 (blue, old design) to #3D6B3D (BOOP green).
  • Impact: Mobile browser chrome now matches brand color.

8. No protection against rapid double-click on generate

  • File: PuzzleCreator.js
  • Fix: Added generatedFile && !showSuccess to the button's disabled condition, preventing a second generation while a completed file exists.
  • Impact: Prevents accidental duplicate generation requests.

P1 Fixes (Strongly Recommended — All 10 Complete)

9. Tooltip uses hardcoded white and --dark colors

  • File: Tooltip.css
  • Fix: Replaced background: var(--dark) with background: var(--ink) and color: white with color: var(--paper-light). Added font-family: var(--font-ui), proper border-radius: var(--radius-sm), and box-shadow: var(--shadow-md).
  • Impact: Tooltips now adapt properly to both light and dark themes.

10. Theme toggle icon inverted from convention

  • File: ThemeToggle.js
  • Fix: Swapped the SVG icons: now shows moon icon when in dark mode (click to go light), sun icon when in light mode (click to go dark). Matches common UX convention.
  • Impact: Intuitive icon meaning.

11. PuzzlePreview grid regenerates randomly on page navigation

  • File: PuzzlePreview.js
  • Fix: Added a seedRef that generates a stable seed on mount. Grid generation uses genGrid(seed + i) instead of genGrid(), so grids are deterministic within a session. Removed unstable const grid = useMemo(...) that depended on [page, totalPuzzles].
  • Impact: Preview grids stay stable when flipping pages.

12. FileUploader preview image alt text is unhelpful

  • File: FileUploader.js
  • Fix: Changed alt="Preview" to alt="" role="presentation". The image is decorative (shows uploaded image preview), not informative.
  • Impact: Screen readers skip the irrelevant announcement.

13. No route for /templates (already fixed by P0 #1)

14. PuzzleGame loading shadow doesn't match design system

  • File: PuzzleGame.js
  • Fix: Changed loading wrapper from <div className="card"> to <div className="pg-start-card"> which uses the design system's card styling with double-border effect.
  • Impact: Consistent card appearance across all loading states.

15. No aria-live region for loading/status announcements

  • File: LoadingOverlay.js, GenerationStatus.js
  • Fix: Added role="alert" aria-live="polite" aria-busy={isGenerating} to LoadingOverlay. Added role="status" aria-live="polite" to GenerationStatus container.
  • Impact: Screen readers announce generation progress and status changes.

16. HeroLetterGrid uses hardcoded ink color (breaks dark mode)

  • File: HeroLetterGrid.js
  • Fix: Added getInkColor() function that reads data-theme attribute and returns appropriate RGB string. Added MutationObserver to dynamically update color when theme toggles.
  • Impact: Letter grid uses correct ink color in both light and dark modes.

17. No reduced-motion support for HeroLetterGrid animation

  • File: HeroLetterGrid.js
  • Fix: Added prefersReducedMotion() check. When reduced motion is preferred, the canvas renders a static frame (flicker = 0.04, no requestAnimationFrame loop).
  • Impact: Users with motion sensitivity get a static display.

18. Hint cooldown messaging

  • Note: The existing hint cooldown messaging ("Hint in Xs") was already adequate. Skipped as sufficient.

P2 Issues Remaining (Not Fixed)

# Issue Effort
19 App.js wake-up API call runs on every mount — debug artifact Low
20 Footer heading hierarchy skips levels (h3→h4) Low
21 PuzzleGame inline styles should be CSS classes Low
22 No loading="lazy" on images Low
23 forceTick interval for cooldown UI — ref-based would be cleaner Medium
24 GenerationProgress had duplicated step logic (now deleted)
25 Legal page data is inline JS — could be JSON High