# Frontend Modularization Implementation Plan > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. **Goal:** Split the monolithic 1,436-line `app.js` into 9 ES modules with JSDoc types for better maintainability and agent visibility. **Architecture:** ES modules with ` ``` to: ```html ``` **Step 3: Delete app.js** ```bash rm unredact/static/app.js ``` --- ### Task 11: Verify and commit **Step 1: Start the application** ```bash make run ``` **Step 2: Manual smoke test** Open http://localhost:8000 in a browser. Verify: - [ ] Page loads without console errors - [ ] PDF upload works (drag-drop and click) - [ ] Page navigation works - [ ] Redaction list populates - [ ] Clicking a redaction activates it (pans to it, starts analysis) - [ ] Popover opens with font/size/pos/gap controls - [ ] Font/size/position/gap adjustments update the canvas - [ ] Text editing works (left/right inputs) - [ ] Solver starts, streams results, can be stopped - [ ] Clicking a result shows preview on canvas - [ ] Accept marks redaction as solved - [ ] Double-click spot detection works - [ ] Ctrl+drag adjusts offset, Shift+drag adjusts gap width - [ ] Zoom (wheel, buttons, fit) works - [ ] Touch pinch-zoom works (if testable) - [ ] Toast notifications appear **Step 3: Commit** ```bash git add unredact/static/types.js unredact/static/state.js unredact/static/dom.js \ unredact/static/canvas.js unredact/static/viewport.js unredact/static/associates.js \ unredact/static/popover.js unredact/static/solver.js unredact/static/main.js \ unredact/static/jsconfig.json unredact/static/index.html git rm unredact/static/app.js git commit -m "feat: split app.js into ES modules with JSDoc types Reorganize the monolithic 1,436-line frontend into 9 focused modules: types, state, dom, canvas, viewport, associates, popover, solver, main. No build step — browsers load ES modules natively. JSDoc @typedef annotations provide type safety via @ts-check + jsconfig.json." ```