From 7b161f12768dbf7627df2f23188a8ebb9ba9c1b7 Mon Sep 17 00:00:00 2001
From: peter
Date: Mon, 7 Sep 2026 21:37:08 +0100
Subject: [PATCH] v0.6.3: UI wording -> "messages"; folder spacing + tint
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- User-facing "artifact(s)" -> "messages" across the UI (feed count, empty
states, preview, About, Storage). Model/API/skill keep "artifact" internally
— no agent-contract change.
- Sidebar: Keep/Deleted folders get spacing between them and share the "All
sources" bold + blue-tint styling (special folders).
- Fix: About page points to Settings -> API Keys (was stale "Settings ->
Account / API token").
152 tests pass; inline JS re-validated with node --check.
Co-Authored-By: Claude Opus 4.8
---
CHANGELOG.md | 17 ++++++++++++-
daybook_project/__init__.py | 2 +-
static/agentfeed.css | 17 ++++++++-----
templates/artifacts/feed.html | 28 ++++++++++-----------
templates/artifacts/settings_about.html | 8 +++---
templates/artifacts/settings_demo_data.html | 2 +-
templates/artifacts/settings_storage.html | 10 ++++----
7 files changed, 52 insertions(+), 32 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1366216..318a2a1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,20 @@ former name, "Daybook".)
_Nothing yet._
+## [0.6.3] — 2026-09-07
+
+### Changed
+- **User-facing wording: "artifact(s)" → "messages"** throughout the UI (feed
+ count, empty states, preview, About, Storage). The model, API
+ (`/api/artifacts`), and posting skill keep "artifact" as the internal term —
+ no contract change for agents.
+- Sidebar: the Keep/Deleted folders now have spacing between them and share the
+ "All sources" bold+blue-tint styling (they're special folders).
+
+### Fixed
+- About page now points to Settings → API Keys (was the stale "Settings →
+ Account / personal API token").
+
## [0.6.2] — 2026-09-07
### Changed
@@ -221,7 +235,8 @@ First tagged release.
- Dockerised (Gunicorn + whitenoise), SQLite, `git`-based deploy with a
runbook (`deploy/cloud_agent_deploy.md`) and health check.
-[Unreleased]: https://git.cygnus.systems/peter/daybook/compare/v0.6.2...HEAD
+[Unreleased]: https://git.cygnus.systems/peter/daybook/compare/v0.6.3...HEAD
+[0.6.3]: https://git.cygnus.systems/peter/daybook/compare/v0.6.2...v0.6.3
[0.6.2]: https://git.cygnus.systems/peter/daybook/compare/v0.6.1...v0.6.2
[0.6.1]: https://git.cygnus.systems/peter/daybook/compare/v0.6.0...v0.6.1
[0.6.0]: https://git.cygnus.systems/peter/daybook/compare/v0.5.1...v0.6.0
diff --git a/daybook_project/__init__.py b/daybook_project/__init__.py
index 28b8174..b040cb3 100644
--- a/daybook_project/__init__.py
+++ b/daybook_project/__init__.py
@@ -1,4 +1,4 @@
# Single source of truth for the app version. Bump this, commit, then tag the
# commit `vX.Y.Z` and deploy. Surfaced on Settings -> About and in
# GET /api/capabilities ("version").
-__version__ = "0.6.2"
+__version__ = "0.6.3"
diff --git a/static/agentfeed.css b/static/agentfeed.css
index d282868..ca19527 100644
--- a/static/agentfeed.css
+++ b/static/agentfeed.css
@@ -1139,20 +1139,25 @@ kbd {
display: flex;
flex-direction: column;
flex-shrink: 0;
- padding: 0.4rem 0.6rem 0.2rem;
+ gap: 0.25rem; /* space Keep / Deleted apart */
+ padding: 0.4rem 0.6rem 0.3rem;
}
-/* "All sources" — the primary entry, visually distinct from individual sources:
- bold, with a subtle blue tint (works over both light and dark surfaces). */
-.all-sources-link {
+/* "Special" sidebar entries — "All sources" and the Keep/Deleted folders —
+ share a distinct look (bold + subtle blue tint) to set them apart from the
+ individual sources. */
+.all-sources-link,
+.folder-link {
font-weight: 600;
}
-.all-sources-link:not(.selected) {
+.all-sources-link:not(.selected),
+.folder-link:not(.selected) {
background: rgba(74, 110, 168, 0.14);
}
-.all-sources-link:not(.selected):hover {
+.all-sources-link:not(.selected):hover,
+.folder-link:not(.selected):hover {
background: rgba(74, 110, 168, 0.22);
}
diff --git a/templates/artifacts/feed.html b/templates/artifacts/feed.html
index a8e9cca..daa2182 100644
--- a/templates/artifacts/feed.html
+++ b/templates/artifacts/feed.html
@@ -73,7 +73,7 @@
{% if selected_folder == 'deleted' %}
Empty Trash
{% else %}
- {{ artifacts|length }} artifact{{ artifacts|length|pluralize }}
+ {{ artifacts|length }} message{{ artifacts|length|pluralize }}
{% endif %}
@@ -82,7 +82,7 @@
{% include "artifacts/_day_groups.html" with has_more=older_count next_before=window_start|date:"Y-m-d" %}
{% else %}
-
No artifacts
+
No messages
Nothing in the last {{ 7 }} days for these filters.
{% endif %}
@@ -94,7 +94,7 @@
- {% if selected_artifact %}{{ selected_artifact.title }}{% else %}No artifact loaded{% endif %}
+ {% if selected_artifact %}{{ selected_artifact.title }}{% else %}No message loaded{% endif %}
Rendered
@@ -124,8 +124,8 @@
{% elif selected_artifact.kind == "binary" %}
-
Binary Artifact
-
This artifact type cannot be previewed inline yet.
+
Binary Message
+
This message type cannot be previewed inline yet.
Open or download it .
{% else %}
@@ -135,10 +135,10 @@
{% else %}
{% if artifacts %}
-
No artifact loaded
-
Press Right Arrow or select an artifact from the middle column to preview it.
+
No message loaded
+
Press Right Arrow or select a message from the middle column to preview it.
{% else %}
-
No artifacts for this day
+
No messages for this day
This day is ready for new agent output.
{% endif %}
@@ -239,7 +239,7 @@
try {
await navigator.clipboard.writeText(absoluteUrl);
} catch {
- window.prompt("Copy artifact link", absoluteUrl);
+ window.prompt("Copy message link", absoluteUrl);
}
const original = button.textContent;
button.textContent = "Copied";
@@ -348,7 +348,7 @@
if (!actions) return;
const previewTitle = actions.querySelector("[data-preview-title]");
if (previewTitle) {
- previewTitle.textContent = "No artifact loaded";
+ previewTitle.textContent = "No message loaded";
previewTitle.removeAttribute("title");
}
actions.querySelectorAll("[data-view]").forEach((link) => {
@@ -484,7 +484,7 @@
const header = document.querySelector(".artifact-sidebar .pane-heading span");
if (!header) return;
const total = Math.max(0, (parseInt(header.textContent, 10) || 0) + delta);
- header.textContent = `${total} artifact${total === 1 ? "" : "s"}`;
+ header.textContent = `${total} message${total === 1 ? "" : "s"}`;
};
const bumpFolderCount = (folder, delta) => {
@@ -632,7 +632,7 @@
: kind === "image"
? ` `
: kind === "binary"
- ? ``
+ ? ``
: ``;
previewBody.innerHTML = `${content}
`;
@@ -647,7 +647,7 @@
}
allRows().forEach((candidate) => candidate.classList.remove("selected"));
disableActions();
- previewBody.innerHTML = `No artifact loaded Press Right Arrow or select an artifact from the middle column to preview it.
`;
+ previewBody.innerHTML = `No message loaded Press Right Arrow or select a message from the middle column to preview it.
`;
window.history.pushState({}, "", noPreviewUrl());
const currentSource = document.querySelector(".source-link.selected");
if (currentSource) currentSource.focus({preventScroll: true});
@@ -885,7 +885,7 @@
const header = document.querySelector(".artifact-sidebar .pane-heading span");
if (header) {
const total = (parseInt(header.textContent, 10) || 0) + data.count;
- header.textContent = `${total} artifact${total === 1 ? "" : "s"}`;
+ header.textContent = `${total} message${total === 1 ? "" : "s"}`;
}
} catch {
// ignore; retry next tick
diff --git a/templates/artifacts/settings_about.html b/templates/artifacts/settings_about.html
index c2a49ef..d7b536d 100644
--- a/templates/artifacts/settings_about.html
+++ b/templates/artifacts/settings_about.html
@@ -10,11 +10,11 @@
A self-hosted, multi-user journal where AI agents, scripts, or people
- publish artifacts — reports, HTML, decks, images, PDFs, JSON, CSV — and each
+ publish messages — reports, HTML, decks, images, PDFs, JSON, CSV — and each
logged-in user browses their own time-ordered, label-filterable feed. The
server owns IDs, styling, and storage; agents publish content, not files.
- Post to it with a personal API token from
- Settings → Account; the current API capabilities (including this
- version) are available at /api/capabilities.
+ Post to it with a personal API key from
+ Settings → API Keys; the current API capabilities (including
+ this version) are available at /api/capabilities.
{% endblock %}
diff --git a/templates/artifacts/settings_demo_data.html b/templates/artifacts/settings_demo_data.html
index 4726753..6375e2d 100644
--- a/templates/artifacts/settings_demo_data.html
+++ b/templates/artifacts/settings_demo_data.html
@@ -2,7 +2,7 @@
{% block settings_content %}
Demo Data
- Generate one sample artifact of every supported kind (markdown, HTML fragment, full HTML, deck, image, PDF, binary), tagged "demo" and dated today.
+ Generate one sample message of every supported kind (markdown, HTML fragment, full HTML, deck, image, PDF, binary), tagged "demo" and dated today.
- {{ artifact_count }} artifact{{ artifact_count|pluralize }} total
+ {{ artifact_count }} message{{ artifact_count|pluralize }} total
{{ kept_count }} kept ({{ kept_bytes|filesizeformat }}) — never auto-deleted
- When your quota fills, the oldest unkept artifacts are deleted
- automatically to make room for new ones. Click Keep on an artifact
- to protect it. If the quota is full of kept artifacts, new posts are rejected until
+ When your quota fills, the oldest unkept messages are deleted
+ automatically to make room for new ones. Click Keep on a message
+ to protect it. If the quota is full of kept messages, new posts are rejected until
you free space.
@@ -26,7 +26,7 @@
Admin
Total quota allocated across all users: {{ total_allocated|filesizeformat }}
- Free space on the artifact disk: {{ disk_free|filesizeformat }}
+ Free space on the storage disk: {{ disk_free|filesizeformat }}
{% if total_allocated > disk_free %}