82 Commits
Author SHA1 Message Date
travandClaude Opus 5 fc9539a618 /items shows items only, not custody transfers
A `nft: "give"` message is a change of custody, not a thing. It has no photo of
its own, so it borrowed the photo of the item it transferred - which meant the
same object appeared on the grid twice, a few cards apart, distinguished only
by a dimmed image and an id overlay. That reads as a duplicate, not as a
hand-off.

Custody is better answered one level down. Each card already links to its
item's thread, where the mint and every hand-off since are in order, with the
steward resolved. So the overlay was showing a truncated feed id on the grid to
save a click that is worth making.

Filters on nft === "mint" rather than excluding gives: every custodisco message
carries one of the two - checked across all 407 - so matching mint is exact.
301 items from 3 feeds, down from 407 entries.

The feed count now counts feeds that actually contributed an item rather than
the size of the follow set. The pub follows itself and publishes no items, so
the old number was one too high and would have drifted further as feeds get
followed for other reasons.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0192zBTNZKZn5svyJ5HTnYds
2026-08-22 20:30:46 -04:00
travandClaude Opus 5 cc0ad8c1a8 Add /items: one merged grid of every item the pub knows about
cust.ooo linked to one viewer page per kiosk, so every new kiosk meant
another hand-added link. /items selects on "whatever this pub follows"
instead: follow a new kiosk from the pub and its items appear on the next
cache miss, with no code change and no edit to the site.

serveUserFeed already reduced a feed's contact messages into a follow set;
that moves to lib/follows.js so both routes share one implementation rather
than drifting. It also picks up a fix on the way: the old filter passed
messages with no .value through and then dereferenced .value.content on them.

Two properties of the data drive items.js, both verified against the live log
and both quietly wrong to assume otherwise:

  * custodisco is the STRING "true", not a boolean.
  * no custo message has ever set content.channel, so the channel index finds
    nothing and the filter has to read content fields directly. This is why
    /channel/custodisco renders an empty page.

Log order is arrival order, which diverges from publish order whenever an old
feed is backfilled, so the collected set is sorted by timestamp. That makes
"newest first" and the ?before cursor agree; verified as zero overlap between
consecutive pages.

Cards rather than articles: 300 photos in a single column reads like a mailing
list, not an archive. A transfer borrows the photo of the item it transfers and
links to that item's thread, so the grid stays regular and the give is still
legible as a hand-off. Images are lazy, and 267 blobs are held against 301
mints, so a missing photo degrades to a placeholder instead of a broken icon.

serveHome now shows the grid instead of a bare id-lookup box, which was a dead
end for anyone arriving without an id already in hand. The ?id= redirect stays.

The footer commit now comes from .deployed-commit, written by the deploy
script. Deploys are rsync, so the server's checkout keeps whatever HEAD it was
cloned at and `git rev-parse` there names a commit unrelated to the files
actually running.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0192zBTNZKZn5svyJ5HTnYds
2026-08-22 19:40:27 -04:00
ops f7f1c30eae serveBlob: only serve blobs referenced by feeds we replicate
serveBlob handed any held blob to anyone who knew its hash, on a public
port with require_opt_in:false. Combined with ssb-blobs sympathy that
meant publicly serving 4.6GB of strangers content we never reviewed.

Maintains a set of blob ids referenced by the local log (small, ~360KB,
rescanned every 5 min) and 404s anything outside it. Fails open until the
first scan completes so a read error cannot 404 the whole site.

