v0.6: cross-platform feed on the dashboard, home units, napkin

dashboard.html — Feed and Timeline swap places; Feed is every platform's
capture now, not Twitter intel, so rows carry their own platform glyph and an
unknown platform renders neutral rather than being dropped. A row whose ts is
really first_seen reads "seen X ago": saying "just now" for a post of unknown
age is a lie that sorts it to the top.

dashboard.json — regenerated by the refresher; _yt_caveat dropped, the
activate fix made it stale.

deploy/home — dash, openbridge, refresh service and timer for this desktop.
Refresh every 30min with --skip-foreground, not kdmirah's 10min full pass:
there is a human at this box and the metrics table only needs enough
resolution to watch engagement move. No Restart= on the oneshot — a down
browser is a waiting state the refresher records and exits 0 for.

NAPKIN.md — the whiteboard: measured delay budget, the background-render
table, the three landmines earned (a DOM signal is a rendering question, %z
cannot come back out of struct_time, a pure time sort is not a feed), and the
open calls.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-13 01:58:45 +08:00
co-authored by Claude Opus 5
parent 22e63ebf35
commit 15f3388e5e
7 changed files with 883 additions and 103 deletions
+15
View File
@@ -0,0 +1,15 @@
[Unit]
Description=socialmag refresh every 30 minutes
[Timer]
# 2 min after boot so Brave has a chance to be up; a pass that finds no browser
# still records the unknown state rather than skipping.
OnBootSec=2min
OnUnitActiveSec=30min
# A pass takes ~28s with --skip-foreground. 30min is the desktop number, not
# kdmirah's 10min: this box has a human at it, and the metrics table only needs
# enough resolution to watch engagement move, not to watch it live.
Persistent=true
[Install]
WantedBy=timers.target