/changelog
Generate a weekly changelog card for Twitter/X. Reads git log, distills the work into 6 punchy items, fills an HTML template, and opens it in the browser ready to screenshot.
curl -sL https://raw.githubusercontent.com/tushaarmehtaa/tushar-skills/main/changelog/SKILL.md -o ~/.claude/skills/changelog/SKILL.md --create-dirsGenerate the weekly changelog Twitter card. Run every Friday (or whenever you ship).
Steps
1. Get this week's commits
git log --oneline --since="7 days ago"
Get the stats:
# Commit count
git log --oneline --since="7 days ago" | wc -l
# Files + lines changed
git log --since="7 days ago" --pretty=tformat: --numstat | awk '{files++; add+=$1; del+=$2} END {print files " files · " add+del " lines"}'
2. Understand what actually shipped
Read each commit message. For any that are unclear, look at the diff:
git show [commit-hash] --stat
Group commits into themes. Ignore pure refactors, dependency bumps, and test fixes — users don't care. Focus on what changed for them.
3. Distill into exactly 6 items
Each item needs:
- An emoji that fits the work (✨ new feature, 🐛 fix, ⚡ performance, 🎨 design, 🔒 security, etc.)
- A short title — 3-5 words, lowercase, punchy
- 2-3 lines of body — explain the user benefit, not the technical detail. Write like a human, not a release note. "credits update in real time" not "implemented shared zustand store for credit synchronisation."
If fewer than 6 meaningful things shipped, combine small related items or include one "under the hood" item about stability/performance.
4. Find or create the changelog template
Look for a changelogs/ directory in the repo. If there's a template.html, use it.
If no template exists, create changelogs/template.html with this structure:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 1200px; height: 628px; overflow: hidden;
background: #09090b; font-family: 'JetBrains Mono', ui-monospace, monospace;
display: flex; flex-direction: column; padding: 48px;
}
.header { color: #71717a; font-size: 13px; margin-bottom: 32px; letter-spacing: 0.05em; }
.header span { color: #fafafa; }
.grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; flex: 1; }
.item { display: flex; gap: 12px; }
.emoji { font-size: 18px; flex-shrink: 0; margin-top: 1px; }
.content h3 { color: #fafafa; font-size: 13px; font-weight: 700; margin-bottom: 4px; }
.content p { color: #71717a; font-size: 11px; line-height: 1.6; }
.content p strong { color: #a1a1aa; }
.footer { color: #3f3f46; font-size: 11px; margin-top: 24px; letter-spacing: 0.05em; }
</style>
</head>
<body>
<div class="header">what shipped this week · <span>MONTH DAY</span></div>
<div class="grid">
<div class="item"><div class="emoji">EMOJI</div><div class="content"><h3>TITLE</h3><p>BODY LINE 1<br>BODY LINE 2<br><strong>BODY LINE 3</strong></p></div></div>
<!-- repeat 5 more times -->
</div>
<div class="footer">N commits · N files · N lines · all live</div>
</body>
</html>
5. Create this week's file
Create changelogs/YYYY-MM-DD.html (use today's date).
Fill in:
- Header date (e.g. "what shipped this week · march 1")
- All 6 items
- Footer stats from step 1
6. Open in browser
open changelogs/YYYY-MM-DD.html
Tell the user: "ready — screenshot the browser window (⌘+Shift+4 on Mac) and post it."
Voice
Lowercase. Direct. No buzzwords. User benefit first, technical detail never. If you can't explain the value to a non-engineer in one line, rewrite it.
Design rule
If using an existing template — never touch the CSS. Content only. The design is locked.