$npx -y skills add indranilbanerjee/socialforge --skill parse-calendarParse monthly content calendars from DOCX, XLSX, Notion, or text into structured calendar-data.json.
| 1 | # /socialforge:parse-calendar — Calendar Parser |
| 2 | |
| 3 | Parse a monthly social media content calendar into structured JSON that drives the entire production pipeline. |
| 4 | |
| 5 | ## Context efficiency |
| 6 | |
| 7 | Asset-heavy skill. **Grep before Read** the asset catalog (`${CLAUDE_PLUGIN_DATA}/<brand>/assets/index.json`) — never list the asset directory. Reference generated images / videos by path, not by loading metadata. Brand profile loads once per session. |
| 8 | |
| 9 | ## Supported Formats |
| 10 | |
| 11 | | Format | How It Works | |
| 12 | |--------|-------------| |
| 13 | | DOCX | Read tables and structured text from Word documents | |
| 14 | | XLSX | Read rows from Excel spreadsheets (one row per post) | |
| 15 | | Notion | Read from Notion database via MCP (requires Notion connector) | |
| 16 | | Structured text | Parse markdown or plain text with consistent formatting | |
| 17 | |
| 18 | ## Required Fields Per Post |
| 19 | |
| 20 | Every post in the calendar must have (or the system will ask for missing ones): |
| 21 | |
| 22 | | Field | Required | Description | |
| 23 | |-------|----------|-------------| |
| 24 | | post_id | Auto-generated | Unique identifier (e.g., P01, P02) | |
| 25 | | date | Yes | Publishing date (YYYY-MM-DD) | |
| 26 | | platform | Yes | Target platform(s) — linkedin, instagram, x, facebook, etc. | |
| 27 | | content_type | Yes | static, carousel, video, story, reel, text_only | |
| 28 | | tier | Yes | HERO, HUB, or HYGIENE | |
| 29 | | topic | Yes | What the post is about | |
| 30 | | caption_brief | Yes | Brief description of the copy direction | |
| 31 | | visual_brief | Recommended | What the image should show | |
| 32 | | hashtags | Optional | Post-specific hashtags (brand hashtags added automatically) | |
| 33 | | cta | Optional | Call-to-action text or link | |
| 34 | | campaign | Optional | Campaign this post belongs to | |
| 35 | | notes | Optional | Special instructions | |
| 36 | |
| 37 | ## Process |
| 38 | |
| 39 | 1. **Detect format** — Check file extension or URL pattern |
| 40 | 2. **Extract posts** — Parse each post entry from the source |
| 41 | 3. **Validate fields** — Check required fields present. For missing fields, ask the user. |
| 42 | 4. **Normalize** — Standardize dates, platform names, content types to schema format |
| 43 | 5. **Assign post IDs** — Sequential (P01, P02, ...) if not already present |
| 44 | 6. **Cross-reference platforms** — Check all platforms exist in brand's platform-config.json |
| 45 | 7. **Flag issues** — Duplicate dates, missing briefs, unsupported content types |
| 46 | 8. **Save** — Write calendar-data.json to `~/socialforge-workspace/output/{brand}/{YYYY-MM}/` |
| 47 | |
| 48 | ## Output |
| 49 | |
| 50 | ``` |
| 51 | Calendar parsed: 28 posts for April 2026 |
| 52 | LinkedIn: 12 posts (4 carousels, 6 static, 2 video) |
| 53 | Instagram: 10 posts (3 carousels, 4 reels, 3 static) |
| 54 | X: 6 posts (all text+image) |
| 55 | |
| 56 | Issues found: 2 |
| 57 | - P14: Missing visual_brief (will need manual input during asset matching) |
| 58 | - P22: Date falls on Sunday — confirm intentional weekend post? |
| 59 | |
| 60 | Calendar saved: ~/socialforge-workspace/output/acme-corp/2026-04/calendar-data.json |
| 61 | ``` |
| 62 | |
| 63 | ## After Parsing |
| 64 | |
| 65 | Ask: "Would you like to: |
| 66 | - Match assets to posts? (`/socialforge:match-assets`) |
| 67 | - Review the parsed calendar first? (I'll show the full post list) |
| 68 | - Fix issues? (I'll walk through each flagged item)" |
| 69 | |
| 70 | ## Timeout & Fallback |
| 71 | |
| 72 | - DOCX/XLSX parsing: 30-second timeout. If file is too large, suggest splitting by week. |
| 73 | - Notion: 60-second timeout per database query. If Notion is slow, offer to export and parse locally. |
| 74 | - If format is unrecognized: Ask user to describe the structure, then parse adaptively. |