Update/share button (#352)
* refactor to simplify, tweaks to quote handling * getting rid of unnecessary claude-isms * updates to make sure it works in publish flow * add some loading placeholder and a link to bsky post on sscccess * fix NEXT_REDIRECT error logged by icon route fallback redirect() from next/navigation throws NEXT_REDIRECT, which the route's own try/catch intercepted and logged as an error. Use NextResponse.redirect instead, which returns a response without throwing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * only fetch user recommendations for logged-in users, and only once Skip get_user_recommendations entirely when logged out (the server returns nothing anyway) and stop SWR revalidating on focus/reconnect/ remount — the user's own recommendation state only changes through their own clicks, which already update the cache. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * prefetch share card screenshots, fix quote framing, drop sharp resize - prefetch the card screenshot from the new /api/quote_screenshot route while the share modal is open, show a pulsing placeholder in the preview card, and hand the result to publish so posting doesn't block on a fresh browser render - share the canonical post url (publication domain) instead of window.location.href - restore the /l-quote og-image framing for quote screenshots (small viewport at 2x scale, JS disabled) — the share modal flow was screenshotting quotes with the zoomed-out 1400x733 whole-page framing - capture at exactly 1200x630 and have cloudflare emit the webp directly, removing the sharp resize pass Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: celine <celine@hyperlink.academy> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>