# Social Batch Review Calendar

> Replace PDFs and chat recaps with a Type app your client can actually review: a weekly calendar with each post's first paragraph and full image, copyable captions, downloadable visuals, and the approver on every card.

Social Batch Review Calendar is an AI skill for sales & marketing and creative & design teams that you can use in Claude Code, Codex, or type.com.

- Skill page: https://type.com/library/skills/social-batch-review-calendar
- Raw SKILL.md: https://type.com/library/skills/social-batch-review-calendar/SKILL.md
- Created by Barbara Jovanovic from Startup Cookie
- Updated: October 30, 2026
- Package: 4 files

## What it does

- The three rules: the caption is real copyable text, the visual sits under its caption, and every card names the approver and the state.
- Calendar and list views, account filters, full-resolution image download, character counts and day-of-check notes.
- A working React template used with real clients, plus a script that packs images into the app under the source-size cap.

## Before you start

- A Type app (React + Vite starter)
- Python 3 with Pillow for scripts/encode_visuals.py

## How to use Social Batch Review Calendar

1. **type.com:** Choose Use Skill to add Social Batch Review Calendar to your type.com workspace.
2. **Claude Code:** Download the skill and extract it into ~/.claude/skills/social-batch-review-calendar/ (or .claude/skills/social-batch-review-calendar/ in a project). Then ask Claude to use Social Batch Review Calendar.
3. **Codex:** Download the skill and extract it into ~/.agents/skills/social-batch-review-calendar/ (or .agents/skills/social-batch-review-calendar/ in a repository). Then ask Codex to use Social Batch Review Calendar.

## Frequently asked questions

### What is Social Batch Review Calendar?

Social Batch Review Calendar is an AI skill for sales & marketing and creative & design teams that you can use in Claude Code, Codex, or type.com.

### What does Social Batch Review Calendar do?

Replace PDFs and chat recaps with a Type app your client can actually review: a weekly calendar with each post's first paragraph and full image, copyable captions, downloadable visuals, and the approver on every card.

### What do I need to use Social Batch Review Calendar?

A Type app (React + Vite starter); Python 3 with Pillow for scripts/encode_visuals.py.

### Can I use Social Batch Review Calendar in Claude Code or Codex?

Yes. Social Batch Review Calendar is a standard Agent Skills folder with a SKILL.md file. Download it and extract it into ~/.claude/skills/ for Claude Code or ~/.agents/skills/ for Codex.

### Who created Social Batch Review Calendar?

Barbara Jovanovic from Startup Cookie created Social Batch Review Calendar. The type.com team reviews every skill before it is published in the Skills Library.

## Example output

Example output from a sample run. Unless the example says otherwise, company names and figures are sample data.

````markdown
What the client receives in chat:
```
Review calendar: <app link>
Week 1 · Tue · Company LinkedIn · Launch: shared review calendar (In review, Dana approves)
Week 1 · Thu · Founder LinkedIn · Why we stopped sending PDFs (Draft, Dana approves)
All captions are also in "November batch: captions" in this space.
```
````

## Related skills

