Agent rule
Capture 1200×630 first-fold screenshots with Playwright (scripts/capture-page-shots.js), upload to Supabase Storage bucket og-shots, and use the public Storage URL as og:image / twitter:image and as pipeline image for manual download+attach. Prefer shots over /api/og when config/page-shots.json has an entry. Intents cannot attach media — always Download image then attach in X/LinkedIn compose. No paid social APIs.
Status: Accepted
Context: /api/og burned Vercel Hobby function invocations on every crawler prefetch. Pipelines needed real page visuals in posts, not designed cards only.
Decision:
- Bucket
og-shots(public read; upsert via service role preferred, anon upsert allowed for capture scripts when service role missing) - Index:
config/page-shots.json— URL →{ slug, publicUrl, capturedAt } social-draft.jscopiesimageonto queue items;/pipeline+/linkedinshow thumbnail + Download imageresolveOgImage()inog-url.js+sync-page-shots.js/ capture script rewrite HTML meta/api/ogstays as fallback for uncaptured pages (ADR-025)
Consequences: playwright is a devDependency. Run capture before drafting/posting. Prefer SUPABASE_SERVICE_ROLE_KEY for uploads; restore empty Production service-role values on Vercel when possible.