stacks/news-digest: favicon + serve-via-nginx wiring

Editorial-briefing favicon: 32×32 SVG, Australis palette. Cyan
masthead-rule across the top echoes the page's aurora-rule, four
descending text-line indicators below evoke a newspaper column.
Reads cleanly at 16×16 (the typical browser tab size). Static
markup only — no script, no animation — so all browsers honor
it for tab + bookmark icons.

Linked from both digest.html.j2 and archive.html.j2 with the
proper type="image/svg+xml" attribute. Served by nginx from
the bind-mounted /output dir alongside index.html and style.css.

Deploy playbook also updated to copy the favicon into /output at
deploy-time so a fresh deploy doesn't 404 on the icon before the
first cron fire.
This commit is contained in:
2026-04-26 13:55:51 -07:00
parent 23222418fa
commit 5f2b485390
4 changed files with 29 additions and 6 deletions
+14 -6
View File
@@ -80,6 +80,12 @@ steps:
dest: "{{ compose_dir }}/templates/style.css"
mode: "0644"
- name: Upload templates/favicon.svg
upload:
src: stacks/news-digest/templates/favicon.svg
dest: "{{ compose_dir }}/templates/favicon.svg"
mode: "0644"
- name: Seed .env from template (only if absent)
upload:
src: stacks/news-digest/.env.example
@@ -104,12 +110,14 @@ steps:
cd {{ compose_dir }} && DOCKER_BUILDKIT=0 docker compose build 2>&1 \
| grep -vE '^Step [0-9]+/[0-9]+ : (RUN|COPY)|^Removing intermediate|^ ---> |^ ---> Running|Collecting|Downloading|Requirement|Using cached|Installing collected|Successfully (installed|built)|━'
- name: Pre-stage style.css into /output so the first page render works
# Worker writes index.html which references "style.css" (relative).
# The CSS isn't generated by the worker; nginx serves whichever
# copy lands at /usr/share/nginx/html/style.css. Copy the template
# CSS into the bind-mounted /output dir at deploy-time.
shell: cp -f {{ compose_dir }}/templates/style.css {{ output_dir }}/style.css
- name: Pre-stage style.css + favicon.svg into /output for nginx
# The worker writes HTML that references "style.css" and
# "favicon.svg" (relative). Neither is generated dynamically;
# nginx serves whichever copy lands at /usr/share/nginx/html/.
# Copy both from the templates dir at deploy-time.
shell: |
cp -f {{ compose_dir }}/templates/style.css {{ output_dir }}/style.css
cp -f {{ compose_dir }}/templates/favicon.svg {{ output_dir }}/favicon.svg
- name: docker compose up -d
shell: cd {{ compose_dir }} && docker compose up -d
@@ -4,6 +4,7 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Daily Digest · Archive</title>
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
@@ -4,6 +4,7 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Daily Digest · {{ date_long }} · {{ edition_short }}</title>
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<title>Daily Digest</title>
<desc>Masthead rule across the top with descending text-line indicators below — reads as "stacked headlines / news columns" at any size. Australis palette: cool-black surface, bright-cyan masthead, bright-70 / dark-50 text lines.</desc>
<rect width="32" height="32" rx="5" fill="#222531"/>
<!-- masthead rule (echoes the page's aurora-rule + cyan brand glyph) -->
<rect x="4" y="5" width="24" height="2" rx="1" fill="#42dcd1"/>
<!-- four text-line indicators of varying widths — like a newspaper -->
<rect x="4" y="11" width="20" height="2" rx="1" fill="#b3cbcf"/>
<rect x="4" y="16" width="24" height="2" rx="1" fill="#9daeb6"/>
<rect x="4" y="21" width="14" height="2" rx="1" fill="#9daeb6"/>
<rect x="4" y="26" width="18" height="2" rx="1" fill="#6e7882"/>
</svg>

After

Width:  |  Height:  |  Size: 925 B