An intelligent content automation system that transforms GitHub issues into story-connected LinkedIn posts using Claude AI, with a manual publishing workflow for full control.
This system automates the entire LinkedIn content creation pipeline except for the final publishing step:
- π€ AI-Powered Generation: Claude creates narrative-connected posts from GitHub issues
- π PR-Based Review: All content reviewed before scheduling
- π Smart Scheduling: Posts organized by date in a simple folder structure
- π― Manual Publishing: You maintain full control over what gets posted
- π Story Continuity: Each post builds on previous content narratives
- π Visual Pipeline: GitHub Project board tracks content from idea to published
# Clone the repository
git clone https://github.com/yourusername/linkedin-automation
# Set up GitHub Secrets in your repository settings:
# - CLAUDE_CODE_OAUTH_TOKEN (required for Claude AI)
# Configure your voice and narrative
# Edit content/config/tone.md - your writing style
# Edit content/config/best-practices.md - LinkedIn strategies
# Review content/config/history.md - your content journey (auto-maintained)
# Create required folders (if not present)
mkdir -p content/drafts content/scheduled content/published
# Optional: Set up GitHub Project for visual pipeline tracking
./scripts/setup-github-project.sh
# Note: Requires gh auth refresh -s project,read:project
# IMPORTANT: Workflow Restriction
# The generate-post workflow currently only runs for issues created by 'mslavov'
# To use this with your own account, update the workflow condition in
# .github/workflows/generate-post.yml line 13:
# Change: github.event.issue.user.login == 'mslavov'
# To: github.event.issue.user.login == 'yourusername'- Create a GitHub Issue with your post idea
- Add label
linkedin-postoridea - Claude automatically generates a draft and creates a PR
- Review and merge the PR to schedule the post
# In Claude, use the slash command:
/post
# Claude will show you today's scheduled post
# Copy the content and post manually to LinkedIn
# Reply 'posted' to mark as publishedgraph LR
A[GitHub Issue] -->|Label| B[π€ Generating]
B -->|Auto| C[Claude Draft]
C -->|Auto| D[Pull Request]
D -->|Status: Review| E[Manual Edits]
E -->|Merge| F[π
Scheduled]
F -->|/post| G[Manual Publishing]
G -->|Status: Published| H[β
Complete]
style B fill:#f9f,stroke:#333,stroke-width:2px
style F fill:#9f9,stroke:#333,stroke-width:2px
style H fill:#99f,stroke:#333,stroke-width:2px
The system includes optional GitHub Project integration for visual pipeline management:
- Automated Status Updates: Issues move through columns automatically
- Real-time Tracking: See where each piece of content is in the pipeline
- Kanban Board: Visual representation of your content workflow
content/
βββ config/
β βββ tone.md # Your voice and style guidelines
β βββ best-practices.md # LinkedIn best practices
β βββ history.md # Published posts summary (auto-updated)
βββ drafts/ # New drafts from PRs
βββ scheduled/ # Posts ready to publish
βββ published/ # Posts after publishing
- Configure your unique voice in
tone.md - Claude maintains your style across all posts
- Builds narrative connections between posts
- Based on analysis of your historical content
- Posts automatically dated based on filename
- Simple folder-based states (draft β scheduled β published)
- No complex scheduling database needed
- Git provides complete audit trail
history.mdtracks your complete content journey- 7+ years of post history analyzed and documented
- Claude references past themes for coherent storytelling
- Each post builds on your authentic narrative
- Review every post before scheduling
- Publish manually when you're ready
- No automated posting to LinkedIn
- No API credentials or ToS concerns
# First, authenticate with required permissions
gh auth refresh -s project,read:project
# Run the setup script
./scripts/setup-github-project.sh- Visual Pipeline: Kanban board showing all content stages
- Automatic Movement: Issues move between columns based on actions
- Custom Fields: Track priority, content type, and engagement metrics
- No Manual Updates: Status changes happen automatically via workflows
- π Ideas - New issues without labels
- π€ Generating - Workflow is creating content
- π Review - PR is open for manual edits
- π Scheduled - PR merged, awaiting publication
- β Published - Manually posted to LinkedIn
- π Archive - Closed with metrics
For detailed setup instructions, see docs/github-project-setup.md.
/post- Get today's scheduled post for manual publishing/schedule-post- Schedule approved posts from drafts folder/setup- Initial project setup (if needed)
- Ideas β Unlabeled issues (brainstorming)
- Generating β Workflow creating content (minutes)
- Review β PR open for edits in
content/drafts/ - Scheduled β PR merged, moved to
content/scheduled/ - Published β Manually posted, moved to
content/published/ - Archive β Issue closed with engagement metrics
- Morning: Run
/postin Claude - Copy: Get the formatted post content
- Post: Manually publish to LinkedIn
- Confirm: Reply 'posted' to update the system
Define your writing style, preferred tone, and content approach. Currently configured with your authentic voice based on historical analysis.
Personal facts for accurate content generation:
- Work schedule and habits (early riser, early sleeper)
- Professional background details
- Personal interests and values
- Communication preferences
LinkedIn-specific guidelines for engagement and reach.
Comprehensive record of your LinkedIn journey:
- 7+ years of posts analyzed
- Key themes and narrative evolution documented
- Automatically updated when posts are published
- Helps Claude maintain story continuity
Posts use frontmatter for metadata:
---
title: "Your Post Title"
date: 2025-01-20
tags: [startup, ai, automation]
priority: normal # high, normal, low
original_issue: 42
---
Your post content here...- Security: No LinkedIn credentials needed in the system
- Control: Review context and timing before posting
- Compliance: Avoids LinkedIn API restrictions
- Flexibility: Post when it makes sense for your audience
- GitHub Project Integration: Visual kanban board for content pipeline
- Automated Status Tracking: Issues move through project columns automatically
- Issue Lifecycle Management: Complete tracking from idea to published
- Schedule Management: New
schedule.jsonfile for tracking scheduled posts - Comprehensive History: 7 years of LinkedIn posts analyzed and documented
- Manual Workflow: Full control over publishing, no API needed
- Enhanced Narrative: Claude understands your complete professional journey
- Check filename date format:
YYYY-MM-DD-title.md - Ensure file is in
content/scheduled/folder - Verify date is today or earlier
- Check
content/config/history.mdhas recent posts - Ensure history entries have clear summaries
- Review tone.md reflects your current voice
- Verify CLAUDE_CODE_OAUTH_TOKEN is set correctly
- Check GitHub Actions tab for workflow errors
- Ensure PR has correct file path in
content/drafts/
Feel free to submit issues and enhancement requests!
MIT License - see LICENSE file for details