Add favicon
All checks were successful
Docker / build-and-push (push) Successful in 1m44s

Pulse-line mark in the status-yellow accent, on both the status page and /admin. Wires up static file serving and fixes the Dockerfile to actually ship the public/ dir into the runtime image.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Fredrik Johansson
2026-07-19 19:50:36 +02:00
parent 957be073ab
commit 3adf06e4e1
5 changed files with 8 additions and 0 deletions

View File

@@ -16,6 +16,7 @@ RUN apk add --no-cache python3 make g++
COPY package*.json ./ COPY package*.json ./
RUN npm install --omit=dev && apk del python3 make g++ RUN npm install --omit=dev && apk del python3 make g++
COPY --from=build /app/dist ./dist COPY --from=build /app/dist ./dist
COPY --from=build /app/public ./public
# DATA_DIR (SQLite DB) is a mutable runtime volume — not baked into the # DATA_DIR (SQLite DB) is a mutable runtime volume — not baked into the
# image, so redeploys don't clobber host overrides / manual targets. # image, so redeploys don't clobber host overrides / manual targets.

4
public/favicon.svg Normal file
View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<rect width="32" height="32" rx="7" fill="#080808"/>
<path d="M6 18 L11 18 L13.5 11 L18 23 L20.5 18 L26 18" fill="none" stroke="#e8c400" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 275 B

View File

@@ -5,6 +5,7 @@ export function renderAdminPage(): string {
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>admin / status</title> <title>admin / status</title>
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<style> <style>
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap'); @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap');
:root { :root {

View File

@@ -7,6 +7,7 @@ import { router as adminRouter } from './admin.js';
const app = express(); const app = express();
app.use(express.json()); app.use(express.json());
app.use(express.static('public'));
app.get('/api/status', (_req, res) => { app.get('/api/status', (_req, res) => {
res.json(getStore()); res.json(getStore());

View File

@@ -34,6 +34,7 @@ export function renderPage(store: StatusStore): string {
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="refresh" content="60"> <meta http-equiv="refresh" content="60">
<title>status / goonk</title> <title>status / goonk</title>
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<style> <style>
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap'); @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap');
:root { :root {