# Focus Desk A small, polished task manager built with vanilla HTML, CSS and JavaScript. No frameworks, no build step, no network requests — everything runs from three local files. ## Run ```bash cd python3 -m http.server 8000 ``` Then open and stop the server with `Ctrl+C` when done. Files: `index.html` (markup), `style.css` (styling), `app.js` (logic). Tasks are stored in `localStorage` under the key `focusdesk.tasks.v1`. The app starts empty and never seeds demo data. ## Features - **Create** — title is required (whitespace-only is rejected with an inline error); optional notes, priority (low/medium/high, default medium) and due date. - **Edit** — inline editing of title, notes, priority and due date. `Esc` or *Cancel* discards changes; blank titles are refused. - **Complete / delete** — the checkbox toggles completion both ways; delete asks for confirmation. - **Search & filter** — case-insensitive substring search over titles *and* notes, combined with status (all/active/completed) and priority filters. Distinct empty states for "no tasks yet" vs. "nothing matches". - **Counts** — total / active / completed in the header, each element containing only its number. - **Ordering** — active tasks first, then by priority (high → low), then by nearest due date. Overdue dates are highlighted. - **Resilience** — corrupt or non-array JSON in `localStorage` is discarded instead of crashing; individual malformed records are repaired (bad priority → medium) or dropped. - **Safety** — all task text is inserted with `textContent`, so HTML in a title or note can never execute. - **Accessibility** — semantic `