fix: og:image URL double-prefixed by socialImageUrl when pageMeta.imageUrl is absolute
socialImageUrl prepended FRESH_PUBLIC_SITE_URL even when the input was
already an absolute https:// URL, producing a broken double-prefixed OG
image URL that crawlers (Bluesky, Slack, etc.) could not resolve.
Fixes:
- socialImageUrl now returns early if the path already starts with http(s)://
- Simplify [handle].tsx to pass a root-relative path for ogImageUrl so
socialImageUrl correctly makes it absolute in all environments
- Add og:image:secure_url + og:image:type meta tags (Bluesky prefers these)
- Pass imageType, imageWidth, imageHeight explicitly from project banner
Made-with: Cursor