Our blog index loads more cards as you scroll. There’s no “Load more” button.
The shape of the API
We keep it simple:
GET /blog/posts.json?offset=8&limit=8&category=engineering The sentinel pattern
const io = new IntersectionObserver(([entry]) => {
if (entry.isIntersecting) loadMore();
});
io.observe(sentinel); Optional: virtualization
If you ever have thousands of posts, add virtualization. Until then, pagination is enough.