Verified: a blob present on disk but referenced by no message returns
blobs.has=true over RPC while the viewer 404s it.
2026-08-14 20:13:02 +00:00
cel 514c401ff1 Avoid deprecated Buffer constructor 2020-06-11 13:39:00 -04:00
cel df2a2ada6e Set cache-control immutable 2019-10-03 08:50:20 -04:00
cel ca9ab26ec6 Show content warnings 2019-08-29 13:10:59 -07:00
cel 332c09b046 Whitespace and code style consistency 2019-08-29 12:49:22 -07:00
cel ad80496c9a Decrypt private blobs 2019-01-25 12:59:04 -10:00
cel 7291151076 Make nicer host output 2018-09-02 22:20:24 -07:00
cel afabd2eacb Handle channels/hashtags in form 2018-08-22 14:38:52 -07:00
cel 4d2dd658de Add id query form on home page 2018-08-22 12:59:03 -07:00
cel 36c63bc182 Consolidate serve functions 2018-08-22 12:58:51 -07:00
cel c8c744f585 Default to disallow robots 2018-08-22 11:52:43 -07:00
cel 2c1e35be2b Fix requireOptIn option 2018-08-18 14:02:48 -07:00
cel 7123fbcab1 Default to require opt-in for publicWebHosting 2018-08-17 15:32:42 -07:00
cel ba6d7cd3ab Don't show name of publicWebHosting:false feed
All their other info is hidden, so hide the name in the title too.
2018-08-17 15:32:02 -07:00
Jacob Karlsson 3c608e0159 Add gathering title 2018-07-07 12:41:38 +02:00
Jacob Karlsson d09eab73ae Count attendees 2018-07-06 23:50:18 +02:00
Jacob Karlsson cecdc93fd3 Render gathering descriptions 2018-07-02 19:52:17 +02:00
cel 69a32cc343 Add config for Disallow: / in robots.txt 2018-04-26 19:12:22 -10:00
Anders Rune Jensen 8680189006 Make userfeed less noisy 2018-04-25 17:44:18 +02:00
Anders Rune Jensen c201e35b8d Better error handling for malformed vote messages 2018-04-25 15:58:23 +02:00
Anders Rune Jensen e525414d1f Render blog posts 2018-04-25 15:57:30 +02:00
Anders Rune Jensen 1eb1be440d Fix includeRoot. Thanks @dominic 2018-04-23 20:52:30 +02:00
Stephen Whitmore c71fb2a089 feat: serve ssb websites under /web 2018-04-16 13:59:50 -07:00
cel 728dd36ef6 whitespace 2018-04-15 20:41:44 -10:00
Dominic Tarr 08321fdd28 respect privacy better. hides who is in a private thread, does not show private messages in user feed, also does not show like/vote as thread replies 2018-04-15 13:15:08 -07:00
Anders Rune Jensen 2c29133777 Don't about in user-feed 2018-01-11 16:24:30 +01:00
Anders Rune Jensen e6bc3b037a Don't render channel subscribes in user-feed 2018-01-11 16:20:07 +01:00
Anders Rune Jensen 2dcdef60a2 Don't show private messages in user-feed, its crowded enough already 2017-12-18 21:53:17 +01:00
Anders Rune Jensen 9ba7dc35e3 Indention fix 2017-12-16 15:03:05 +01:00
cel d12d51a61f Serve ACME challenges 2017-07-24 20:43:50 -10:00
cel d9737b8da7 Merge remote-tracking branch 'origin/hyperscript' 2017-07-18 15:43:04 -10:00
Anders Rune Jensen c1d1977660 Don't die in invalid user-feed link 2017-06-29 21:37:25 +02:00
Ev BogueandAnders Rune Jensen b2c03954f0 Merge: add thread links to posts that have a root
And don't render them when rendering the thread
2017-06-25 22:18:50 +02:00
cel ee9c39f049 Merge remote-tracking branches 'origin/hyperscript' and 'angelo/render_rss' 2017-06-10 14:31:49 -10:00
Angelo DiNardi 4eee4ae728 Stop doing special rendering for RSS items, use HTML!
I missed the part of the RSS docs that allow HTML in the description.
2017-06-09 23:13:40 -07:00
Angelo DiNardi 9d1adf94d2 Merge branch 'master' of ssb://%MeCTQrz9uszf9EZoTnKCeFeIedhnKWuB3JHW2l1g9NA=.sha256 into render_rss 2017-06-09 12:52:41 -07:00
Anders Rune Jensen e042fb7933 Move show all html stuff to render 2017-06-08 20:34:36 +02:00
Angelo DiNardi cf66c7398b Rename renderItem -> renderRssItem. 2017-06-05 22:54:16 -07:00
Angelo DiNardi 8ee270f04f Make an attempt at being able to render rss 2017-06-04 23:37:14 -07:00
Anders Rune Jensen a6f218a937 Show all messages linking to a message including back links and digs 2017-05-31 21:28:44 +02:00
Anders Rune Jensen f5e2111be8 Serve more messages by default in user-feed as people seem more active :) Still a hack though 2017-05-31 21:07:52 +02:00
Anders Rune Jensen 8c420a8d3b Limit channel & feed serving by default 2017-05-20 21:37:25 +02:00
cel 2e5ff5d30a Fix handling error from getAbout 2017-05-14 16:29:54 -10:00
cel 445c573510 Merge commit 'c1b5c8d'
For About data, use most popular (d87029da1c)
instead of self-picked (dffd43f062)
2017-05-14 15:57:27 -10:00
cel 4cfbba635d Fix handling channel unsubscription 2017-05-12 12:29:05 -10:00
Anders Rune Jensen c1b5c8d356 render feed with about description and larger image on top 2017-05-12 22:28:57 +02:00
Anders Rune Jensen f49493c61f Add git messages to user feed as well 2017-05-12 21:02:56 +02:00
Anders Rune Jensen bff02dfad0 Style git messages better 2017-05-12 13:38:48 +02:00