MarketingAsAService
Self-hosted marketing for a business: social media posts, online ads, print, letters by post and video or radio spots, planned in campaigns with one brand and one recurring brand character. Connect your accounts with one click, write once, publish everywhere.
Documentation: schulzoli.github.io/MarketingAsAService: getting started, configuration, a guide for every network, and the marketing tools.
- Campaigns across channels. One goal, one key message and one budget split across social posts, Google search ads, Facebook and Instagram ads, YouTube video ads, print, mail, radio, TV, cinema and outdoor. Every ad, print piece and spot needs an approval before it goes out; results per channel show spend, cost per lead and return on ad spend (docs/marketing).
- One brand, one character. A brand kit with tone of voice, colors, typeface, logo and a recurring brand character (look, voice, catchphrase, reference pictures) that every piece builds on.
- Print and letters by post. Flyers, posters, newspaper ads, postcards and letters as print-ready PDFs with 3 mm bleed and CMYK colors; personal letters go out by post through Pingen (docs).
- Spots. Scripts for video, TV, cinema and radio spots that fit their length and pace, a briefing PDF for production, and the finished video uploaded to YouTube (docs).
- Paid ads. Search and YouTube video ads on Google Ads, image ads on Meta Ads: created paused from approved pieces, started and paused here, with their numbers read back every hour (docs).
- AI studio (optional). With an Anthropic API key, Claude drafts ads, print texts, spot scripts and post ideas in the brand's voice; drafts land in the campaign for you to edit and approve (docs).
- One big canvas. Networks, accounts, flows, the composer and your posts live in a single zoomable 2D world. Drag things where you like, and link to any node or view (
/canvas#n=network:instagram, /canvas#@x,y,zoom).
- Flows. Build reusable publishing pipelines on the canvas: New post → add hashtags → shorten to fit → wait 30 min → publish to these accounts. Each account receives its own adapted version.
- Plan on a calendar. Week and month views on the canvas; drag a post to move it, double-click to plan one. Edit or retry posts until they go out, and give each network its own version of the text.
- Work as a team. Several workspaces, invite links, roles (owner, admin, editor), an activity log, and an email when a post fails.
- German and English. The UI, validation and emails follow the browser's language or the account setting.
- Make it yours. The look is a plugin. Three themes come installed — Aurora, Paper and Blueprint, each with a light and a dark mode — and everyone picks their own. Uninstall the ones you don't want, or build your own in the theme editor on the canvas (docs/themes.md).
- 15 networks behind one interface. Mastodon, Bluesky (sign in on your own server, no app password needed), Telegram and Discord work out of the box. Facebook, Instagram, Threads, LinkedIn (profiles and pages), X, TikTok, YouTube, Google Business Profile, Pinterest and Reddit work through the Zernio bridge with just an API key, or through the server's own developer apps once they are approved — users then just click "Connect" (docs/bridge.md).
- Validates as you type. Each network's limits, media rules and required fields (subreddit, video title, TikTok privacy…) are checked live in the composer.
- Reliable publishing. Every network is published and retried independently, with backoff, token refresh, crash recovery and clear "reconnect needed" states.
- Your data stays yours. Tokens are encrypted at rest; runs anywhere Docker runs.
| Flow builder | Composing through a flow |
|---|
| |
| A campaign | A print-ready flyer | AI drafts |
|---|
| | |
This is the beginning of the README. Read the rest at the original. Read the full README ↗