Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Deploy Integration for Linktree. Trigger: "linktree deploy integration".
.claude/skills/jeremylongshore-linktree-deploy-integration/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 95% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 30% | 0% |
Deploy a containerized Linktree integration service that synchronizes profile data, manages link collections, and handles appearance customizations through the Linktree API. This skill covers Docker multi-stage builds optimized for the Linktree SDK, environment configuration for API authentication, health checks that verify Linktree API connectivity, and rolling deployment strategies with zero-downtime link management updates.
LINKTREE_API_KEY from the Linktree developer portalapi.linktr.ee on port 443dockerfileFROM node:20-slim AS builder WORKDIR /build COPY package*.json tsconfig.json ./ RUN npm ci COPY src/ ./src/ RUN npm run build FROM node:20-slim RUN groupadd -r linktree && useradd -r -g linktree -m appuser WORKDIR /app COPY --from=builder /build/dist ./dist/ COPY --from=builder /build/node_modules ./node_modules/ COPY package*.json ./ RUN npm prune --production USER appuser EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --retries=3 \ CMD curl -f http://localhost:3000/health || exit 1 CMD ["node", "dist/index.js"]
bashLINKTREE_API_KEY="lt_live_xxxxxxxxxxxxx" # Linktree API key from developer portal LINKTREE_BASE_URL="https://api.linktr.ee" # API base URL LINKTREE_PROFILE_ID="" # Target profile identifier LOG_LEVEL="info" # debug | info | warn | error NODE_ENV="production" PORT="3000"
typescriptimport express from "express"; const app = express(); app.get("/health", async (_req, res) => { try { const response = await fetch(`${process.env.LINKTREE_BASE_URL}/v1/profile`, { headers: { Authorization: `Bearer ${process.env.LINKTREE_API_KEY}` }, }); if (!response.ok) throw new Error(`Linktree API returned ${response.status}`); const profile = await response.json(); res.json({ status: "healthy", profile: profile.username, links: profile.links?.length ?? 0 }); } catch (err) { res.status(503).json({ status: "unhealthy", error: (err as Error).message }); } });
bashdocker build -t linktree-integration:$(git rev-parse --short HEAD) .
bashdocker run -d --name linktree-svc \ --env-file .env.production \ -p 3000:3000 \ --restart unless-stopped \ linktree-integration:$(git rev-parse --short HEAD)
bashcurl -s http://localhost:3000/health | jq . # Expect: { "status": "healthy", "profile": "your-username", "links": 12 }
bashdocker pull linktree-integration:latest docker stop linktree-svc && docker rm linktree-svc docker run -d --name linktree-svc --env-file .env.production -p 3000:3000 linktree-integration:latest
text# List recent images docker images linktree-integration --format "{{.Tag}} {{.CreatedAt}}" | head -5 # Roll back to previous tag docker stop linktree-svc && docker rm linktree-svc docker run -d --name linktree-svc --env-file .env.production -p 3000:3000 linktree-integration:<previous-tag>
| Issue | Cause | Fix | |-------|-------|-----| | 401 on health check | Expired or invalid LINKTREE_API_KEY | Rotate key in Linktree developer portal and update .env | | Container OOM killed | Link sync processing large profile trees | Increase memory limit to 512MB with --memory=512m | | ECONNREFUSED to API | DNS or firewall blocking api.linktr.ee | Verify outbound HTTPS access and DNS resolution | | Health check timeout | Slow API response under rate limiting | Increase HEALTHCHECK --timeout to 10s and add retry backoff | | Profile not found | Invalid LINKTREE_PROFILE_ID | Verify profile ID exists via GET /v1/profile manually |
See linktree-webhooks-events.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 24,966 | 21,655 | -13% | 1 | 1 | 0% | 4,186 | 4,012 | -4% | 0 | 0 | — |
case-03 | fail→fail | 19,553 | 17,111 | -12% | 1 | 1 | 0% | 2,524 | 3,493 | +38% | 0 | 0 | — |
case-01 | fail→pass | 20,535 | 16,722 | -19% | 1 | 1 | 0% | 2,861 | 3,576 | +25% | 0 | 0 | — |
case-04 | fail→fail | 23,929 | 18,166 | -24% | 1 | 1 | 0% | 3,371 | 3,951 | +17% | 0 | 0 | — |
case-05 | fail→fail | 23,680 | 25,213 | +6% | 1 | 1 | 0% | 3,335 | 5,174 | +55% | 0 | 0 | — |
case-06 | fail→fail | 20,021 | 18,986 | -5% | 1 | 1 | 0% | 2,720 | 3,832 | +41% | 0 | 0 | — |
case-07 | fail→fail | 20,886 | 15,875 | -24% | 1 | 1 | 0% | 2,692 | 3,089 | +15% | 0 | 0 | — |
case-08 | fail→pass | 10,864 | 6,995 | -36% | 1 | 1 | 0% | 793 | 1,543 | +95% | 0 | 0 | — |
case-09 | pass→pass | 8,706 | 12,793 | +47% | 1 | 1 | 0% | 1,321 | 2,375 | +80% | 0 | 0 | — |
case-10 | pass→pass | 17,198 | 10,180 | -41% | 1 | 1 | 0% | 2,133 | 2,960 | +39% | 0 | 0 | — |
case-11 | fail→pass | 17,456 | 12,583 | -28% | 1 | 1 | 0% | 2,791 | 2,344 | -16% | 0 | 0 | — |
case-12 | fail→pass | 8,461 | 7,790 | -8% | 1 | 1 | 0% | 1,172 | 1,524 | +30% | 0 | 0 | — |
case-17 | fail→pass | 19,819 | 24,809 | +25% | 1 | 1 | 0% | 2,526 | 4,096 | +62% | 0 | 0 | — |
case-13 | fail→pass | 16,227 | 4,410 | -73% | 1 | 1 | 0% | 1,833 | 1,985 | +8% | 0 | 0 | — |
case-14 | fail→fail | 20,168 | 19,231 | -5% | 1 | 1 | 0% | 2,601 | 3,912 | +50% | 0 | 0 | — |
case-15 | pass→pass | 18,318 | 12,086 | -34% | 1 | 1 | 0% | 2,154 | 3,001 | +39% | 0 | 0 | — |
case-16 | fail→pass | 16,027 | 8,597 | -46% | 1 | 1 | 0% | 1,830 | 2,786 | +52% | 0 | 0 | — |
case-18 | pass→pass | 4,908 | 2,959 | -40% | 1 | 1 | 0% | 784 | 1,562 | +99% | 0 | 0 | — |
case-19 | fail→fail | 16,384 | 11,214 | -32% | 1 | 1 | 0% | 2,022 | 3,210 | +59% | 0 | 0 | — |
case-20 | fail→pass | 12,073 | 12,202 | +1% | 1 | 1 | 0% | 2,099 | 2,392 | +14% | 0 | 0 | — |
case-21 | fail→pass | 10,564 | 3,315 | -69% | 1 | 1 | 0% | 957 | 1,690 | +77% | 0 | 0 | — |
case-22 | pass→pass | 10,389 | 7,729 | -26% | 1 | 1 | 0% | 684 | 1,530 | +124% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +45 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.