aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-09-27 20:00:16 -0700
committerAdam Soltys <[email protected]>2026-09-27 20:00:16 -0700
commit5b64b345cf533515c331bae5eb500609347c3415 (patch)
treea68567245bf7384df6c97ae85e7d36d7e894e44b /src/app.js
parent5f5e92e05672c8a985c98a9d062b4a122a714912 (diff)
downloadcoinosv3-5b64b345cf533515c331bae5eb500609347c3415.tar.gz
coinosv3-5b64b345cf533515c331bae5eb500609347c3415.zip
Every feed has a public URL, and anyone can read it without a wallet.
/feed/<npub> is the timeline that person sees: their follow list, read from the relays, as a feed. /feed/<naddr> is a follow pack or a follow set, /feed/t/<tag> a topic, and /feed?p=…&t=…&pack=…&name=… any mix. A visitor gets the feed over the front door, can open a post's thread and come back; the composer, chips and editing stay with a wallet. Every feed has a Share button (the built-in Following shares as your own timeline), a profile page has "Their timeline", and Back/Forward walk through feeds by id. Public pages used to miss their repaint: the scheduler only painted the wallet screen, so a visitor's feed filled up invisibly. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01VhUKyXKtsJ67QAFfb7QR9D
Diffstat (limited to 'src/app.js')
-rw-r--r--src/app.js4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/app.js b/src/app.js
index 271667c..5d6eb40 100644
--- a/src/app.js
+++ b/src/app.js
@@ -730,7 +730,7 @@ wallet.subscribe(scheduleRender);
// lightbox: a full-screen photo is a place too — the phone's Back must close
// it, not pop the screen under it (which once walked a viewer straight back
// to the start page, so the photo's × then looked like a logout).
-const NAV_FIELDS = ['screen', 'tab', 'txDetail', 'arkMoveDetail', 'arkReconDetail', 'arkExitDetail', 'giftDetail', 'bump', 'giftMode', 'claimStep', 'chatOpen', 'msgView', 'msgCommunity', 'msgPeer', 'profilePk', 'profEdit', 'profEditFilled', 'profOverThread', 'settingsPage', 'nameEditOpen', 'noteThread', 'userSearch', 'zapSetup', 'hatShop', 'lightbox'];
+const NAV_FIELDS = ['screen', 'tab', 'txDetail', 'arkMoveDetail', 'arkReconDetail', 'arkExitDetail', 'giftDetail', 'bump', 'giftMode', 'claimStep', 'chatOpen', 'msgView', 'feedId', 'msgCommunity', 'msgPeer', 'profilePk', 'profEdit', 'profEditFilled', 'profOverThread', 'settingsPage', 'nameEditOpen', 'noteThread', 'userSearch', 'zapSetup', 'hatShop', 'lightbox'];
function navSnapshot() {
const s = {};
for (const f of NAV_FIELDS) s[f] = ui[f] ?? null;
@@ -762,6 +762,8 @@ let restoringHistory = false; // true while applying a popstate (suppresses push
const OWN_PATH = /^\/(nevent|note|npub)1[a-z0-9]+\/?$/i;
function navUrl(snap) {
try {
+ const fp = featureHook('navPath', snap); // a feed with a public address
+ if (fp) return fp;
const th = snap.noteThread;
if (snap.profilePk && (snap.profOverThread || !th)) return '/' + npubOf(snap.profilePk);
if (th && th.focusId) {