https://github.com/endjin/stacker
A .NET Global Tool for automating marketing content across social channels.
https://github.com/endjin/stacker
linkedin twitter wordpress
Last synced: 4 months ago
JSON representation
A .NET Global Tool for automating marketing content across social channels.
- Host: GitHub
- URL: https://github.com/endjin/stacker
- Owner: endjin
- License: apache-2.0
- Created: 2020-02-06T07:49:45.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2025-09-10T23:05:38.000Z (5 months ago)
- Last Synced: 2025-09-27T20:30:19.924Z (4 months ago)
- Topics: linkedin, twitter, wordpress
- Language: C#
- Homepage:
- Size: 284 KB
- Stars: 12
- Watchers: 10
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Stacker
A .NET Global Tool for automating marketing content across social channels. It supports extracting content from Vellum and then republishing via Buffer to Twitter, Mastodon, Facebook & LinkedIn, with automatically generated leader copy.
## Prerequisites
`stacker` uses Pandoc for WordPress export functionality, to convert from wordpress to markdown. You will need to install [Pandoc](https://pandoc.org/installing.html) and add it to the `PATH` or use `winget install JohnMacFarlane.Pandoc`.
## Installation
`stacker` is a [.NET global tool](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools), which means once installed, it's available on the PATH of your machine.
To list all the global tools installed on your machine, open a command prompt and type:
`dotnet tool list -g`
To install the `stacker` global tool use the following command:
`dotnet tool install -g stacker`
Then use `stacker environment init` to create a default `StackerSettings.json` file with placeholder values in `%%UserProfile%%\AppData\Roaming\endjin\stacker\configuration`.
To install a specific version, use:
`dotnet tool install -g stacker --version `
To update to the latest version of the tool, use:
`dotnet tool update -g stacker`
To uninstall the tool, use:
`dotnet tool uninstall -g stacker`
## Commands
Here are some usage examples:
```PowerShell
USAGE:
stacker [OPTIONS]
EXAMPLES:
stacker bluesky buffer create -c c:\temp\content.json -n azureweekly
stacker bluesky buffer shuffle -n azureweekly
stacker mastodon buffer create -c c:\temp\content.json -n azureweekly
stacker mastodon buffer shuffle -n azureweekly
stacker linkedin buffer create -c c:\temp\content.json -n endjin
stacker linkedin buffer shuffle -n endjin
stacker facebook buffer create -c c:\temp\content.json -n endjin
stacker facebook buffer shuffle -n endjin
stacker twitter buffer create -c c:\temp\content.json -n endjin
stacker twitter buffer create -c c:\temp\content.json -n endjin --item-count 10
stacker twitter buffer create -c c:\temp\content.json -n endjin --publication-period ThisMonth
stacker twitter buffer create -c c:\temp\content.json -n endjin --filter-by-tag MicrosoftFabric --what-if
stacker twitter buffer create -c c:\temp\content.json -n endjin --filter-by-tag MicrosoftFabric --item-count 10 --randomise --what-if
stacker twitter buffer create -c c:\temp\content.json -n endjin --from-date 2023/06/01 --to-date 2023/06/30
stacker twitter buffer create -c c:\temp\content.json -n endjin --filter-by-tag PowerBI --from-date 2023/06/01 --to-date 2023/06/30
stacker twitter buffer create -h https://localhost/stacker-export.json -n endjin --filter-by-tag MicrosoftFabric --what-if
stacker twitter buffer shuffle -n endjin
stacker environment init
stacker wordpress export markdown -w C:\temp\wordpress-export.xml -o C:\Temp\Blog
stacker wordpress export universal -w C:\temp\wordpress-export.xml -o C:\Temp\Blog\export.json
OPTIONS:
-h, --help Prints help information
COMMANDS:
bluesky Bluesky functionality
facebook Facebook functionality
linkedin LinkedIn functionality
mastodon Mastodon functionality
twitter Twitter functionality
environment Manipulate the stacker environment
wordpress WordPress functionality
```
### Buffer commands
`stacker twitter buffer create` - Upload content items into buffer for the specified Twitter profile.
`stacker linkedin buffer create` - Upload content items into buffer for the specified LinkedIn profile.
`stacker facebook buffer create` - Upload content items into buffer for the specified Facebook profile.
The `buffer create` command also takes the following options to filter the content items to be buffered.
```
OPTIONS:
-h, --help Prints help information
-c, --content-file-path Content file path
-n, --profile-name Buffer channel profile (e.g. twitter, linkedin, facebook) name (e.g. endjin, azureweekly, powerbiweekly)
-g, --filter-by-tag Tag to filter the content items by
-i, --item-count Number of content items to buffer. If omitted all content is buffered
-p, --publication-period Publication period to filter content items by. If specified --from-date and --to-date are ignored
-f, --from-date Include content items published on, or after this date. Use YYYY/MM/DD Format. If omitted DateTime.MinValue is used
-t, --to-date Include content items published on, or before this date. Use YYYY/MM/DD Format. If omitted DateTime.MaxValue is used
-w, --what-if See what the command would do without submitting the content to Buffer
```
You can also shuffle items already in the buffer queue (useful if you're inserting content into and existing queue and need to mix it up).
`stacker bluesky buffer shuffle` - Shuffle the content items in the buffer for the specified Bluesky profile.
`stacker twitter buffer shuffle` - Shuffle the content items in the buffer for the specified Twitter profile.
`stacker linkedin buffer shuffle` - Shuffle the content items in the buffer for the specified LinkedIn profile.
`stacker facebook buffer shuffle` - Shuffle the content items in the buffer for the specified Facebook profile.
`stacker mastodon buffer shuffle` - Shuffle the content items in the buffer for the specified Mastodon profile.
### WordPress commands
`stacker wordpress` - Interact with WordPress. Root command for WordPress operations. Will list available sub-commands.
`stacker wordpress export universal` - Exports blog posts from WordPress into a reusable format suitable for publishing across social channels.
`wordpress export markdown` - Exports blog posts from WordPress and converts them into Markdown. Various clean up routes are also run.
### Environment commands
`stacker environment` - Manipulate the stacker environment. Root command for environment operations. Will list available sub-commands.
`stacker environment init` - Initialises the `stacker` environment. Writes a default `StackerSettings.json` file with placeholder values to `%%UserProfile%%\AppData\Roaming\endjin\stacker\configuration`
## System Details
An application profile folder is created in:
`%%UserProfile%%\AppData\Roaming\endjin\stacker`
Configuration is stored in:
`%%UserProfile%%\AppData\Roaming\endjin\stacker\configuration\`
## DevOps
The project is [built using GitHub Actions](https://github.com/endjin/Stacker/actions) using [Endjin.RecommendedPractices.Build](https://www.powershellgallery.com/packages/Endjin.RecommendedPractices.Build/) and [Endjin.RecommendedPractices.GitHubActions](https://github.com/endjin/Endjin.RecommendedPractices.GitHubActions). Solution-level Engineering Practices are enforced using [Endjin.RecommendedPractices.NuGet](https://github.com/endjin/Endjin.RecommendedPractices.NuGet).
## Packages
The NuGet packages for the project, hosted on NuGet.org are:
- [stacker](https://www.nuget.org/packages/stacker)
## WordPress
Stacker supports filtering of blog posts via WordPress Custom Fields.
`stacker_promote` `true` | `false` - states whether Stacker should promote. If this field is missing, Stacker will automatically include it.
`stacker_promote_until` YYYY-MM-DD - states the date at which Stacker should stop including the post. This is for use cases around events which have no re-posting value.
Hastags are generated from WordPress Tags associated with each post.
The `Excerpt` custom field is used to provide the content summary when publishing to Facebook or LinkedIn.
## Licenses
[](https://raw.githubusercontent.com/endjin/Stacker/master/LICENSE)
This project is available under the Apache 2.0 open source license.
For any licensing questions, please email [licensing@endjin.com](mailto:licensing@endjin.com)
## Project Sponsor
This project is sponsored by [endjin](https://endjin.com), a fully remote UK based Technology Consultancy which specializes in Data, AI, DevOps & Cloud, and is a [.NET Foundation Corporate Sponsor](https://dotnetfoundation.org/membership/corporate-sponsorship).
> We help small teams achieve big things.
We produce two free weekly newsletters:
- [Azure Weekly](https://azureweekly.info) for all things about the Microsoft Azure Platform
- [Power BI Weekly](https://powerbiweekly.info) for all things Power BI, Microsoft Fabric, and Azure Synapse Analytics
Keep up with everything that's going on at endjin via our [blog](https://endjin.com/blog), follow us on [Twitter](https://twitter.com/endjin), [YouTube](https://www.youtube.com/c/endjin) or [LinkedIn](https://www.linkedin.com/company/endjin).
We have become the maintainers of a number of popular .NET Open Source Projects:
- [Reactive Extensions for .NET](https://github.com/dotnet/reactive)
- [Reaqtor](https://github.com/reaqtive)
- [Argotic Syndication Framework](https://github.com/argotic-syndication-framework/)
And we have over 50 Open Source projects of our own, spread across the following GitHub Orgs:
- [endjin](https://github.com/endjin/)
- [Corvus](https://github.com/corvus-dotnet)
- [Menes](https://github.com/menes-dotnet)
- [Marain](https://github.com/marain-dotnet)
- [AIS.NET](https://github.com/ais-dotnet)
And the DevOps tooling we have created for managing all these projects is available on the [PowerShell Gallery](https://www.powershellgallery.com/profiles/endjin).
For more information about our consulting services, please [contact us](https://endjin.com/contact-us).
## Code of conduct
This project has adopted a code of conduct adapted from the [Contributor Covenant](http://contributor-covenant.org/) to clarify expected behaviour in our community. This code of conduct has been [adopted by many other projects](http://contributor-covenant.org/adopters/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [hello@endjin.com](mailto:hello@endjin.com) with any additional questions or comments.
## IP Maturity Model (IMM)
The [IP Maturity Model](https://github.com/endjin/Endjin.Ip.Maturity.Matrix) is endjin's IP quality framework; it defines a [configurable set of rules](https://github.com/endjin/Endjin.Ip.Maturity.Matrix.RuleDefinitions), which are committed into the [root of a repo](imm.yaml), and a [Azure Function HttpTrigger](https://github.com/endjin/Endjin.Ip.Maturity.Matrix/tree/master/Solutions/Endjin.Ip.Maturity.Matrix.Host) which can evaluate the ruleset, and render an svg badge for display in repo's `readme.md`.
This approach is based on our 10+ years experience of delivering complex, high performance, bleeding-edge projects, and due diligence assessments of 3rd party systems. For detailed information about the ruleset see the [IP Maturity Model repo](https://github.com/endjin/Endjin.Ip.Maturity.Matrix).
## IMM for stacker
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/74e29f9b-6dca-4161-8fdd-b468a1eb185d?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/f6f6490f-9493-4dc3-a674-15584fa951d8?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/bb49fb94-6ab5-40c3-a6da-dfd2e9bc4b00?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/0449cadc-0078-4094-b019-520d75cc6cbb?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/64ed80dc-d354-45a9-9a56-c32437306afa?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/2a7fc206-d578-41b0-85f6-a28b6b0fec5f?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/f026d5a2-ce1a-4e04-af15-5a35792b164b?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/145f2e3d-bb05-4ced-989b-7fb218fc6705?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/da4ed776-0365-4d8a-a297-c4e91a14d646?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/6c0402b3-f0e3-4bd7-83fe-04bb6dca7924?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/79b8ff50-7378-4f29-b07c-bcd80746bfd4?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/30e1b40b-b27d-4631-b38d-3172426593ca?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/d96b5bdc-62c7-47b6-bcc4-de31127c08b7?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/87ee2c3e-b17a-4939-b969-2c9c034d05d7?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/71a02488-2dc9-4d25-94fa-8c2346169f8b?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/547fd9f5-9caf-449f-82d9-4fba9e7ce13a?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/edea4593-d2dd-485b-bc1b-aaaf18f098f9?cache=false)
[](https://imm.endjin.com/api/imm/github/endjin/Stacker/rule/66efac1a-662c-40cf-b4ec-8b34c29e9fd7?cache=false)