diff options
| author | Adam Soltys <[email protected]> | 2026-09-27 20:00:16 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-09-27 20:00:16 -0700 |
| commit | 5b64b345cf533515c331bae5eb500609347c3415 (patch) | |
| tree | a68567245bf7384df6c97ae85e7d36d7e894e44b /src/app.js | |
| parent | 5f5e92e05672c8a985c98a9d062b4a122a714912 (diff) | |
| download | coinosv3-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.js | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -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) { |
