Claude-skill-registry event-qr-generator
Use when generating branded QR codes for ProductTank SF events - speaker LinkedIn profiles, sponsor websites, or Slack join links. Handles single/bulk generation, correct logo mapping, GDrive upload, and mandatory test-scanning.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/event-qr-generator" ~/.claude/skills/majiayu000-claude-skill-registry-event-qr-generator && rm -rf "$T"
skills/data/event-qr-generator/SKILL.mdEvent QR Generator
Quick Reference
| Parameter | Required | Description |
|---|---|---|
| Yes | , , or |
| Conditional | URL to encode (required if no linearTaskId) |
| Conditional | Extract URLs from Linear task description |
| No | Upload destination (asks user if missing) |
Logo Mapping
| qrType | Logo Source | Use Case |
|---|---|---|
| Local: | Speaker LinkedIn profiles |
| GDrive: Search for | Sponsor websites (use actual sponsor logo) |
| Local: | 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:
URL should be linkedin.com/in/speaker
URL should be company websitesponsor
URL should be slack.com or join linkjoin-slack
Step 4: Get Logo for QR
For
and speaker
: Use local assetsjoin-slack
# speaker LOGO_PATH="tools/linkedin-qr-generator/assets/linkedin-logo.png" # join-slack LOGO_PATH="tools/linkedin-qr-generator/assets/slack-logo.png"
For
: Download from GDrivesponsor
# 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 | to cc-workflows first |
| Bulk URLs missed | Incomplete Linear parsing | Re-read task description carefully |