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.
stacker
uses Pandoc for WordPress export functionality, to convert from wordpress to markdown. You will need to install Pandoc and add it to the PATH
or use winget install JohnMacFarlane.Pandoc
.
stacker
is a .NET global tool, 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 <version-number>
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
Here are some usage examples:
USAGE:
stacker [OPTIONS] <COMMAND>
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
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. <LastMonth|LastWeek|LastYear|None|ThisMonth|ThisWeek|ThisYear> 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.
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.
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
An application profile folder is created in:
%%UserProfile%%\AppData\Roaming\endjin\stacker
Configuration is stored in:
%%UserProfile%%\AppData\Roaming\endjin\stacker\configuration\
The project is built using GitHub Actions using Endjin.RecommendedPractices.Build and Endjin.RecommendedPractices.GitHubActions. Solution-level Engineering Practices are enforced using Endjin.RecommendedPractices.NuGet.
The NuGet packages for the project, hosted on NuGet.org are:
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.
This project is available under the Apache 2.0 open source license.
For any licensing questions, please email [email protected]
This project is sponsored by endjin, a fully remote UK based Technology Consultancy which specializes in Data, AI, DevOps & Cloud, and is a .NET Foundation Corporate Sponsor.
We help small teams achieve big things.
We produce two free weekly newsletters:
- Azure Weekly for all things about the Microsoft Azure Platform
- Power BI Weekly for all things Power BI, Microsoft Fabric, and Azure Synapse Analytics
Keep up with everything that's going on at endjin via our blog, follow us on Twitter, YouTube or LinkedIn.
We have become the maintainers of a number of popular .NET Open Source Projects:
And we have over 50 Open Source projects of our own, spread across the following GitHub Orgs:
And the DevOps tooling we have created for managing all these projects is available on the PowerShell Gallery.
For more information about our consulting services, please contact us.
This project has adopted a code of conduct adapted from the Contributor Covenant to clarify expected behaviour in our community. This code of conduct has been adopted by many other projects. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.
The IP Maturity Model is endjin's IP quality framework; it defines a configurable set of rules, which are committed into the root of a repo, and a Azure Function HttpTrigger 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.