From 3b3ccf7bcab9bf5344714fb8722667a49a06e53f Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sun, 27 Sep 2026 22:34:33 -0700 Subject: The default public feed is Popular, not the firehose: what people reacted to, in your language, with the machine posts gone. A brand-new post has no reactions yet (of 73 fresh English posts on the four relays, one had two), so Popular starts from the other end: the latest reactions, reposts and zaps, counted per post by distinct people, then the posts two or more people touched. Older pages walk the reactions back in time; new ones arrive by a two-minute poll. At the door, JSON and other machine output are dropped, and so is anything not in the reader's language (script first, then a vote of function words among the Latin-script languages the app speaks; unknown passes). The raw firehose stays at /feed/all. A language selector sits under every feed, and changing it rebuilds the curated ones. A tall video scrolled past used to let go of its media at once and collapse, shifting the page under a thumb; it now waits a moment and holds its height until the clip is back. A tap on a full-screen picture closes it. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01VhUKyXKtsJ67QAFfb7QR9D --- src/app.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/app.js') diff --git a/src/app.js b/src/app.js index 5d6eb40..d31c75c 100644 --- a/src/app.js +++ b/src/app.js @@ -557,7 +557,7 @@ function imageViewer() { return h('div', { class: 'lightbox', onClick: close, role: 'dialog', 'aria-modal': 'true', - }, h('img', { src: ui.lightbox, alt: '', onClick: (e) => e.stopPropagation() }), + }, h('img', { src: ui.lightbox, alt: '', onClick: (e) => { e.stopPropagation(); close(); } }), // a tap on the picture closes it too: the × is small and far // stop the bubble: the backdrop closes too, and two pops walk out of the room h('button', { class: 'lightbox-x', 'aria-label': t('close'), onClick: (e) => { e.stopPropagation(); close(); } }, '\u00d7')); } @@ -2821,6 +2821,7 @@ function languagePicker() { setLang(code); await loadLocale(code); // fetch the locale's strings before re-rendering applyDir(); + featureHook('langChanged'); render(); }, }, @@ -5574,7 +5575,7 @@ const ctx = { wallet.saveFeatureState('prefs', p); try { wallet.saveCache(); } catch {} }, - brandHeader, activeAccount, setAccounts: (list) => { accounts = list; }, + brandHeader, languagePicker, activeAccount, setAccounts: (list) => { accounts = list; }, getAccounts: () => accounts, claimTargets, enterWallet, activateAccount, commitAccount, // cross-feature calls (e.g. gifts asking the ark feature for ark-gift -- cgit v1.2.3