ShipLink
For teams shipping fast on Vercel

Connect Vercel Deployments to Linear & GitHub on Autopilot

ShipLink turns Vercel deployment and performance events into tracked issues — durably queued through Inngest, delivered through a tiered sliding-window rate limiter, and never silently dropped: every integration failure fails open and raises a Discord/Slack alert automatically.

Free tier included · 30 req/min · No credit card required

webhook → issue
POST/api/webhooks/vercel202 · 8ms
→ queued on Inngest, retries: 3, durable
✓ issue created
LIN-482 Checkout LCP regression detected

Built for reliability, not duct tape

The infrastructure underneath ShipLink is the same headless sync engine handling every webhook, queue, and alert — none of it bolted on after the fact.

Sliding-Window Rate Limiting

Every /api/v1 request is checked against a true sliding-window log — not a fixed-window counter that lets traffic burst across the boundary — partitioned by tier.

30 req/min
X-RateLimit-Limit · sliding-window log, not fixed-window

Asynchronous Event Queuing

Webhooks are acknowledged in milliseconds and handed off to Inngest for durable, retried processing — a slow or rate-limited Linear/GitHub call never blocks the response.

received→queued→processed

Automatic Crash Alert Streams

Integration failures (401/403/5xx from Linear, GitHub, or Resend) are caught centrally, formatted as clean markdown, and streamed to Discord or Slack — automatically, every time.

⚠ Integration failure: LINEAR
Operation: issueCreate
Status: 401
Message: Authentication required

Cursor-Paginated Data Architecture

Collection queries page by cursor, not OFFSET — so listing stays fast and consistent no matter how large a workspace's sync history grows.

  • sync_evt_rssynced
  • sync_evt_rtsynced
  • sync_evt_rusynced

Your workspace

A preview of the configuration surface — connect workspaces, pick a target tracker, and issue yourself an API token.

Active Workspace Connections

  • acme-web
    Linear
  • acme-api
    GitHub Issues
  • marketing-site
    Not connected

Target Issue Tracker

Resolved once per event by ProviderFactory — the sync worker only ever talks to the generic issue-tracker interface, never a provider SDK directly, so switching targets here doesn’t change any downstream logic.

API Access Token