diff --git a/www/feed.html b/www/feed.html
index 45397c8..658cb16 100644
--- a/www/feed.html
+++ b/www/feed.html
@@ -488,21 +488,33 @@ import { initPostCards } from './js/post-interactions2.mjs';
return false;
}
- // Only prepend if the post is newer than the first currently visible post.
- const firstChild = divFeed.firstElementChild;
- const firstPostId = firstChild ? firstChild.getAttribute('data-post-id') : null;
- const firstPost = firstPostId ? posts.find((p) => p.id === firstPostId) : null;
+ const postCreatedAt = post.created_at || 0;
- if (!firstPost || (post.created_at || 0) < (firstPost.created_at || 0)) {
- // Post is older than the first visible post (or unknown) — full rebuild for safety.
- renderFeed();
- return false;
+ // Find the correct insertion point by scanning visible children's created_at.
+ // Posts are displayed newest-first, so we insert before the first child
+ // that is older than (or equal to) the new post.
+ const postEl = cards.createCard(post, { currentPubkey, autoWire: false, autoplayVideo: autoplayVideosEnabled });
+ let inserted = false;
+
+ for (const child of divFeed.children) {
+ const childId = child.getAttribute('data-post-id');
+ if (!childId) continue;
+ const childPost = posts.find((p) => p.id === childId);
+ if (!childPost) continue;
+ const childCreatedAt = childPost.created_at || 0;
+ if (postCreatedAt >= childCreatedAt) {
+ divFeed.insertBefore(postEl, child);
+ inserted = true;
+ break;
+ }
}
- const postEl = cards.createCard(post, { currentPubkey, autoWire: false, autoplayVideo: autoplayVideosEnabled });
- divFeed.insertBefore(postEl, divFeed.firstChild);
- renderedPostIds.add(post.id);
+ if (!inserted) {
+ // Post is older than all visible posts — append at the bottom.
+ divFeed.appendChild(postEl);
+ }
+ renderedPostIds.add(post.id);
cards.wireInteractions([post.id], { currentPubkey });
// Trim DOM to displayCount.
@@ -543,7 +555,11 @@ import { initPostCards } from './js/post-interactions2.mjs';
(Array.isArray(fresh) ? fresh : []).forEach((evt1) => {
upsertFeedPost(evt1);
});
- if (posts.length > 0) {
+ // Only do a full re-render if the feed hasn't been rendered yet.
+ // If the feed is already rendered, the posts are in the array and
+ // will appear when the user clicks "See More" or on next full render.
+ // This prevents the relay fetch callback from wiping prepended live posts.
+ if (posts.length > 0 && renderedPostIds.size === 0) {
renderFeed();
}
}).catch(() => {});
diff --git a/www/js/version.json b/www/js/version.json
index 1b6226b..7f8aa53 100644
--- a/www/js/version.json
+++ b/www/js/version.json
@@ -1,5 +1,5 @@
{
- "VERSION": "v0.7.85",
- "VERSION_NUMBER": "0.7.85",
- "BUILD_DATE": "2026-07-01T11:59:39.440Z"
+ "VERSION": "v0.7.86",
+ "VERSION_NUMBER": "0.7.86",
+ "BUILD_DATE": "2026-07-01T13:22:33.456Z"
}
diff --git a/www/post.html b/www/post.html
index f90e67c..b2939e4 100644
--- a/www/post.html
+++ b/www/post.html
@@ -667,21 +667,33 @@ import { initPostCards } from './js/post-interactions2.mjs';
return false;
}
- // Only prepend if the post is newer than the first currently visible post.
- const firstChild = divFeed.firstElementChild;
- const firstPostId = firstChild ? firstChild.getAttribute('data-post-id') : null;
- const firstPost = firstPostId ? posts.find((p) => p.id === firstPostId) : null;
+ const postCreatedAt = post.created_at || 0;
- if (!firstPost || (post.created_at || 0) < (firstPost.created_at || 0)) {
- // Post is older than the first visible post (or unknown) — full rebuild for safety.
- renderFeed();
- return false;
+ // Find the correct insertion point by scanning visible children's created_at.
+ // Posts are displayed newest-first, so we insert before the first child
+ // that is older than (or equal to) the new post.
+ const postEl = cards.createCard(post, { currentPubkey, autoWire: false, autoplayVideo: false });
+ let inserted = false;
+
+ for (const child of divFeed.children) {
+ const childId = child.getAttribute('data-post-id');
+ if (!childId) continue;
+ const childPost = posts.find((p) => p.id === childId);
+ if (!childPost) continue;
+ const childCreatedAt = childPost.created_at || 0;
+ if (postCreatedAt >= childCreatedAt) {
+ divFeed.insertBefore(postEl, child);
+ inserted = true;
+ break;
+ }
}
- const postEl = cards.createCard(post, { currentPubkey, autoWire: false, autoplayVideo: false });
- divFeed.insertBefore(postEl, divFeed.firstChild);
- renderedPostIds.add(post.id);
+ if (!inserted) {
+ // Post is older than all visible posts — append at the bottom.
+ divFeed.appendChild(postEl);
+ }
+ renderedPostIds.add(post.id);
cards.wireInteractions([post.id], { currentPubkey });
// Trim DOM to displayCount.