← back to Dw Photo Capture
Photo capture: installable PWA — DW-branded home-screen icon (iPad/iPhone)
b99e4d9a7ddd7926dd45b45614f79b9990e94352 · 2026-09-18 14:14:58 -0700 · steve
- New DW-branded icons (gold camera glyph + DW wordmark on dark) at 180/192/512
- Add /icon-192.png route + PUBLIC allowlist entry (iOS fetches icons uncredentialed)
- Manifest: name 'DW Photo Capture', short_name 'DW Photo', start_url '/', standalone,
192/512 icons (any + maskable), theme/bg #0f0e0c, portrait
- Head: apple-mobile-web-app-title 'DW Photo' + mobile-web-app-capable + sized icon links
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DCq3132eTmJESAKqJBM8FN
Files touched
M public/icon-180.pngA public/icon-192.pngM public/icon-512.pngM public/index.htmlM server.js
Diff
commit b99e4d9a7ddd7926dd45b45614f79b9990e94352
Author: steve <steve@designerwallcoverings.com>
Date: Fri Sep 18 14:14:58 2026 -0700
Photo capture: installable PWA — DW-branded home-screen icon (iPad/iPhone)
- New DW-branded icons (gold camera glyph + DW wordmark on dark) at 180/192/512
- Add /icon-192.png route + PUBLIC allowlist entry (iOS fetches icons uncredentialed)
- Manifest: name 'DW Photo Capture', short_name 'DW Photo', start_url '/', standalone,
192/512 icons (any + maskable), theme/bg #0f0e0c, portrait
- Head: apple-mobile-web-app-title 'DW Photo' + mobile-web-app-capable + sized icon links
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DCq3132eTmJESAKqJBM8FN
---
public/icon-180.png | Bin 4386 -> 7558 bytes
public/icon-192.png | Bin 0 -> 7691 bytes
public/icon-512.png | Bin 12871 -> 23358 bytes
public/index.html | 8 +++++---
server.js | 16 ++++++++++------
5 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/public/icon-180.png b/public/icon-180.png
index 1148fc6..3e32efa 100644
Binary files a/public/icon-180.png and b/public/icon-180.png differ
diff --git a/public/icon-192.png b/public/icon-192.png
new file mode 100644
index 0000000..268d9a4
Binary files /dev/null and b/public/icon-192.png differ
diff --git a/public/icon-512.png b/public/icon-512.png
index aa6134a..674b7bb 100644
Binary files a/public/icon-512.png and b/public/icon-512.png differ
diff --git a/public/index.html b/public/index.html
index 548c58a..8d93e95 100644
--- a/public/index.html
+++ b/public/index.html
@@ -29,10 +29,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, maximum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
-<meta name="apple-mobile-web-app-title" content="DW SKU Photos">
+<meta name="apple-mobile-web-app-title" content="DW Photo">
+<meta name="mobile-web-app-capable" content="yes">
<meta name="theme-color" content="#0f0e0c">
-<link rel="apple-touch-icon" href="/apple-touch-icon.png">
-<link rel="icon" type="image/png" href="/icon-180.png">
+<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
+<link rel="icon" type="image/png" sizes="192x192" href="/icon-192.png">
+<link rel="icon" type="image/png" sizes="512x512" href="/icon-512.png">
<link rel="manifest" href="/manifest.webmanifest">
<title>Mobile DW SKU Photos</title>
<style>
diff --git a/server.js b/server.js
index 5855cd3..5c07408 100644
--- a/server.js
+++ b/server.js
@@ -921,7 +921,7 @@ function pipeUpstreamImage(src, res, headers) {
const appHandler = (req, res) => {
// public (no-auth) paths: health + the home-screen-install assets iOS fetches without creds
- const PUBLIC = ['/healthz', '/icon-180.png', '/icon-512.png', '/apple-touch-icon.png', '/manifest.webmanifest', '/apps/similar', '/apps/color-index', '/apps/color-widen', '/apps/color-dots'];
+ const PUBLIC = ['/healthz', '/icon-180.png', '/icon-192.png', '/icon-512.png', '/apple-touch-icon.png', '/manifest.webmanifest', '/apps/similar', '/apps/color-index', '/apps/color-widen', '/apps/color-dots'];
const _p = req.url.split('?')[0];
if (!PUBLIC.includes(_p) && !_p.startsWith('/marketing/') && !checkAuth(req)) {
res.writeHead(401, { 'WWW-Authenticate': 'Basic realm="DW Photo Capture"' });
@@ -2068,8 +2068,8 @@ load();
return send(res, 404, { err: 'not found' });
}
- // App icons + PWA manifest — make "Add to Home Screen" a real app (clean icon, fullscreen).
- if (u.pathname === '/icon-180.png' || u.pathname === '/icon-512.png' || u.pathname === '/apple-touch-icon.png') {
+ // App icons + PWA manifest — make "Add to Home Screen" a real app (clean DW icon, fullscreen).
+ if (u.pathname === '/icon-180.png' || u.pathname === '/icon-192.png' || u.pathname === '/icon-512.png' || u.pathname === '/apple-touch-icon.png') {
const f = path.join(ROOT, 'public', u.pathname === '/apple-touch-icon.png' ? 'icon-180.png' : path.basename(u.pathname));
if (fs.existsSync(f)) { res.writeHead(200, { 'Content-Type': 'image/png', 'Cache-Control': 'max-age=86400' }); return res.end(fs.readFileSync(f)); }
return send(res, 404, { err: 'not found' });
@@ -2077,9 +2077,13 @@ load();
if (u.pathname === '/manifest.webmanifest') {
res.writeHead(200, { 'Content-Type': 'application/manifest+json' });
return res.end(JSON.stringify({
- name: 'Mobile DW SKU Photos', short_name: 'DW SKU Photos', start_url: '/?app=1', display: 'standalone',
- background_color: '#0f0e0c', theme_color: '#0f0e0c',
- icons: [{ src: '/icon-180.png', sizes: '180x180', type: 'image/png' }, { src: '/icon-512.png', sizes: '512x512', type: 'image/png', purpose: 'any maskable' }]
+ name: 'DW Photo Capture', short_name: 'DW Photo', start_url: '/', scope: '/', display: 'standalone',
+ background_color: '#0f0e0c', theme_color: '#0f0e0c', orientation: 'portrait',
+ icons: [
+ { src: '/icon-192.png', sizes: '192x192', type: 'image/png', purpose: 'any' },
+ { src: '/icon-512.png', sizes: '512x512', type: 'image/png', purpose: 'any' },
+ { src: '/icon-512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' }
+ ]
}));
}
← 4cbb39e Photo capture: two-photo capture + mfr# identity gate (front
·
back to Dw Photo Capture
·
auto-data-snapshot: 2026-09-18T14:19:46 (2 data files) — dat bad2f48 →