{"id":51413651,"url":"https://github.com/kfuras/notipo-app","last_synced_at":"2026-07-04T17:00:37.619Z","repository":{"id":356529656,"uuid":"1161719093","full_name":"kfuras/notipo-app","owner":"kfuras","description":"Open-source WordPress publishing for writers, developers, and AI agents. MCP server, REST API, and CLI. Hosted SaaS at notipo.com.","archived":false,"fork":false,"pushed_at":"2026-06-23T08:06:08.000Z","size":9141,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T10:06:25.503Z","etag":null,"topics":["ai-agents","blog","claude","cms","docker","mcp-server","notion","notion-api","notion-to-wordpress","open-source","publishing","self-hosted","seo","typescript","wordpress"],"latest_commit_sha":null,"homepage":"https://notipo.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kfuras.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"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-02-19T12:44:09.000Z","updated_at":"2026-06-23T08:06:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"f713331c-549d-49b4-b0fc-897dc4ecf250","html_url":"https://github.com/kfuras/notipo-app","commit_stats":null,"previous_names":["kfuras/notipo-app"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/kfuras/notipo-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfuras%2Fnotipo-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfuras%2Fnotipo-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfuras%2Fnotipo-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfuras%2Fnotipo-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kfuras","download_url":"https://codeload.github.com/kfuras/notipo-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfuras%2Fnotipo-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35129190,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ai-agents","blog","claude","cms","docker","mcp-server","notion","notion-api","notion-to-wordpress","open-source","publishing","self-hosted","seo","typescript","wordpress"],"created_at":"2026-07-04T17:00:23.083Z","updated_at":"2026-07-04T17:00:37.613Z","avatar_url":"https://github.com/kfuras.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Notipo\n\n**Open-source WordPress publishing for writers, developers, and AI agents.**\n\nWrite in a clean markdown editor, sync from Notion, or hit a REST API / CLI / MCP server — Notipo handles the full pipeline: markdown → Gutenberg conversion, image hosting in your WordPress media library, AI- or Unsplash-generated featured images, and Rank Math / Yoast / SEOPress / AIOSEO metadata applied automatically on publish.\n\n[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE)\n[![npm: notipo CLI](https://img.shields.io/npm/v/notipo.svg?label=npm%20cli)](https://www.npmjs.com/package/notipo)\n[![Hosted SaaS at notipo.com](https://img.shields.io/badge/hosted%20saas-notipo.com-A855F7)](https://notipo.com)\n[![MCP Server](https://img.shields.io/badge/MCP-Server-FF4CE2)](https://notipo.com/docs/api/mcp)\n\n---\n\n## Three ways to publish to WordPress\n\n### 1. The built-in markdown editor\nDistraction-free editor with toolbar shortcuts, slash commands, drag-and-drop images, and one-click publish. No Notion required.\n\n### 2. From Notion\nConnect Notion, change a page status to `Post to Wordpress` or `Publish`, and Notipo handles the rest — markdown extraction, image caching to WP media library, featured image generation, SEO metadata via Rank Math / Yoast / SEOPress / AIOSEO.\n\n### 3. From an AI agent, REST API, CLI, or n8n workflow\nNotipo exposes a **Model Context Protocol (MCP) server** with 13 tools for AI agents, plus a REST API and a CLI. Claude Desktop, Cursor, Windsurf, Claude Code, ChatGPT — any MCP-compatible agent can publish posts end-to-end.\n\n```bash\n# CLI: publish a post end-to-end\nnpm install -g notipo\nnotipo posts create --title \"Why Every Dev Should Have a Blog\" --publish\n\n# REST API: one call runs the full pipeline\ncurl -X POST https://app.notipo.com/api/posts/create \\\n  -H \"X-API-Key: $NOTIPO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"Hello\",\"body\":\"## Intro\\n\\nMarkdown in, WordPress out.\",\"publish\":true}'\n```\n\n```jsonc\n// MCP: drop into Claude Desktop config\n{\n  \"mcpServers\": {\n    \"notipo\": {\n      \"type\": \"http\",\n      \"url\": \"https://app.notipo.com/api/mcp\",\n      \"headers\": { \"x-api-key\": \"your-api-key\" }\n    }\n  }\n}\n```\n\nSee **[notipo.com/ai-agents](https://notipo.com/ai-agents)** for the full AI-agent integration story.\n\n---\n\n## Hosted SaaS vs. self-hosting\n\nThe **hosted version at [notipo.com](https://notipo.com)** is the supported, batteries-included product — managed infrastructure, automatic upgrades, instant Notion webhook delivery, and a free tier with 5 posts/month. Pro is $19/month for unlimited posts plus AI featured images.\n\nThis repository is the same code that runs the hosted product. **You can self-host it** under the AGPL-3.0 license — see [DEVELOPMENT.md](DEVELOPMENT.md) for the local dev story and [docker-compose.yml](docker-compose.yml) for production deployment with Traefik + Let's Encrypt.\n\nSelf-hosting is unsupported — no help beyond what's in this repo, no upgrade path. If you need any of those, [the hosted product](https://notipo.com) is faster, cheaper, and already running.\n\n---\n\n## Tech stack\n\n- **Backend:** Fastify, TypeScript, Prisma, PostgreSQL 17\n- **Job queue:** [pg-boss](https://github.com/timgit/pg-boss) (Postgres-backed, no Redis)\n- **Frontend (admin):** Next.js 16 + BlockNote editor + shadcn/ui + Tailwind\n- **AI:** Google Gemini (featured images), [Model Context Protocol](https://modelcontextprotocol.io) (agent integration)\n- **Other:** Sharp (images), Stripe (billing), Resend (transactional email), Sentry (errors), PostHog (product analytics), Notion SDK, WordPress REST API\n- **CLI:** zero-dependency npm package, native fetch only\n\nMonorepo (Turborepo + npm workspaces):\n```\napps/\n  api/     — Fastify backend, MCP server, job workers\n  web/     — Next.js admin UI\npackages/\n  cli/     — `notipo` npm package (MIT-licensed thin client)\n  shared/  — TypeScript types and enums\nplugins/\n  notipo-seo/  — WordPress plugin for Yoast/AIOSEO metadata bridge\n```\n\n---\n\n## Quick start (self-host)\n\nYou'll need: Docker, Docker Compose, a domain pointed at your server, a Notion integration, and a WordPress site with [Application Passwords](https://wordpress.org/documentation/article/application-passwords/) enabled (WP 5.6+).\n\n```bash\ngit clone https://github.com/kfuras/notipo-app.git\ncd notipo-app\ncp apps/api/.env.example .env\n# Edit .env — at minimum set DATABASE_URL, ENCRYPTION_KEY, API_KEY,\n# DOMAIN, ACME_EMAIL, RESEND_API_KEY\ndocker compose up -d\n```\n\nThe compose stack pulls multi-arch images (`linux/amd64` + `linux/arm64`) from\n`ghcr.io/kfuras/notipo-api` and `ghcr.io/kfuras/notipo-web`, so it works on both\nx86 servers and Apple Silicon / ARM hardware.\n\nThe compose stack starts Traefik + the API + admin UI + Postgres, with Let's Encrypt TLS on first run. See [docker-compose.yml](docker-compose.yml) for details.\n\nFor local development without Docker:\n\n```bash\ndocker compose -f docker-compose.dev.yml up   # Postgres only\nnpm install\nnpm run migrate -w @notipo/api\nturbo dev                                      # API on :3000, web on :3001\n```\n\nSee [DEVELOPMENT.md](DEVELOPMENT.md) for the full development guide.\n\n---\n\n## Documentation\n\n- **API reference:** [notipo.com/docs/api/introduction](https://notipo.com/docs/api/introduction)\n- **MCP server (13 tools):** [notipo.com/docs/api/mcp](https://notipo.com/docs/api/mcp)\n- **CLI:** [notipo.com/docs/api/cli](https://notipo.com/docs/api/cli)\n- **n8n integration:** [notipo.com/docs/api/n8n](https://notipo.com/docs/api/n8n)\n- **All docs:** [notipo.com/docs](https://notipo.com/docs)\n- **Architecture \u0026 development:** [DEVELOPMENT.md](DEVELOPMENT.md) and [.claude/CLAUDE.md](.claude/CLAUDE.md)\n\n---\n\n## License\n\nThis project is licensed under the **GNU Affero General Public License v3.0** (AGPL-3.0) — see [LICENSE](LICENSE).\n\nIn plain English:\n- ✅ You can use, modify, and self-host Notipo for any purpose, including commercial.\n- ✅ You can fork it and contribute changes back.\n- ⚠️ If you run a modified version as a hosted service, you must publish your modifications under the same license. This is the \"Affero clause\" — it closes the network-service loophole that plain GPL leaves open.\n- ✅ The `notipo` CLI package is published to npm under MIT (it's just a thin API client wrapper).\n- ✅ The `notipo-seo` WordPress plugin is published under MIT (compatible with WordPress's GPL ecosystem).\n\nIf you want to use Notipo's code in a proprietary hosted product without AGPL obligations, [open an issue](https://github.com/kfuras/notipo-app/issues/new) — commercial licensing may be available.\n\n---\n\n## Contributing\n\nPRs welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) for community standards.\n\nFor security disclosures, see [SECURITY.md](SECURITY.md) — please don't open public issues for vulnerabilities.\n\n---\n\n## Links\n\n- **Hosted SaaS:** [notipo.com](https://notipo.com)\n- **AI Agents:** [notipo.com/ai-agents](https://notipo.com/ai-agents)\n- **Blog:** [notipo.com/blog](https://notipo.com/blog)\n- **Twitter/X:** [@kjetilfuras](https://x.com/kjetilfuras)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkfuras%2Fnotipo-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkfuras%2Fnotipo-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkfuras%2Fnotipo-app/lists"}