- [AI List Inclusion Outreach](https://type.com/library/skills/ai-list-inclusion-outreach.md): Get named on the "best X" lists that ChatGPT, Claude, Perplexity and Google AI answers already cite for your buyers' questions. Ranks the lists, drafts a three-line request for each, and tracks follow-ups.
- [Transparent Lower Third](https://type.com/library/skills/transparent-lower-third.md): On-brand animated name tags for testimonial videos, delivered as transparent ProRes 4444 files that drop straight onto a CapCut or Premiere timeline, with brand pulled from your site and a frame-by-frame check.
- [Event Post Fact-Check](https://type.com/library/skills/event-post-fact-check.md): Draft post-conference posts with every speaker, affiliation, session, sponsorship, photo and hashtag checked against the official program, keeping what the program proves separate from what someone remembers.
- [Reference Style Model](https://type.com/library/skills/reference-style-model.md): "We want our LinkedIn to sound like them." Turns a reference company's public posts into a style spec: numbered moves, each proved by a real line, and a pre-publish checklist. It transfers form, never their facts.
- [Founder Ghostwriter](https://type.com/library/skills/founder-ghostwriter.md): Ghostwrite LinkedIn and X posts in a founder's real voice, grounded only in things they actually said. Every post has a verbatim anchor, passes six gates, and is read by fresh-context reviewers before you see it.
- [Slop Edit](https://type.com/library/skills/slop-edit.md): Line-edit any draft so it stops reading as AI-written. A mechanical lint catches the surface patterns, a sentence-by-sentence pass fixes agentless and vague constructions, and every reviewer correction becomes a rule.

## Package files

- SKILL.md
- assets/App.tsx
- assets/calendar-styles.css
- scripts/encode_visuals.py

## SKILL.md

````markdown
---
name: social-batch-review-calendar
description: Turn a settled batch of social posts into an interactive Type app where the team and client can review, copy and publish. It has a weekly calendar showing each post's first paragraph and full image, a list view, copyable captions, downloadable full-resolution visuals, and the approver and status on every card. Use when a batch of 3+ posts across one or more accounts is ready for review or scheduling, instead of a PDF, a doc, image previews or a chat recap.
---

# Social Batch Review Calendar

Reviewers need to **read** each caption, **see** its visual, **copy** the text and **download** the image, and know **who approves** it. PDFs, Word docs, chat recaps and image-only previews fail at least one of those. This skill builds a small static Type app that does all four, from a template that has been used with real clients.

## The three rules
1. **The caption is real, selectable, copyable text.** Never an image of text, never only inside a table cell.
2. **The visual sits directly under its caption**, uncropped, with a Download button that saves the full-resolution file.
3. **Every card names the account, the approver and the state.**

## When to use
- The batch's text is settled enough for review (not mid-brainstorm).
- Three or more posts, or more than one account.
- If the user only needs one post, deliver the caption and visual inline in chat.

## Inputs
For each post: number, week, day (time only if agreed), account, handle, story/topic, approver, state, caption (paragraphs separated by blank lines), visuals (primary + labelled alternatives), notes (open decisions and day-of checks). Plus a title and an **approval-boundary** line ("Nothing here is approved for publishing until its card says Approved").

## Build steps
1. **Collect the images** into one folder, named so their stems are valid identifiers (`post1.png`, `post1_alt.png`). Keep the publishable resolution (for example 1080×1350 portrait, 1200×1200 square, 1600×900 landscape).
2. **Create a Type app** in the space (React + Vite starter). Don't rewrite the starter's `src/styles.css` variables or `src/main.tsx`.
3. **Encode the visuals.** Type apps store source text only, so images ship as data URLs. Run with Type's managed execution tool:
   ```bash
   python3 scripts/encode_visuals.py ./images ./<app>/src
   ```
   This writes `visuals-a.ts`, `visuals-b.ts`, … (each under the source-file size cap, default 480 KB) and `visuals.ts`, which re-exports them. Each export is `{ src, file, w, h }`. Full resolution is kept by default so Download gives the publishable file. If one image is too big for a single file, the script tells you to re-run with `--max-edge 1600`.
4. **Copy `assets/App.tsx` to `src/App.tsx`.** Edit only the "Batch content" block: `TITLE`, `BOUNDARY`, `ACCOUNTS`, `ACCOUNT_TONE`, `WEEKS`, `POSTS`. Each post's `visuals[].key` is the export name from step 3.
5. **Append `assets/calendar-styles.css`** to `src/styles.css`.
6. **Build and check.** Type-check passes; then open the preview and verify:
   - every week shows Mon–Fri columns with posts on their days,
   - each tile shows the account chip, state, **full uncropped image** and the **complete first paragraph**, plus "+ N more paragraphs · open",
   - opening a post shows every paragraph, Copy caption, character count, all visuals with Download buttons, and notes,
   - account filters and the Calendar/List switch work,
   - Copy puts the exact caption on the clipboard (the template falls back to a selection copy where an app viewer blocks the Clipboard API, and says so if both are blocked),
   - Download saves the full-resolution file; where a viewer blocks downloads, the card tells the reviewer to right-click the image and choose Save image as,
   - on a narrow window the week scrolls sideways instead of squashing cards.
7. **Publish the app and post the link**, with one line per post (account · day · story). Keep a durable copy of all captions outside the app (a doc in the space or the thread itself). The app must never be the only copy.

## Updating
When a caption changes, edit `POSTS` and republish. When an image changes, replace the file in the images folder and re-run `encode_visuals.py`; it removes stale `visuals-*.ts` files. Update the caption doc at the same time.

## What not to do
- No captions in a table: tables truncate and can't be copied cleanly.
- No dashboard metrics, charts or progress bars. This is a review surface.
- Don't crop images on the calendar tiles; reviewers need to see the whole visual.
- Don't invent posting times. If times aren't agreed, show days only.
- Don't deliver the batch as a doc and expect the reviewer to find the visuals. Every post must have its caption and visual together.

## Files
- `assets/App.tsx`: the working component (calendar, list, detail, copy, download, filters) with two placeholder posts.
- `assets/calendar-styles.css`: append to the app's stylesheet. Uses the starter's semantic variables, so light and dark mode both work.
- `scripts/encode_visuals.py`: encodes and splits images into `visuals-*.ts`. Needs Pillow.
````
