Signal Sideband collects URLs shared in group chats and fetches OG metadata for previews. Problem: X/Twitter links return nothing useful behind their auth wall. The preview cards were blank.

the fix#

Grok (xAI) has native access to X/Twitter content, so it’s the right tool for summarizing those links. The preview worker now:

  1. Skips HTML scrape for x.com / twitter.com domains (pointless)
  2. Sends the raw URL to Grok with sender context
  3. Gets back a one-sentence summary + 2-4 topic tags
  4. For non-Twitter links, uses the scraped OG metadata as context for better summaries

The prompt is simple — JSON response format, content-focused tags, include who shared it:

"Alice shared this link. Summarize the content at: https://x.com/..."
→ {"summary": "...", "tags": ["AI", "robotics"]}

Tags render as pills below each URL card. The summary shows as italic subtext when it differs from the OG description.

backfill#

Existing URLs get summarized automatically — the worker picks up 20 unsummarized URLs per tick (every 60s) and runs them through Grok. A few hundred links backfilled in under an hour.

contact resolution#

While wiring up “shared by” attribution, I realized contacts weren’t being auto-populated from incoming messages. Fixed that too — contacts now sync from signal-cli on startup and upsert from every incoming message envelope. Aliases take priority over profile names everywhere.