commits
- .built-with hides the "built with" label and shrinks badges on
≤520px so wisp.place / relay.waow.tech / typeahead.waow.tech fit
in a single no-wrap row across every phone size.
- search input bumped to 16px (iOS Safari auto-zooms any input with
font-size < 16px on focus).
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
some knots (notably knot.pdsls.dev) emit refUpdate events with
committerDid: "" — their pushes were silently dropped by the indexer.
falling back to ownerDid / repoDid credits the repo owner, which is
the best attribution we can get when the committer is blank. catches
juliet.paris and the other knot.pdsls.dev residents.
cursor for knot.pdsls.dev has been reset so next cron tick re-drains
from 0 with the new rule.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
dolly icon top-right is the source link now. stack badges get
white-space:nowrap + flex:0 0 auto so they never break mid-domain,
and a sub-380px media query shrinks the font slightly so `typeahead.waow.tech`
fits without spilling past the cabinet edge.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
previous fix made every request return updatedAt=now, which always
rendered as "just now" in the UI regardless of actual data
freshness. pulling from meta.last_published_at (set at end of each
cron tick) means the clock advances in ~10 min jumps matching cron
cadence, which is what a "last updated" timestamp should show.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
caching the built payload in KV pinned updatedAt to the last cron
build-time, so every fetch between ticks read as '10 minutes ago'.
now that the build is a single D1 JOIN, cost of per-request build
is trivial and updatedAt always reflects the moment of the fetch.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
the KV approach did 1,651 parallel gets per build, blowing past the
worker 1,000-subrequest ceiling. the scheduled handler was silently
getting cut before it could cache the payload — explains why cron
kept firing but last_published_at never advanced.
handles now live in D1, render is a LEFT JOIN on pushes + handles,
single query. cascade logic writes to D1 via UPSERT. KV is unused
for this worker now.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
drops the in-cycle wispctl publish step in favor of KV-cached payload
served from the worker's fetch handler. wisp's 10-min edge cache was
the reason the UI lagged behind the data layer; fetching from the
worker bypasses that entirely.
bun run publish now ships only html/css/js; the leaderboard file is no
longer part of the wisp manifest.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
stops local deploys from clobbering the worker's fresh json with a stale
copy on disk. leaderboard.json now gitignored; cf worker is its only writer.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
.status had display:flex which beat the UA [hidden] { display: none }
rule, leaving an empty dashed frame visible whenever data.status was
null.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
static site rendered from an incrementally-drained index of every
sh.tangled.git.refUpdate event emitted by every knot. ranks by push
count per committerDid. ships to wisp.place; publishes on a 30-min
loop from a fly worker.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
- .built-with hides the "built with" label and shrinks badges on
≤520px so wisp.place / relay.waow.tech / typeahead.waow.tech fit
in a single no-wrap row across every phone size.
- search input bumped to 16px (iOS Safari auto-zooms any input with
font-size < 16px on focus).
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
some knots (notably knot.pdsls.dev) emit refUpdate events with
committerDid: "" — their pushes were silently dropped by the indexer.
falling back to ownerDid / repoDid credits the repo owner, which is
the best attribution we can get when the committer is blank. catches
juliet.paris and the other knot.pdsls.dev residents.
cursor for knot.pdsls.dev has been reset so next cron tick re-drains
from 0 with the new rule.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
dolly icon top-right is the source link now. stack badges get
white-space:nowrap + flex:0 0 auto so they never break mid-domain,
and a sub-380px media query shrinks the font slightly so `typeahead.waow.tech`
fits without spilling past the cabinet edge.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
previous fix made every request return updatedAt=now, which always
rendered as "just now" in the UI regardless of actual data
freshness. pulling from meta.last_published_at (set at end of each
cron tick) means the clock advances in ~10 min jumps matching cron
cadence, which is what a "last updated" timestamp should show.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
caching the built payload in KV pinned updatedAt to the last cron
build-time, so every fetch between ticks read as '10 minutes ago'.
now that the build is a single D1 JOIN, cost of per-request build
is trivial and updatedAt always reflects the moment of the fetch.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
the KV approach did 1,651 parallel gets per build, blowing past the
worker 1,000-subrequest ceiling. the scheduled handler was silently
getting cut before it could cache the payload — explains why cron
kept firing but last_published_at never advanced.
handles now live in D1, render is a LEFT JOIN on pushes + handles,
single query. cascade logic writes to D1 via UPSERT. KV is unused
for this worker now.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
drops the in-cycle wispctl publish step in favor of KV-cached payload
served from the worker's fetch handler. wisp's 10-min edge cache was
the reason the UI lagged behind the data layer; fetching from the
worker bypasses that entirely.
bun run publish now ships only html/css/js; the leaderboard file is no
longer part of the wisp manifest.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>