Linear -> Calendar automation
Tagged Linear issues trigger Google Calendar event creation with invite delivery and label-based filtering.
POST /webhook/linear · default label "calendar"Linear issue creation can schedule Google Calendar events automatically, and iMessages can be turned into Linear issues through a Shortcut.
Core capabilities
The project is intentionally narrow: receive a tagged issue, extract schedule data, or capture a new issue from a message.
Tagged Linear issues trigger Google Calendar event creation with invite delivery and label-based filtering.
POST /webhook/linear · default label "calendar"Parses Start, End, Location, and Attendees from issue text and keeps the remaining body as the meeting notes.
Fields: Start, End, Location, Attendees · missing end defaults to +1 hourAn iOS Shortcut can POST `@linear` messages to the webhook and create a new Linear issue through the GraphQL API.
POST /webhook/imessage · bearer-token protected endpointSetup summary
Summarized from README.md and grouped into the shortest useful onboarding path.
Install the service, create your env file, and run the one-time Google authorization flow.
git clone <your-repo-url>
cd linear-calendar-webhook
npm install
cp .env.example .env
npm run authSet the core values the service needs for Linear filtering, Google Calendar, and runtime configuration.
LINEAR_WEBHOOK_SECRET=your_secret_here
LINEAR_LABEL_NAME=calendar
GOOGLE_CALENDAR_ID=primary
TIMEZONE=America/Chicago
PORT=3000Run Cloudflare Tunnel, publish a route to localhost:3000, and point Linear issue-create webhooks at the public URL.
docker run -d --restart unless-stopped --network host \
--name cloudflared cloudflare/cloudflared:latest \
tunnel --no-autoupdate run --token <your-tunnel-token>
Linear webhook:
https://linear-calendar.yourdomain.com/webhook/linearAdd the Shortcut and Messages automation if you want incoming texts containing `@linear` to create issues automatically, then run the service with Docker Compose.
LINEAR_API_KEY=lin_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LINEAR_TEAM_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
IMESSAGE_WEBHOOK_SECRET=some-long-random-string
Messages automation trigger:
incoming message contains "@linear"
Shortcut action:
POST https://linear-calendar-webhook.mihirsahu.sh/webhook/imessage
Header: Authorization: Bearer <your-IMESSAGE_WEBHOOK_SECRET>
Body: { "text": "Shortcut Input" }
docker compose up -d
docker compose logs -f
docker compose down