Uh oh!
There was an error while loading. Please reload this page.
improvement(landing): SSR-friendly URL-state filters + cleanup pass + polish - #5298
Conversation
…memos, changelog useInfiniteQuery - emcn: collapse 29 square h-N w-N pairs to size-* across models/integrations/blog/faq/landing-preview - landing-preview: remove redundant animationKeyRef (functional setState) + dead isDesktopRef - model-directory: hoist static provider options to a module const - auth-modal: drop useMemo over the cheap getBrandConfig() call - changelog: replace useState+fetch pagination with a co-located useInfiniteQuery hook (first page stays SSR-seeded via initialData)
…back bump - integrations grid, models directory: search + category/provider filters now live in the URL (nuqs useQueryStates), server-parsed via createSearchParamsCache so filtered views render server-side (crawlable, shareable) — mirrors the blog index SSR pattern. Search URL writes debounced; in-memory filtering stays instant. - pricing: billing-period toggle moves to ?billing=annual (shareable, no flash). - co-located search-params.ts per page as the single source of truth (server + client). - stars: bump fallback floor 28800 -> 28900 to track the current count.
Replace brandbook/logo/small.png — referenced only by the 'Start automating
{service} today' CTA on integration pages — with the black-on-light sim mark so
the tile reads as a neutral brand mark beside the partner icon instead of a green
block.Drop the scale-150 + brightness-75 hover (a 50% size jump plus a muddy darken) for an understated opacity-fill (0.85 -> 1) with a slight scale-110, matching the comparison chart's opacity-driven hover language.
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryLow Risk Overview Alongside that, a behavior-neutral cleanup pass: square Polish: model release-timeline dot hover is subtler (opacity + slight scale), GitHub star fallback floor bumps to 28900, and integration bottom CTA uses the neutral Sim mark asset. Reviewed by Cursor Bugbot for commit 5370824. Configure here. |
Uh oh!
There was an error while loading. Please reload this page.
Greptile SummaryThis PR updates the landing pages with URL-backed filters and cleanup.
Confidence Score: 5/5This looks safe to merge.
Important Files Changed
Reviews (3): Last reviewed commit: "revert(landing): keep the original chang..." | Re-trigger Greptile |
Uh oh!
There was an error while loading. Please reload this page.
…op inline comments - changelog: getNextPageParam no longer treats an empty server-seeded page 1 as end-of-feed, so a failed/empty initial GitHub fetch still surfaces 'Show more' (addresses Cursor Bugbot). - replace the inline comments added in this branch with TSDoc on the search-param caches (documents the dynamic-render → SSR-filtered behavior), per the codebase's TSDoc-only convention.
waleedlatif1
commented
Jun 30, 2026
@greptile review |
waleedlatif1
commented
Jun 30, 2026
@cursor review |
Uh oh!
There was an error while loading. Please reload this page.
…teQuery) The React Query conversion of an SSR-seeded, cross-origin, infrequently-changing paginated list introduced caching edge cases (empty-seed load-more, singleton cache serving stale page 1 on client-side nav) without real benefit. Restore the original useState(initialEntries)+fetch timeline, which is simpler, correct, and already review-clean from #5181.
waleedlatif1
commented
Jun 30, 2026
@greptile review |
waleedlatif1
commented
Jun 30, 2026
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 5370824. Configure here.
Uh oh!
There was an error while loading. Please reload this page.
Summary
Post-merge cleanup and polish for the landing surface (follows #5181). Quality-only where it touches existing behavior; the one functional change (URL-state filters) is implemented the SSR-friendly way so SEO and shareability both improve.
Code-quality cleanup (behavior-identical)
h-N w-Npairs to thesize-*shorthand across models / integrations / blog / FAQ / landing-preview.landing-preview: drop a redundantanimationKeyRef(use a functionalsetState) and a dead write-onlyisDesktopRef.model-directory: hoist a staticuseMemoto a module constant.auth-modal: drop auseMemoover the cheapgetBrandConfig().changelog: replaceuseState+fetchpagination with a co-locateduseInfiniteQueryhook. The first page stays SSR-seeded viainitialData(no SEO loss); search/abort unaffected.URL-state filters via nuqs (SSR-friendly)
useQueryStates), with a co-locatedsearch-params.tsas the single source of truth and server-sidecreateSearchParamsCache.parsein the page so filtered views render server-side — crawlable and shareable, no Suspense content-drop. Mirrors the existing/blogSSR pattern. Search URL writes are debounced; in-memory filtering stays instant.?billing=annual(shareable, server-rendered, no toggle flash)./blog. They render from in-memory constants, so the render is cheap.Polish
simtile with the neutral black-on-lightsimmark (asset referenced only by that CTA).scale-150+brightness-75for an understated opacity-fill + slight scale, matching the comparison chart's hover language.28800 → 28900to track the current count.Testing
bunx tsc --noEmit— cleanbiome check— cleannext build— 712/712 pages generated, 0 errors;/integrations,/models,/models/[provider],/pricingconfirmed dynamic (server-rendered on demand)Type of Change