perf: combined feed index for multi-user global feed

Instead of the browser resolving 20+ user shards recursively (~27 MB),
generate a pre-sorted feed.json at merge time with 50 activities per
page. The global feed loads one ~30 KB file on first paint; "Load more"
fetches subsequent pages (feed-2.json, feed-3.json, etc.).

Per-user profile pages still use year-sharded loadIndexPaged as before.
This commit is contained in:
Davide Scaini
2026-04-20 15:31:35 +02:00
parent e8a5fbbaba
commit db7047f210
4 changed files with 160 additions and 8 deletions
+5
View File
@@ -133,6 +133,11 @@ def _write_root_manifest(data: Path) -> None:
root.write_text(json.dumps(manifest, indent=2))
console.print(f"Root manifest updated: [cyan]{len(users)}[/cyan] user shard(s)")
if len(users) > 1:
from bincio.render.merge import write_combined_feed
n = write_combined_feed(data)
console.print(f"Combined feed: [cyan]{n}[/cyan] activities across all users")
def _link_data(site: Path, data: Path) -> None:
"""Symlink site/public/data → data root (each user has their own _merged/)."""