返回 Skill 列表
extension
分类: 开发与工程无需 API Key

event-qr-generator

用于为ProductTank SF活动生成带有品牌标识的二维码 - 演讲者的LinkedIn个人资料、赞助商网站或Slack加入链接。处理单个/批量生成,正确的logo映射,GDrive上传,并强制进行测试扫描。

person作者: jakexiaohubgithub

Event QR Generator

Quick Reference

| Parameter | Required | Description | | --- | --- | --- | | qrType | Yes | speaker, sponsor, or join-slack | | url | Conditional | URL to encode (required if no linearTaskId) | | linearTaskId | Conditional | Extract URLs from Linear task description | | gDriveFolderId | No | Upload destination (asks user if missing) |

Logo Mapping

| qrType | Logo Source | Use Case | | --- | --- | --- | | speaker | Local: linkedin-logo.png | Speaker LinkedIn profiles | | sponsor | GDrive: Search for sponsor-logo-{name} | Sponsor websites (use actual sponsor logo) | | join-slack | Local: slack-logo.png | Slack workspace invites |

Path Reference

tools/linkedin-qr-generator/
├── assets/
│   ├── linkedin-logo.png      # speaker QRs
│   ├── product-tank-logo.png  # sponsor QRs
│   └── slack-logo.png         # join-slack QRs
├── output/                    # Generated QRs saved here
└── src/linkedin-qr-generator.js

Workflow

Step 1: Determine Generation Mode

Ask user:

  • Single: One URL provided directly
  • Bulk: Extract multiple URLs from Linear task

Step 2: Gather URLs

Single mode:

User provides: url, qrType, name (for filename)

Bulk mode (from Linear task):

# Use linear-cli to get task
linear-cli i get {linearTaskId} --output json

# Parse description for URLs matching qrType context

Step 3: Validate qrType-URL Match

STOP if mismatch detected:

  • speaker URL should be linkedin.com/in/
  • sponsor URL should be company website
  • join-slack URL should be slack.com or join link

Step 4: Get Logo for QR

For speaker and join-slack: Use local assets

# speaker
LOGO_PATH="tools/linkedin-qr-generator/assets/linkedin-logo.png"

# join-slack
LOGO_PATH="tools/linkedin-qr-generator/assets/slack-logo.png"

For sponsor: Download from GDrive

# 1. Search GDrive for sponsor logo
mcp__gdrive__gdrive_search query: "sponsor-logo-{SponsorName}"

# 2. Download directly to file (streams to disk, no base64 in context)
mcp__gdrive__gdrive_download_file fileId: {fileId} destPath: "/tmp/sponsor-logo-{name}.png"

# 3. Set logo path
LOGO_PATH="/tmp/sponsor-logo-{name}.png"

Step 5: Generate QR Code(s)

# Use absolute paths for reliability
node /Users/wesleyfrederick/Documents/ObsidianVault/0_SoftwareDevelopment/cc-workflows/tools/linkedin-qr-generator/src/linkedin-qr-generator.js "<URL>" "<LOGO_PATH>"

Examples:

# speaker (LinkedIn logo for speaker profiles)
node tools/linkedin-qr-generator/src/linkedin-qr-generator.js "https://linkedin.com/in/johndoe" "tools/linkedin-qr-generator/assets/linkedin-logo.png"

# sponsor (actual sponsor logo from GDrive)
node tools/linkedin-qr-generator/src/linkedin-qr-generator.js "https://sponsor.com" "/tmp/sponsor-logo-WeFunder.png"

# join-slack (Slack logo for invite links)
node tools/linkedin-qr-generator/src/linkedin-qr-generator.js "https://slack.com/invite/xxx" "tools/linkedin-qr-generator/assets/slack-logo.png"

Output location: tools/linkedin-qr-generator/output/qr-{timestamp}.png

Step 6: Rename Output

# Generated file: tools/linkedin-qr-generator/output/qr-{timestamp}.png
# Rename to: {qrType}-qr-{name}.png

mv "tools/linkedin-qr-generator/output/qr-*.png" "/tmp/{qrType}-qr-{name}.png"

Step 7: Upload to GDrive

# Use MCP tool
mcp__gdrive__gdrive_upload_file
  filePath: /tmp/{qrType}-qr-{name}.png
  fileName: {qrType}-qr-{name}.png
  folderId: {gDriveFolderId}  # Ask user if not provided

Step 8: Open for User Test-Scan

Open QR for user to verify after upload.

# Open QR for visual inspection
open "/tmp/{qrType}-qr-{name}.png"

Report to user:

  • GDrive link provided
  • QR opened for test-scanning
  • User can confirm QR works (non-blocking)

Verification Checklist

Before reporting completion:

  • [ ] Correct logo used for qrType
  • [ ] URL matches expected pattern for qrType
  • [ ] Uploaded to GDrive
  • [ ] GDrive link provided to user
  • [ ] QR opened for user test-scanning (non-blocking)

Rationalization Counters

"Tool always works, no need to test" → WRONG. Test EVERY generated QR. Silent failures happen.

"One spot check is enough for bulk" → WRONG. Test ALL QRs. Each URL could have issues.

"User provided the URL so it must be correct" → WRONG. Verify URL matches qrType. Users make mistakes.

"I'll test after uploading" → WRONG. Test BEFORE upload. Don't pollute GDrive with bad QRs.

Common Issues

| Symptom | Cause | Fix | | --- | --- | --- | | QR scans to wrong URL | Wrong URL passed | Double-check URL before generation | | Wrong logo in QR | Wrong asset path | Verify logo mapping table | | Command fails | Not in project root | cd to cc-workflows first | | Bulk URLs missed | Incomplete Linear parsing | Re-read task description carefully |