diff --git a/src-frontend/src/App.jsx b/src-frontend/src/App.jsx
index 5dce8c15..1ecc9354 100644
--- a/src-frontend/src/App.jsx
+++ b/src-frontend/src/App.jsx
@@ -8,7 +8,7 @@ import { defaultPass, defaultGcodeConfig, PAPER_SIZES } from './store.js'
import * as tauri from './hooks/useTauri.js'
import { useFps } from './hooks/useFps.js'
-const VIEW_MODES = ['source', 'detection', 'hulls', 'contours', 'fill', 'gcode']
+const VIEW_MODES = ['source', 'detection', 'contours', 'fill', 'gcode']
export default function App() {
const [image, setImage] = useState(null)
@@ -86,7 +86,6 @@ export default function App() {
case 'detection':
setDisplayB64(passes[activePass]?.vizB64 ?? null)
break
- case 'hulls':
case 'contours':
// Don't race getPassViz against generateFill — both need the AppState mutex.
// filling=true means fill hasn't finished yet; the effect will re-run when it does.
@@ -372,7 +371,7 @@ export default function App() {
{/* Top bar — accent colors match the section dots in the left panel */}