{"id":47668237,"url":"https://github.com/mbaneshi/contentforge","last_synced_at":"2026-04-02T12:06:51.024Z","repository":{"id":346619362,"uuid":"1190453406","full_name":"mbaneshi/contentforge","owner":"mbaneshi","description":"Rust-native single-binary content platform — write once, publish everywhere (DEV.to, Twitter, Mastodon, Bluesky, LinkedIn, Medium)","archived":false,"fork":false,"pushed_at":"2026-03-24T20:44:25.000Z","size":652,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-25T21:47:57.430Z","etag":null,"topics":["cli","content-platform","mcp","rust","svelte"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mbaneshi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-24T09:48:50.000Z","updated_at":"2026-03-24T20:44:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mbaneshi/contentforge","commit_stats":null,"previous_names":["mbaneshi/contentforge"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/mbaneshi/contentforge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbaneshi%2Fcontentforge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbaneshi%2Fcontentforge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbaneshi%2Fcontentforge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbaneshi%2Fcontentforge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mbaneshi","download_url":"https://codeload.github.com/mbaneshi/contentforge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbaneshi%2Fcontentforge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31305973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T09:48:21.550Z","status":"ssl_error","status_checked_at":"2026-04-02T09:48:19.196Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","content-platform","mcp","rust","svelte"],"created_at":"2026-04-02T12:06:50.113Z","updated_at":"2026-04-02T12:06:50.996Z","avatar_url":"https://github.com/mbaneshi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003eContentForge\u003c/h1\u003e\n  \u003cp align=\"center\"\u003eA Rust-native content creation and multi-platform publishing platform.\u003cbr\u003eSingle binary. CLI + TUI + Web + MCP.\u003c/p\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/mbaneshi/contentforge/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/mbaneshi/contentforge/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/rust-1.80%2B-orange.svg\" alt=\"Rust 1.80+\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT License\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platforms-6-brightgreen.svg\" alt=\"6 Platforms\"\u003e\n\u003c/p\u003e\n\n---\n\n## What is ContentForge?\n\nWrite content once. Adapt for each platform. Publish everywhere — from your terminal, a web dashboard, or your AI assistant via MCP.\n\n```bash\n# The hero workflow\ncontentforge draft create \"What I shipped this week\" --body \"...\" --tags \"rust,ai\"\ncontentforge adapt \u003cid\u003e --platform devto\ncontentforge adapt \u003cid\u003e --platform mastodon\ncontentforge adapt \u003cid\u003e --platform bluesky\ncontentforge publish \u003cid\u003e --platform devto   # → live on DEV.to\n\n# Or let the pipeline do it all\ncontentforge pipeline run \u003cid\u003e --platforms devto,mastodon,bluesky --skip-review\n\n# Or use Claude Code via MCP\n# Claude: \"Draft a post about my latest Rust project and publish to DEV.to and Bluesky\"\n```\n\n## Why ContentForge?\n\n| Problem | ContentForge |\n|---------|-------------|\n| Content scattered across 5+ platforms | Write once, adapt per platform |\n| Manual copy-paste for cross-posting | CLI/TUI/Web/MCP — automate everything |\n| Complex self-hosting (Docker + PG + Redis) | Single binary + SQLite, zero config |\n| No developer-native tools (all web dashboards) | CLI-first, git-friendly, terminal-native |\n| Existing tools don't work with AI assistants | Built-in MCP server for Claude Code |\n\n## Quick Start\n\n### Install\n\n```bash\n# From source (recommended for now)\ngit clone https://github.com/mbaneshi/contentforge.git\ncd contentforge\ncargo build --release\n# Binary: target/release/contentforge\n\n# Or via the install script\ncurl -fsSL https://raw.githubusercontent.com/mbaneshi/contentforge/main/install.sh | bash\n```\n\n### First Content Piece (2 minutes)\n\n```bash\n# 1. Create a draft\ncontentforge draft create \"I built a content pipeline in Rust\" \\\n  --body \"## Why\\n\\nI was tired of copy-pasting to 5 platforms...\" \\\n  --tags \"rust,devtools,opensource\"\n\n# 2. Add your DEV.to API key (once)\ncontentforge platforms add devto --key \u003cYOUR_DEVTO_API_KEY\u003e\n\n# 3. Adapt and publish\ncontentforge adapt \u003cid\u003e --platform devto\ncontentforge publish \u003cid\u003e --platform devto\n# → Your post is live on DEV.to\n```\n\n### Pipeline Automation\n\n```bash\n# Run a full pipeline: adapt → review → approve → publish\ncontentforge pipeline run \u003cid\u003e --pipeline adapt-review-publish --platforms devto,mastodon\n\n# Check status\ncontentforge pipeline list\n\n# Approve when ready\ncontentforge pipeline approve \u003cjob_id\u003e\n```\n\n## Interfaces\n\n### CLI\n```bash\ncontentforge draft create/list/show/delete    # Content CRUD\ncontentforge adapt \u003cid\u003e --platform \u003cplatform\u003e # Adapt for a platform\ncontentforge publish \u003cid\u003e --platform \u003cplatform\u003e  # Publish\ncontentforge pipeline run/list/show/approve/reject  # Automated pipelines\ncontentforge platforms add/list/remove/check  # Manage credentials\ncontentforge status                           # Pipeline overview\n```\n\n### TUI (Terminal UI)\n```bash\ncontentforge tui\n# 5 tabs: Dashboard | Drafts | Adapt | Publish | Platforms\n# Navigate: Tab/1-5, j/k, Enter, q to quit, ? for help\n```\n\n### Web UI\n```bash\ncontentforge serve --bind 127.0.0.1:3000\n# Dashboard, draft editor, publish controls, analytics\n```\n\n### MCP Server (for Claude Code / Claude Desktop)\n```bash\n# Add to Claude Code\nclaude mcp add contentforge -- contentforge mcp\n\n# Or manually in ~/.claude.json\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"contentforge\": {\n      \"command\": \"contentforge\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n```\n\n**Available MCP tools:**\n| Tool | What It Does |\n|------|-------------|\n| `draft_content` | Create a new draft |\n| `list_content` | List content by status |\n| `show_content` | Full content details |\n| `adapt_content` | Adapt for a platform |\n| `publish_content` | Publish to a platform |\n| `schedule_content` | Schedule for later |\n| `pipeline_status` | Pipeline overview |\n\n## Supported Platforms\n\n| Platform | Status | Auth | Notes |\n|----------|--------|------|-------|\n| **DEV.to** | Working | API Key | Free, stable, markdown-native |\n| **Mastodon** | Working | OAuth per-instance | Free, 500 char limit, FOSS community |\n| **Bluesky** | Working | Handle + App Password | Free, 300 char limit, growing dev audience |\n| **Twitter/X** | Working | OAuth 2.0 / Bearer | $100+/mo for write access (user brings own keys) |\n| **LinkedIn** | Working | OAuth 2.0 | Requires LinkedIn Partner approval for write |\n| **Medium** | Deprecated | Integration Token | API deprecated in 2026, limited support |\n\n## Architecture\n\n```\ncontentforge (single binary)\n├── CLI (clap)        ── draft/adapt/publish/pipeline/platforms/status\n├── TUI (ratatui)     ── 5-tab terminal dashboard\n├── Web (SvelteKit)   ── 8-page web UI via Axum\n├── API (Axum)        ── 12 REST endpoints + WebSocket\n├── MCP (rmcp)        ── 7 tools for AI assistant integration\n├── Pipeline Engine   ── Job queue + worker + retry + approval\n├── 6 Adapters        ── DEV.to, Mastodon, Bluesky, Twitter, LinkedIn, Medium\n└── SQLite (WAL)      ── Zero-config persistence\n```\n\n**12 Rust crates** in a clean workspace architecture:\n\n| Crate | Purpose |\n|-------|---------|\n| `contentforge-core` | Domain types, platform definitions, errors |\n| `contentforge-db` | SQLite persistence, migrations, repositories |\n| `contentforge-publish` | Publisher trait + 6 platform adapters |\n| `contentforge-pipeline` | Job queue, worker loop, retry, approval flow |\n| `contentforge-cli` | CLI commands and handlers |\n| `contentforge-tui` | Terminal UI with ratatui |\n| `contentforge-api` | Axum REST API + embedded SvelteKit |\n| `contentforge-mcp` | MCP server with 7 working tools |\n| `contentforge-agent` | AI content generation pipeline |\n| `contentforge-schedule` | Cron scheduling engine |\n| `contentforge-analytics` | Engagement metrics |\n| `contentforge-app` | Binary entry point |\n\n## Documentation\n\n- [Product Strategy](docs/PRODUCT_STRATEGY.md) — vision, pricing, go-to-market\n- [Build Plan](docs/BUILD_PLAN.md) — prioritized implementation plan\n- [Architecture](docs/architecture/ARCHITECTURE.md) — system design deep-dive\n- [Full Docs Site](https://mbaneshi.github.io/contentforge/) — guides and reference\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for setup, code conventions, and how to add a new platform adapter.\n\n## License\n\nMIT — see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbaneshi%2Fcontentforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmbaneshi%2Fcontentforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbaneshi%2Fcontentforge/lists"}