board: no new-card pulse for fresh journal entries

Closing a new journal entry briefly flashed the card with the
1× local-created pulse. Journal entries are daily-log noise, not
"look at this new thing" moments, so the flash reads as clutter.
Detect journals at pulse time (title starts YYYY-MM-DD, no
termin/geburtstag, no caldav_uid, no " — <summary>" suffix —
mirrors calendar.js isJournal) and drop them from the pulse set.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
thandClaude Opus 4.6 committed 2026-04-15 21:51:23 +02:00
1 parent 412dc527a3
commit c9749352ec
3 files changed
+18 -3

No files matched your search

+1 -1
View File
@@ -1,7 +1,7 @@
<?php
define('APP_NAME', 'hyprcrd');
define('APP_VERSION', '1.9.14');
define('APP_VERSION', '1.9.15');
// Database path — writable directory, outside webroot
// DB_PATH / UPLOAD_DIR can be pre-defined by the Electron router for app isolation
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "hyprcrd",
"version": "1.9.14",
"version": "1.9.15",
"description": "hyprcrd — self-hosted card manager",
"main": "main.js",
"scripts": {
+16 -1
View File
@@ -768,9 +768,24 @@ export function renderBoard() {
// Pulse locally-created cards in ANY bucket (1× subtle pulse).
// These never enter unseenCardIds so they can't trigger the all-tab
// dot — the user just made them, there's nothing "unseen" about it.
// Journal entries are exempt from the pulse entirely — they're daily
// log jottings, not "here's a new thing" moments, so the flash
// reads as noise. Detection mirrors calendar.js isJournal: title
// begins with YYYY-MM-DD, no termin/geburtstag tag, no caldav_uid,
// and no " — <summary>" suffix (which denotes an appointment).
if (newLocalIds.size) {
for (const id of newLocalIds) state.recentlyCreatedIds.delete(id);
pulseCards(newLocalIds, 'card-pulse-local');
const toPulse = new Set();
for (const id of newLocalIds) {
const card = state.cards.find(c => String(c.id) === id);
if (!card) continue;
const isJournal = /^\d{4}-\d{2}-\d{2}$/.test((card.title || '').trim())
&& !/^\d{4}-\d{2}-\d{2}\s*[—-]\s*.+/.test(card.title || '')
&& !card.caldav_uid
&& !(card.tags || '').split(',').some(t => t === 'termin' || t === 'geburtstag');
if (!isJournal) toPulse.add(id);
}
if (toPulse.size) pulseCards(toPulse, 'card-pulse-local');
}
// Remote (relay-synced) cards: pulse 3× only when the user is on
// the all view. On other views, the unseen ids accumulate and