From 468f142a05935d502a0cb7fe9e81c22e65d4cc42 Mon Sep 17 00:00:00 2001 From: Domagoj Zecevic Date: Tue, 13 Oct 2026 11:08:30 +0200 Subject: [PATCH] feat(web): add Home Lanundry home-screen icon and web manifest --- .ai/HANDOFF.md | 27 ++++++ .ai/PLAN.md | 51 +++++++---- .ai/REVIEW.md | 14 +++ .ai/TASKS.md | 1 + README.md | 24 +++++ ROADMAP.md | 20 +++++ internal/web/handler.go | 39 +++++++- internal/web/handler_test.go | 103 +++++++++++++++++++++- internal/web/static/apple-touch-icon.png | Bin 0 -> 11761 bytes internal/web/static/icon-192.png | Bin 0 -> 12683 bytes internal/web/static/icon-512.png | Bin 0 -> 39374 bytes internal/web/static/icon-maskable-512.png | Bin 0 -> 35262 bytes internal/web/static/icon.svg | 33 +++++++ internal/web/static/index.html | 4 + internal/web/static/manifest.webmanifest | 29 ++++++ 15 files changed, 327 insertions(+), 18 deletions(-) create mode 100644 internal/web/static/apple-touch-icon.png create mode 100644 internal/web/static/icon-192.png create mode 100644 internal/web/static/icon-512.png create mode 100644 internal/web/static/icon-maskable-512.png create mode 100644 internal/web/static/icon.svg create mode 100644 internal/web/static/manifest.webmanifest diff --git a/.ai/HANDOFF.md b/.ai/HANDOFF.md index 7d33b90..d9a9b3e 100644 --- a/.ai/HANDOFF.md +++ b/.ai/HANDOFF.md @@ -114,3 +114,30 @@ Append-only role handoff log. Each role adds one entry when its step is complete - Status: done. Commit message read from the T-005 next_task entry. - All five board tasks are done; T-005 is the only task completed in this invocation and receives its own Conventional Commit. + +### T-006 — plan — 2026-10-13T00:00:00Z + +| Field | Value | +|-------|-------| +| Agent | claude | +| Summary | Planned Android home-screen support: cartoon washing-machine icon set, web manifest "Home Lanundry", embedded routes, head tags, README section and tests; no service worker or TLS | +| Files Changed | .ai/PLAN.md, .ai/TASKS.md, .ai/HANDOFF.md, ROADMAP.md | +| Next Role | implement | + +### T-006 — next_task (dev/all_task) — 2026-10-13T09:08:01Z + +| Field | Value | +|-------|-------| +| Agent | codex | +| Summary | Added Home Lanundry home-screen manifest, SVG/PNG washing-machine icons, embedded routes, page head tags, tests first, and Android shortcut documentation | +| Validation | fmt/vet/test and web race tests PASS; Docker build/runtime and 360px Chrome manifest/icon smoke PASS; review PASS; E2E NOT_CONFIGURED | +| Commit | feat(web): add Home Lanundry home-screen icon and web manifest | +| Next Role | dev commit | + +- Includes the existing T-006 roadmap and planning artifacts. No new dependencies; SVG is the PNG source of truth. +- PR limitation: `aide pr --dry-run` refuses main; repository instructions require staying on the current branch. + +### T-006 — commit_task (all_task) — 2026-10-13T09:09:05Z + +- Status: done. Commit message read from the T-006 next_task entry. +- All six board tasks are done; T-006 is the only task completed in this invocation and receives its own Conventional Commit. diff --git a/.ai/PLAN.md b/.ai/PLAN.md index 5b6fcae..65f4594 100644 --- a/.ai/PLAN.md +++ b/.ai/PLAN.md @@ -2,25 +2,44 @@ Status: **ready_for_implement** -Goal: implement `ROADMAP.md` Priority 3 — show the "Laundry done" status text in green (`#1a7f37`). T-001..T-004 are done and unchanged in behavior. +Goal: implement `ROADMAP.md` Priority 4 — make the page addable to an Android home screen as "Home Lanundry" with a cartoon washing-machine icon. T-001..T-005 are done and unchanged in behavior. ## Scope -- CSS-only change in the page plus docs and a test. No backend, JSON contract, status rule or message text changes. -- Out of scope: dark mode, other state colors, layout changes. - -## T-005 — Green "Laundry done" text - -Background: `internal/web/static/index.html` sets the `#status` element's class to `data.state`, so the done state gets class `done` (currently unstyled, i.e. default `#111`). - -### Files to change -1. `internal/web/handler_test.go` (tests first): in `TestPageAndRouting`, add `.done { color: #1a7f37; }` (match the exact rule text used in the page) to the list of expected page substrings. Run `go test ./internal/web` and confirm it fails before the page change. -2. `internal/web/static/index.html`: add `.done { color: #1a7f37; }` next to the existing `.running` / `.waiting` rules (around line 12). -3. `README.md`: in the status table (line ~26) change the "Laundry done" color from "Default text color" to "Green". Check the rest of the README for any other mention of the done color and keep it consistent. -4. `ROADMAP.md`: already updated by the planner (Priority 1 table row and Priority 3); no further edit needed. +- New static assets (manifest and icons), embedded routes, three `` tags, tests, README. +- Out of scope: service worker, offline mode, TLS, install prompt UI, any change to status rule, JSON contract, SSE, page layout or the ``. +- Transport stays plain HTTP, so Chrome offers "Add to Home screen" (shortcut), not "Install app". This is accepted; document it. + +## T-006 — Home screen icon and web manifest + +### Design decisions +- Assets live in `internal/web/static/` and are embedded with `go:embed` (an `embed.FS` over a fixed file list, or individual `[]byte` vars). No new dependencies. +- Routes (all `GET`, exact paths, registered on the existing mux): + - `/manifest.webmanifest` — `Content-Type: application/manifest+json` + - `/icons/icon.svg` — `image/svg+xml` + - `/icons/icon-192.png`, `/icons/icon-512.png`, `/icons/icon-maskable-512.png` — `image/png` + - `/apple-touch-icon.png` (180x180) — `image/png` +- Static assets use `Cache-Control: no-cache` (revalidate); the existing `no-store` on page/API stays. +- Manifest content: `name` and `short_name` "Home Lanundry", `start_url` `/`, `scope` `/`, `display` `standalone`, `theme_color` and `background_color` `#ffffff`, `icons` = 192 and 512 (`purpose: any`) plus maskable 512 (`purpose: maskable`). +- Icon art: flat cartoon front-loading washing machine — light-blue rounded-square background, white/pastel body, round porthole with blue water and a few bubbles, two or three control knobs and a small display on top. For the maskable variant, extend the background full-bleed and keep all artwork inside the central 80% safe zone. + +### Files to change (tests first) +1. `internal/web/handler_test.go` (write first, confirm failing): + - Table test for each new route: 200, expected `Content-Type`, non-empty body; PNG routes start with the PNG signature; `POST` returns 405. + - Manifest test: decode JSON; assert `name`/`short_name` == "Home Lanundry", `display` == "standalone", `start_url` == "/", and that every `icons[].src` resolves to a route that returns 200 and has the declared `sizes` (decode PNG config) and `type`; one icon has `purpose` "maskable". + - Extend `TestPageAndRouting` expected substrings with `rel="manifest"`, `name="theme-color"`, `rel="apple-touch-icon"`. +2. `internal/web/static/icon.svg` (new): source art, 512x512 viewBox. +3. `internal/web/static/icon-192.png`, `icon-512.png`, `icon-maskable-512.png`, `apple-touch-icon.png` (new): rendered from the SVG (full-bleed variant for maskable). Suggested tools: headless `google-chrome --screenshot` or Pillow; keep the generation script out of the repo, or add it as `internal/web/static/README`-free `scripts/` only if small — implementer's choice, but the committed SVG must be the source of truth and PNGs must visually match it. Visually check the result (view the PNGs, including a circle-crop check of the maskable one). +4. `internal/web/static/manifest.webmanifest` (new): content as above. +5. `internal/web/handler.go`: embed the new assets, register the routes with correct content types and cache header, update the package/handler doc comment to mention the manifest and icons. +6. `internal/web/static/index.html`: add to `<head>`: `<link rel="manifest" href="/manifest.webmanifest">`, `<meta name="theme-color" content="#ffffff">`, `<link rel="apple-touch-icon" href="/apple-touch-icon.png">`, `<link rel="icon" href="/icons/icon.svg" type="image/svg+xml">`. Do not change title, layout or script. +7. `Dockerfile`: no change expected (it already copies `internal`); verify the build still embeds the new files (`.dockerignore` must not exclude `*.png`/`*.svg`/`*.webmanifest` — check and fix if it does). +8. `README.md`: new "Add to Android home screen" subsection (before "Limitations"): open the page in Chrome on Android, menu → "Add to Home screen"/"Install app" if offered, name "Home Lanundry". State the plain-HTTP limitation: without HTTPS Chrome only offers a home-screen shortcut with the icon, not a full install, and there is no offline mode. Add the new routes (`/manifest.webmanifest`, `/icons/*`, `/apple-touch-icon.png`) to the endpoint documentation. Do not touch the AI Workflow section. +9. `ROADMAP.md`: already updated by the planner; no further edit. ### Validation -- `go fmt ./...`, `go vet ./...`, `go test ./...`. -- Optional smoke: run the service, force a done state, and confirm the text renders green on a 360px viewport. +- `go fmt ./...`, `go vet ./...`, `go test ./...` (plus `-race` on `./internal/web`). +- Smoke: run the service, `curl -sI` each new route for status and content type; open the page in Chrome DevTools (Application → Manifest) at a 360px viewport and confirm no manifest or icon errors and a correct icon preview. +- Docker build if available (confirm assets are embedded). ### Commit message -`feat(web): show "Laundry done" status text in green` +`feat(web): add Home Lanundry home-screen icon and web manifest` diff --git a/.ai/REVIEW.md b/.ai/REVIEW.md index b67deff..152a78d 100644 --- a/.ai/REVIEW.md +++ b/.ai/REVIEW.md @@ -66,3 +66,17 @@ - Environment retry during implementation: sandbox blocked the Go build-cache write; approved rerun reached the expected failing test. No review retries or weakened assertions. - Workflow limitation: `aide pr --dry-run` refuses the current `main` branch. Kept the current branch as instructed; no PR created. - Verdict: PASS, approved for the per-task commit under `all_task`. + +## Task: T-006 + +### Review Round 1 — 2026-10-13T09:08:01Z + +- Findings: no required fixes or semantic concerns. The complete staged/unstaged diff matches the manifest, exact asset routes, head tags, icon design, and documentation plan. Status logic, API JSON, SSE, page title/layout/script, and the README AI Workflow section are unchanged. +- Tests first: `go test ./internal/web` failed on all six missing routes, missing page tags, and missing manifest before implementation; all assertions passed after implementation and were retained. +- Validation: `go fmt ./...`, `go vet ./...`, `go test ./...`, `go test -race ./internal/web`, and staged/unstaged diff checks PASS. +- Assets: PNGs rendered from the committed SVG using headless Chrome; inspected all PNGs plus a circular mask preview. Pixel checks confirm the maskable icon is fully opaque and all foreground artwork is inside the central safe circle. All declared PNG dimensions decode correctly. +- Packaging/browser smoke: Docker build and temporary `node /tmp/mqtt-washingmachine-t006-smoke.mjs` PASS. The scratch image serves byte-identical embedded assets; curl HEAD, GET, content types, cache headers, and POST 405 pass for all six routes. Chrome at 360px reports no DevTools manifest errors and decodes every icon at its declared size. Page, API, initial SSE event, and clean shutdown pass. Screenshot: `/tmp/mqtt-washingmachine-t006-mobile.png`. +- E2E: NOT_CONFIGURED as a repository command. Temporary Docker/Chrome smoke passed; physical Android home-screen installation was not exercised. +- Environment retries: Docker build metadata and the Git index were read-only in the sandbox; approved reruns passed. No review validation retries or weakened assertions. +- Workflow limitation: `aide pr --dry-run` refuses the current `main` branch. Kept the current branch as instructed; no PR created. +- Verdict: PASS, approved for the per-task commit under `all_task`. diff --git a/.ai/TASKS.md b/.ai/TASKS.md index a28ce7b..508e0d8 100644 --- a/.ai/TASKS.md +++ b/.ai/TASKS.md @@ -25,3 +25,4 @@ Command expectations: | T-003 | Dockerfile, docker-compose example, .dockerignore, README documentation | done | Image builds (or noted if Docker unavailable); README documents rules, env vars, deployment, limitations; existing AI Workflow section untouched | 2026-10-12T11:22:18Z: fmt/vet/test PASS; Docker build/runtime PASS; README workflow preserved | none | | T-004 | SSE push (`GET /api/events`) so the page refreshes on each valid MQTT message: sensor Hub, `Sampler.OnReceive`, SSE handler with keep-alive and write-deadline override, page EventSource with 60 s polling fallback, README/comment updates, tests first | done | Valid message -> `update` event to all clients; invalid -> none; immediate `update` on connect; keep-alive sent; stream outlives 10 s WriteTimeout; slow subscriber never blocks Receive; disconnects/shutdown clean up; `/api/status` unchanged; README documents endpoint and updated refresh behavior; fmt/vet/test (+race) pass | 2026-10-12T13:18:18Z: fmt/vet/test/race PASS; MQTT/SSE/Chrome smoke PASS; review PASS | none | | T-005 | Show "Laundry done" status text in green (`.done { color: #1a7f37 }` in index.html), page test first, README status table update | done | Page contains the `.done` green rule (test fails before, passes after); text and status rule unchanged; README table says Green; fmt/vet/test pass | 2026-10-12T13:24:25Z: tests first, fmt/vet/test PASS; review PASS; E2E NOT_CONFIGURED | none | +| T-006 | Home screen support: cartoon washing-machine icon (SVG + 192/512/maskable/apple-touch PNGs), `manifest.webmanifest` ("Home Lanundry", standalone), embedded routes with correct content types, head tags in index.html, README section, tests first | done | New routes return 200 with correct content types and valid PNG sizes; manifest JSON has name/short_name "Home Lanundry", display standalone, start_url /, 192/512 and maskable icons that all resolve; page has manifest/theme-color/apple-touch-icon tags; page layout, title, status rule, JSON and SSE unchanged; README documents the home-screen steps and plain-HTTP limitation; fmt/vet/test pass | 2026-10-13T09:08:01Z: tests first; fmt/vet/test/web-race PASS; Docker/Chrome/icon smoke PASS; review PASS | none | diff --git a/README.md b/README.md index 4941487..1e6443f 100644 --- a/README.md +++ b/README.md @@ -169,6 +169,30 @@ idle connections longer than the 25-second keep-alive interval. To inspect events manually, run `curl -N http://localhost:8080/api/events` while publishing valid and invalid payloads to the test topic. +### Add to Android home screen + +1. Open `http://<your-server>:8080/` in Chrome on your Android phone. +2. Open Chrome's menu and choose **Add to Home screen** (or **Install app** if + offered). +3. Use the name **Home Lanundry** and confirm. The shortcut uses the cartoon + washing-machine icon. + +On plain HTTP on the home LAN, Chrome offers a home-screen shortcut rather than +a full app installation, which requires HTTPS. The manifest requests a standalone +window where supported; a shortcut may open in a regular browser tab. There is no +offline mode: the phone must be able to reach the running service. + +The binary embeds these home-screen assets; no extra files need to be deployed. +All routes below accept `GET` and send `Cache-Control: no-cache` for revalidation: + +| Route | Content type | Purpose | +|-------|--------------|---------| +| `/manifest.webmanifest` | `application/manifest+json` | Home Lanundry name, launch settings, and icon references | +| `/icons/icon.svg` | `image/svg+xml` | SVG source and browser icon | +| `/icons/icon-192.png`, `/icons/icon-512.png` | `image/png` | 192×192 and 512×512 home-screen icons | +| `/icons/icon-maskable-512.png` | `image/png` | 512×512 full-bleed icon with artwork inside the maskable safe zone | +| `/apple-touch-icon.png` | `image/png` | 180×180 touch icon | + ### Limitations - In-memory state only: a restart clears the window. With the default interval, diff --git a/ROADMAP.md b/ROADMAP.md index 964342e..5c2b158 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -69,3 +69,23 @@ Objective: show the "Laundry done" status text in green. ### Open - None. + +## Priority 4 + +Objective: let the page be added to an Android phone's home screen with a cartoon washing-machine icon, named "Home Lanundry". + +### Decided + +- Mechanism: web app manifest (`manifest.webmanifest`) plus icons, served by the Go backend and embedded in the binary like `index.html`. +- Name: "Home Lanundry" (both `name` and `short_name`). +- Icon: cartoon front-loading washing machine (round porthole with blue water and bubbles, a few control knobs, flat pastel style) on a light-blue rounded background. Delivered as SVG source plus PNG at 192x192 and 512x512, and a maskable variant with the drawing inside the safe zone. +- Manifest: `display: standalone`, white `theme_color` and `background_color`, `start_url` `/`. +- Page: add `<link rel="manifest">`, `theme-color` meta and `apple-touch-icon`. +- Transport: plain HTTP on the home LAN, no TLS (decided out of scope). Chrome on Android therefore offers "Add to Home screen" (a shortcut with the icon), not a full "Install app". This is accepted. +- No service worker and no offline support. +- Status rule, JSON contract, SSE behavior and page layout stay unchanged. +- Docs: README gets a short section on adding the page to the home screen and the plain-HTTP limitation; handler tests cover the new routes and content types. + +### Open + +- None. diff --git a/internal/web/handler.go b/internal/web/handler.go index 2b943e4..37f16e2 100644 --- a/internal/web/handler.go +++ b/internal/web/handler.go @@ -1,4 +1,5 @@ -// Package web serves the laundry status API and embedded phone-first page. +// Package web serves the laundry status API, phone-first page, and embedded +// home-screen manifest and icons. package web import ( @@ -15,6 +16,24 @@ import ( //go:embed static/index.html var indexHTML []byte +//go:embed static/manifest.webmanifest +var manifest []byte + +//go:embed static/icon.svg +var iconSVG []byte + +//go:embed static/icon-192.png +var icon192 []byte + +//go:embed static/icon-512.png +var icon512 []byte + +//go:embed static/icon-maskable-512.png +var iconMaskable512 []byte + +//go:embed static/apple-touch-icon.png +var appleTouchIcon []byte + var keepAliveInterval = 25 * time.Second // EventSource provides coalesced refresh notifications and subscriber cleanup. @@ -24,6 +43,7 @@ type EventSource interface { // NewHandler fetches a fresh snapshot for each API request. Disabling caching // keeps reloads, push refreshes, and polling from showing a previous state. +// The embedded home-screen manifest and icons require cache revalidation. // The server must cancel request contexts on shutdown to close active streams. func NewHandler(snapshot func() status.Result, events EventSource) http.Handler { mux := http.NewServeMux() @@ -40,6 +60,23 @@ func NewHandler(snapshot func() status.Result, events EventSource) http.Handler mux.HandleFunc("GET /api/events", func(w http.ResponseWriter, r *http.Request) { serveEvents(w, r, events) }) + for _, asset := range []struct { + path, contentType string + data []byte + }{ + {"/manifest.webmanifest", "application/manifest+json", manifest}, + {"/icons/icon.svg", "image/svg+xml", iconSVG}, + {"/icons/icon-192.png", "image/png", icon192}, + {"/icons/icon-512.png", "image/png", icon512}, + {"/icons/icon-maskable-512.png", "image/png", iconMaskable512}, + {"/apple-touch-icon.png", "image/png", appleTouchIcon}, + } { + mux.HandleFunc("GET "+asset.path, func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", asset.contentType) + w.Header().Set("Cache-Control", "no-cache") + w.Write(asset.data) + }) + } return mux } diff --git a/internal/web/handler_test.go b/internal/web/handler_test.go index 03c69bf..48d131b 100644 --- a/internal/web/handler_test.go +++ b/internal/web/handler_test.go @@ -2,9 +2,12 @@ package web import ( "bufio" + "bytes" "context" "encoding/json" "errors" + "fmt" + "image/png" "io" "net/http" "net/http/httptest" @@ -62,7 +65,7 @@ func TestPageAndRouting(t *testing.T) { if page.Code != http.StatusOK || !strings.HasPrefix(page.Header().Get("Content-Type"), "text/html") { t.Fatalf("page response: %+v", page.Result()) } - for _, text := range []string{`name="viewport"`, "Waiting for data...", "/api/status", "60000", "EventSource", "/api/events", "toFixed(2)", "--", "clamp(", ".done { color: #1a7f37; }"} { + for _, text := range []string{`name="viewport"`, "Waiting for data...", "/api/status", "60000", "EventSource", "/api/events", "toFixed(2)", "--", "clamp(", ".done { color: #1a7f37; }", `<title>Laundry status`, `rel="manifest" href="/manifest.webmanifest"`, `name="theme-color" content="#ffffff"`, `rel="apple-touch-icon" href="/apple-touch-icon.png"`, `rel="icon" href="/icons/icon.svg" type="image/svg+xml"`} { if !strings.Contains(page.Body.String(), text) { t.Errorf("page missing %q", text) } @@ -84,6 +87,104 @@ func TestPageAndRouting(t *testing.T) { } } +func TestHomeScreenAssets(t *testing.T) { + handler := NewHandler(func() status.Result { return status.Evaluate(nil) }, &sensor.Hub{}) + for _, tt := range []struct { + path, contentType string + size int + }{ + {"/manifest.webmanifest", "application/manifest+json", 0}, + {"/icons/icon.svg", "image/svg+xml", 0}, + {"/icons/icon-192.png", "image/png", 192}, + {"/icons/icon-512.png", "image/png", 512}, + {"/icons/icon-maskable-512.png", "image/png", 512}, + {"/apple-touch-icon.png", "image/png", 180}, + } { + t.Run(tt.path, func(t *testing.T) { + response := httptest.NewRecorder() + handler.ServeHTTP(response, httptest.NewRequest(http.MethodGet, tt.path, nil)) + if response.Code != http.StatusOK { + t.Fatalf("status = %d; want 200", response.Code) + } + if got := response.Header().Get("Content-Type"); got != tt.contentType { + t.Errorf("content type = %q; want %q", got, tt.contentType) + } + if got := response.Header().Get("Cache-Control"); got != "no-cache" { + t.Errorf("cache control = %q; want no-cache", got) + } + if response.Body.Len() == 0 { + t.Fatal("empty asset") + } + if tt.size != 0 { + if !bytes.HasPrefix(response.Body.Bytes(), []byte("\x89PNG\r\n\x1a\n")) { + t.Fatal("missing PNG signature") + } + img, err := png.Decode(response.Body) + if err != nil { + t.Fatal(err) + } + if got := img.Bounds(); got.Dx() != tt.size || got.Dy() != tt.size { + t.Errorf("PNG bounds = %v; want %dx%d", got, tt.size, tt.size) + } + } + for _, request := range []struct { + method, path string + code int + }{ + {http.MethodPost, tt.path, http.StatusMethodNotAllowed}, + {http.MethodGet, tt.path + "/missing", http.StatusNotFound}, + } { + response := httptest.NewRecorder() + handler.ServeHTTP(response, httptest.NewRequest(request.method, request.path, nil)) + if response.Code != request.code { + t.Errorf("%s %s = %d; want %d", request.method, request.path, response.Code, request.code) + } + } + }) + } +} + +func TestHomeScreenManifest(t *testing.T) { + handler := NewHandler(func() status.Result { return status.Evaluate(nil) }, &sensor.Hub{}) + response := httptest.NewRecorder() + handler.ServeHTTP(response, httptest.NewRequest(http.MethodGet, "/manifest.webmanifest", nil)) + var manifest struct { + Name string `json:"name"` + ShortName string `json:"short_name"` + StartURL string `json:"start_url"` + Scope string `json:"scope"` + Display string `json:"display"` + ThemeColor string `json:"theme_color"` + BackgroundColor string `json:"background_color"` + Icons []struct{ Src, Sizes, Type, Purpose string } `json:"icons"` + } + if err := json.Unmarshal(response.Body.Bytes(), &manifest); err != nil { + t.Fatal(err) + } + if manifest.Name != "Home Lanundry" || manifest.ShortName != "Home Lanundry" || manifest.StartURL != "/" || manifest.Scope != "/" || manifest.Display != "standalone" || manifest.ThemeColor != "#ffffff" || manifest.BackgroundColor != "#ffffff" { + t.Errorf("unexpected manifest: %+v", manifest) + } + var variants []string + for _, icon := range manifest.Icons { + response := httptest.NewRecorder() + handler.ServeHTTP(response, httptest.NewRequest(http.MethodGet, icon.Src, nil)) + if response.Code != http.StatusOK || icon.Type != "image/png" || response.Header().Get("Content-Type") != icon.Type { + t.Fatalf("icon %+v: status %d, content type %q", icon, response.Code, response.Header().Get("Content-Type")) + } + cfg, err := png.DecodeConfig(response.Body) + if err != nil { + t.Fatal(err) + } + if got := fmt.Sprintf("%dx%d", cfg.Width, cfg.Height); got != icon.Sizes { + t.Errorf("icon %s: size %s; declared %s", icon.Src, got, icon.Sizes) + } + variants = append(variants, icon.Sizes+" "+icon.Purpose) + } + if want := []string{"192x192 any", "512x512 any", "512x512 maskable"}; !reflect.DeepEqual(variants, want) { + t.Errorf("icon variants = %v; want %v", variants, want) + } +} + func TestStatusAPIReadsCurrentSnapshot(t *testing.T) { var window status.Window handler := NewHandler(func() status.Result { return status.Evaluate(window.Readings()) }, &sensor.Hub{}) diff --git a/internal/web/static/apple-touch-icon.png b/internal/web/static/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d92f6d9c5db2295ddeb2270c6d2641f89871327d GIT binary patch literal 11761 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 TR9X%200000NkvXXu0mjfTOikQ literal 0 HcmV?d00001 diff --git a/internal/web/static/icon-192.png b/internal/web/static/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..580f4b588a35ee6126c3a0fabc2a4a1dc22ae6a4 GIT binary patch literal 12683 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 FV1l;vv_Aj< literal 0 HcmV?d00001 diff --git a/internal/web/static/icon-512.png b/internal/web/static/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..97007d243635a27e8405351c7eb779960d837a17 GIT binary patch literal 39374 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

)0heOs>KL~d9C|xcq6S(Q;n!> z@5ML2)ymz-tjpms_x9z0dikq5V~WUp=l}glWqTyE*KX=|it5;%>#$%KC|X3^xnsl(f^_{906?>BN%>p7q+s^3a! z(Fz${oV3jBTv^K;+_=||S3fhHt4-~w2QP-myHsI-97N#em8BzqN#Pp!pd<2+eoo_c z7RcG!1saLe)#XAQFH~}8=e!@s{FQ2YPW2M%Lz-xdls*FyvqfGEUsn-$9g;;o!WaeI zHL#L08{Brj2_UeYi}VP+Y+{K^ndfMVqs8Az7MhK=k`eMrHjT=~k|LzF;SZIbOqE1k z4i)mK)n+;Y`9qDMU4^x&FM(Pb?(_U|B%h$dP)@!nk#>+)t$QNe9WU|9{5eZgaB*QZ zw=wu5XVhTIiEG6eG&+=0`2_kc|4qP$+@wsalIv_&vQeUNNlnf<8Wt$1Rjmae2>D&` z4N<0a|4sVC^9`Z`o(sIlsK;OO?^S29q~%yY(4KP2Cj!0^%H*GbPNJ*WEB zD6knUN|=l4(CWd^V*7#T)`WmL@3K#sfeXH{7b#n{kojtf2a>+qlgh(o2>)gG>%!(q z0h-kHCJO<}p2dRpPh0xfJ%Dg%L`dazkVmfgy@lZ11*1yeUTRK!mti3e)x zCCSO=2dDLkd4V8=A=O6iY)(vJArQ@a#{uFHk^|ce;Ujkfx~*M&vModU&A6bJ7@_}X zyQ=Y1F>4if%XUhjhP-K0TFDRs^--iS4}4whS@A@xuV%+m7SaKtKg!Jjcd$v0V^$>I zvb^6RDZpSx83^Wm6Vw!4zKf2zm~G|nP*kM5 z@#%Xt{OIz3bX9`lgt?_7NMIO$(9Lq781UD#on_`U-x0rDUABL%f_kr(rr6tf9=xM)@$pl2uN zSQU@A)3v1>@vC!KrP8L$6A^(2cc>}|Md^V~i5WnfSc?|k@P;_w@M>`Jn?eW^|BCpl zTOl&$+V_o(i{Y4HDC@PKj=4tk>g{?A?&7tsiJnN2+a8PPHJcabDWvO8|9Gq29ToB+ z#G{$kB_txRzHSTLYh}glIKc(^iQ*i!84E;zSaUr8SMZtdmYD=8-A*+k54p(&w4t!>2bqeiwi|AhR@K|~Bm%H-wX|4?>h+g$T}cWhGv^t_4!;W7PhPoirC z`K%^vfPa%5ih8oKqB`&nHH#1CZHj#nhVdEUF?w#SV03$P-^Tu*r{T%zg4=no=5VdL zbBJ4}?N^P4ijxFBgywTa71JjxgDrR>)KKFFEz8M5hyd1?C!s6RM~=nrl1^^t?vN<` z3?$b}i>?e@A1ZtyZTK|$R`9JG0Fyyf09@7TPr1i@*`&`|g_-ck)h=q}uB#ux_&5MX zs#kcpT0_ED!X!+;)nCTF{rtDCybm9s1aFE!?Yw0MX%IE(>dw~~*tsMB#ezuwtwP=f z6t!XStJUUm+=g8m<$bTdxhz(5t|T*r0PyHcQIX1}qCr2qk<@ENG7GtAu{deqN9@j( zRA73nv|@d||7ZHSwXPUnOYjmmTvnFR;xho^M*j-+p`U7iQ_p%Q9T02sx17zfev)FJ znFQxGfrbVW+i+gk*5b-h_Hv=lPx zyd$X;V8J(M8pAlilLWB?kRIRHbJm^rE_Skj7+C|ftnSe?7@1sDprKsOgE6tt(_s~# z%k2kX>dwRnmv+#GN@4&vR#9KN#cA-Fk=8o_h9pp0n|) zU5Ii}t5KqWa2Nv06(!r}{yNrfy7H+T`e{407p;+A@ee#TFwcYO7c%kenZlrA7%-6u-x71bk_zu=@Y23-Fjpz<# zFlgKT2FDRkKY%w-pk)jOHG?aCKbr)8%8>?;c(uJ?WWWA{D|l9IVfmx*3282gt1npdYO>R0SZv>a$Z;`rzNUJ^gfHtk|#xWp?g2&@NmUEEvK1>~~sv|GP`8O8~!q zRR^A-75YSV zxD|cNV=FILsSahhW07{vRtw`O9ib)UY~UX=`t??>WS4g<%&`--J&}DAFGL+6dZS}Q zxsD0BuQWva&I{9qSW!0ue_I_z$M+#20n_EVA!W0;7d2cFf`Jnpc=-$%RW9}QeP^l5 z+=tBoHV$JfwB8r}bXXsM;GC}?t$4Z;YJyYbJ^3csCAMls;6yCI6R* zwr%YD)qM#GZ7qPYvUS(K-hLfuzBbK)`GXXyLXS&pVV8HHVX4Ax@ZV=1xn*#t55h>6 zCv4>9B4*Og18RNefiE%#Zv9hUP}P0W*|v^ZSc#u*t*cr7RewrQ8$ZgJ;lPP`pnk5dxQ z&9@&emsSG$$LzD7*P{p?DBpeFYFJtSt<=#o;ro9y^m|}JCgOu{d1B6CVI~}-fs{s{ zOv1T>JrfT*i@_u9z&eN_4G|J-5vvr$!J#HgKa>D|0JsH;z1s2qSZ>MtRh;P%+Cp|l z^r+?7WSvoGpc8>YhUr9`%0V*#ir{fy3|h^P6+LL@o8u+3&0%&${jj5-WS3u>SM|gd z2^}f-WhPLQF+KQQrYi^dkq-&f9(gW1vx2n$T@-e#FmFNV6{_RUEKA65$m~W)004R+ zj<$^(g8X!Ue0sSWdo4AdXPjB)s!*)vks=s)*?x>x`d-NGsNYWJ$X~yZ1|GRO!=Cw4 z;4XU09cCk%_PU+xs+AN_`9@bY(^L6>8rn7a@X4}abQ|q0ZJIO1U72(cxkN;6nMyz5hpLO~atfd{g_OacOy3L;yz2cq{+5$Nlou8vIzAcd|&xPx1b#jzG{M{o zFJg%;Bgfco7rFk&-+5V$hajP|tZ^L>KL$AqY3(g1*g3Z!`HV0#h3IF9N?7sJBl3ak zqX+X*l#KLr^u5u+riogb>B|cxX1+H^OJf}C2pH|Y_ad#06zn28e%!AiL4zhkGO3hlIuk74wLjq#TVd)MO%>LU zoQ1Uv(nG0_mXQ$z(9+n3mtguJX+0W$){lRI!Q3&Oq!XOGWBXN766O3zb+84@J5(Fi zXr32zeV4;WbYC%Bcy=!aNM7!qOZ}*rDAD7a0U70m-)39WEHpqb!9x+IhZvYPa&loF z2X>+YpB?Pm0xUcFy}aJg?R}!Eo~|J1;Q3dkwU_t}Ms9-;6F9UQ3z`r>BsMOjK^)>Eev?&B41&q6A~t+ZV_cBM5JUfG1Z%X6>*%d zG>CR~v^!5uzRq2Ai3Y3yjk9oGv#+d(5f-V)58^Y`Tpb^;+cEN$Zo&hU8i#JF783RK zT%#K6@7e#24n$t*+fKawGJR8dtw zVh#nQqWnosOn5%XloqM@xrX>9TALUc(hQiMe)Ch zgOhEdCTnc?mN~zOU)N*Hr1E^IVI77;QQx1HgF>YyKj_ehc4Zvmoa*?($5(9kE2Kqp zIv$hJcZyh_1EPNX@V^1rK@Xgvr;9&{@c0vpNrrZagI<(tV43cU%of?2Wf`Rwn>WBs zMAauw&GUCn`BPGs#ZMt905tH2;h;WqWsHcMZTvP`f&Ks83u9+G9}QiOm<@`sUO(lx zT_!Zd8xj@d+%ZBLJGpTDp{-wCnk$TMQ4yh+xQ1}Nf_jRzt!i+5L_<5ODD6mJTR}vi z9Kd&Wsfl&ts8eD4W#UwosrRQK#Z712hPO!#b9i<-A_3=!0Z~WdYEO}k! zorOdq?;&e5LOhd%#3a3_4Yiq<2gSTLc_$QNWyF-MD9uwznJCc^jiRU+dE}AwB>UZK z^!xojpZl-vKIdH5xxUwR&bjV$&X?-bWQ?SrTJDzvtYE-0WorWS6qmzvZK(M-F!XXR z(Mp^n8|-+r!Tm8D=h+lqp@OdCJ6Ul)gb~Rn4_s8p`KPBTe{Y6a>dj(?Zbb^a%lGDBA??-n+xeKJXytsTMK{&kfGGo{CVZ)x=La zhStU9d^lBmHsAay%;Ec~lHAln{<(XX_+B}hq0z}q@)4*<-({b?u#Mv^rc#l?tE-0R=gm}_!o^IQjCEzjC0%*Z!L z$qTwI#7E8@bPY-%*+=A=7S)L_OUZ!y z-PV0i*C#bwLh8K6>c%`ER5^7Mid#;T7tkO=S(S??77j{OCu_@>EplNh% zS{SUjstThbr92W^sUkBbL%u8al0{&@oI=_o!Uj%SDKKMw#u<=2FU01v2n&2}ZXS#f z!tJkjEaovJ>^WJgn>hv&+8SXe^iitZ>djksG7|D!@vL(0!e4FTtlc3BLr)x8ULhNYD%W{z)Zg!dwPj>@c1%_o>a^0nw7yJ65gQCd$rD93e^@GUlp+iw)-6lvLAJ`u zLb(gg9&&eWY@b&a=!~9$a*e$$Xr>OEq_3D`xQn0JJ8>BBG$W(g+TMD@C1UW^QmFFI zQ$bcr`kcXA&qH$@Zxry;a>U)(<&~`b=2uK{7U+ol`_3aM@ymf$NG?V^W~#^h@zebp zeh5_td1J{FOV+-S(1NnHEdS0PEyFgweDmopPvy$%9v}bkiVQ?A9jR5qQ)_dX=nRVK$9g^>^{oX)9pP zin`YqM#J~oGsibN4=Py?GsGhKqLfH1nfz#rUm z3sO4?*`1IAYwmW4hz~$~av6g5cF$~lq|HdUC_oysR2hd0An|; zmC8WrL8cj8dopkH>&FmdEsKFIoE-w8PC~Vupc(5_pkuZfYPt;dQ9``P zM9#=z_{E0FuQmXx_r2idmF=?MOnZggN?<{ZJpJt~l72JK^8PNrsR$raDz52ANq`VS zzn(y6jKnTuv!Ol+Ei>(tEnr3jx5I$t^tQCTKeq<*CS~#4^KBLp0Ndi#MuYCax`Wu% z6;32DAyV8@jxufN587C41LR>Sli3|Rz|1vR9HOw84SZ`&q`Jm;UK7O&*Q3KYqV572D+&j`gCNLuR-Nha$d;k%{Na`! zE6aYcZ($WEpa7-Ry3_nJjU5~?X(U00_)_vqPNWUIzRzt79X+z=>+leZ zTPTJ+pC>O+3t#_i*Q%;W$T@lU(D17or(@rP_j=Rw`D=PCe!|afDEcT;29^n!f%8T} z#m*DN=*ZB9&j1aJLM_Yt4=Da$Epk0yH*+0hk7gc_!JNh!q^FVJjN-&Eh+LGm4!SLc zKzJ_+0C2@U4tAatc+(O5fUD}~%#=gcz}2Q$-{HMB^Wg`b{{c36bV$ zb9H}QeYr&fW180?UMi=j^9%5pal~P`x-({=$n)5fU1PP!ckKjBUsDm#vu!WJR{+*y z3@!f1#`BH@G%ij9&Z(x880j@6EWJhKnDVaFH54_7dilar+K>C2A}yXmaxzq}wUfQg=6_JN}c{}Nw+`W?YWw?qHsJD`?r;|U;7V+1g6 z=wM=$`41#{+b?L)0O&UC1bl)zR7tqzqB^xVc!>|t0^e}o3qG6yHa%LklZqRrvF2{% z-t6+1BwQ?Uwpk3xk5%~xGW%efB7!ower_0oz&JCf_WwNPf>8rlx13^z+xR~e8^74E zI5NoJ1nK`OC?UFbe>1%l`h{u@I#oe4cg!s@>-#8L6b*7lfL1SZUIk6F=u{-@GDEqa9xC#9mfD%c>n z4K{A9CqwmlYk-X8+0o~6BHIE!6RrBG4TURx5My`d2Q0|dP-5E`2`+W;JR)B}Q@+aEB`_u{c z1GiOmetj&mg+%vl_fA(G)<(qzjZ$jS=W@UAK(kCG|^ zZRKYji#_&4voe@x*hvXzHkV)-@JC|$@En-i_d-R%rkh1DM(hgpM*A!FL z-c8KY7}*P6lA?+hMH7e?rZH}lu{UoUp?T@5A=O3gZ*VKBAJI3kJ7bZ8?~&<^K)L?6 z=KYe@cL*kQb*<2XhJ%tx@pZ=aEZ&nDWpe&{{G@af#76Cl((Xp`urM4Z)azo#&T7@y z8nX8_;?BmTp4<~qKJA^>+6i%Az-C^%V9?X;#c7Y&-~M-P7i-L*(=tvJPPFo=4Jgeg z?QIeJLb zc&+7xEl9O+cYkqx1i)N7P(dE{^n$BxtcJDvl2=kwT6HoI=r$jvzDe2D9hV)mREMBHHm@seT&MdoR&jl(d%gbOk zOdTTlMt099HzVW*AjOfjDk_8c4eg?aAPTdoR6c*?Dlcz{ft$=NBNa86yk$hOLmaFD zullHm_=%43j72vl^rlx<3!7;bCz=IJ@1Z)yD!7MoV)`TTMWq@8tP?TA2yWH1zPz%N z{3PJ%h1-HNm@JSNT;<=IyiREPU1nqSlqINr=ienA`!(){omCG9`rxuN@)#I!@ueTU}!Llaa6+T-qTB61!)<_Lvl5pTc@{3|7kZs zN)ZqBITM1H`rcJAa_GBs;mG?L0vXME^zDJAKo$T5f=$mmZUO)xE}SBX0e^d((u($J RM}WTodv?1y)L{=N{s+UgpDO?W literal 0 HcmV?d00001 diff --git a/internal/web/static/icon-maskable-512.png b/internal/web/static/icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..6364859a1872ebcd1e6a89f48302c2fb9e9a633f GIT binary patch literal 35262 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 + Cartoon washing machine with blue water and bubbles + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/internal/web/static/index.html b/internal/web/static/index.html index 2462ae0..a311405 100644 --- a/internal/web/static/index.html +++ b/internal/web/static/index.html @@ -4,6 +4,10 @@ Laundry status + + + +