# 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."
```