# Session 0003: Backup v8-v9 Delete, Multi-Select, URL Routing **Date:** 2026-02-22 **Status:** Completed **Origin:** MDF Webseiten session 0031 --- ## Work Done ### v8: Delete + Granular Restore - [x] `DELETE /api/backups/{project}/{env}/{name}` endpoint with path traversal validation - [x] Restore `mode` query param (full/db/wp) → passes `--db-only`/`--wp-only` to ops CLI - [x] Delete button on every backup row in Level 2 drill-down - [x] Restore Mode radio buttons (Full / Database only / WP-Content only) in restore modal ### v9: Multi-Select, Upload, Source Selector, URL Routing - [x] URL hash routing — `#/backups/mdf/dev`, `#/dashboard/table`, `#/system` — browser refresh preserves location - [x] Multi-select delete — checkboxes per row, select-all header, blue selection bar, bulk delete - [x] Upload to offsite — purple "Upload" button on local-only backups - [x] Restore source selector — Local/Offsite radio buttons when backup exists in both locations ## Key Decisions / Learnings - Path traversal validation is required on delete endpoint (user-supplied filename in URL) - Static files are volume-mounted (not COPY'd) — frontend changes don't require container rebuild - URL hash routing lets users bookmark specific dashboard views and survive page refresh - Granular restore (db-only / wp-only) avoids full restore when only one component needs recovery ## Pending - Selection bar spacing CSS gap not taking effect (possible browser cache issue) --- **Tags:** #Session #OpsDashboard #Backups