diff --git a/.gitignore b/.gitignore
index 6001293..58115f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,6 +38,7 @@ screen_locker/early_bird_pending.json
# Web status UI (web/) build and tooling output.
web/node_modules/
web/dist/
+web/.astro/
web/coverage/
web/node_modules
web/dist
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index f98bb5f..ec77910 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -324,14 +324,14 @@ repos:
name: eslint (status web UI)
entry: pnpm --dir web run lint
language: system
- files: '^web/(src/.*\.(ts|tsx)|eslint\.config\.js|package\.json)$'
+ files: '^web/(src/.*\.(ts|astro)|eslint\.config\.js|package\.json)$'
pass_filenames: false
require_serial: true
- id: web-typecheck
- name: tsc --build (status web UI)
+ name: astro check + build (status web UI)
entry: pnpm --dir web run build
language: system
- files: '^web/(src/.*\.(ts|tsx)|tsconfig.*\.json|vite\.config\.ts)$'
+ files: '^web/(src/.*\.(ts|astro)|tsconfig\.json|astro\.config\.mjs|vitest\.config\.ts)$'
pass_filenames: false
require_serial: true
- id: web-coverage
diff --git a/TODO-astro-migration.md b/TODO-astro-migration.md
deleted file mode 100644
index ef65afa..0000000
--- a/TODO-astro-migration.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# Migrate screen-locker/web to Astro (no React)
-
-## what
-The status page in `web/` (now/health/why cards, polling `/api/status`)
-becomes one Astro 7 static page. Its `
+