A Record of the Time
A few months ago I realized that I needed a stronger online presence and my own space to document my work. So I built a blog in Payload CMS. My constraints were dictated by the Vercel hobby plan, since I wanted to keep this blog hosted for free as long as possible.
I knew that just having a blog wasn't enough, and that I should post my blog entries on social media in order to broadcast my work. I haven't engaged in social media much in the past few years, because I found the process of publishing to be fussy and I had difficulty tracking engagement with my content on social platforms.
So I set out to integrate as many social platforms into my Payload CMS blog as possible.
The Power of Social APIs
Considering that I would only be posting content, URLs, or images to social media, provided the constraints needed in order to connect my blog to various social media platforms.
I started with LinkedIn, Threads, and Blue Sky, because I felt it was important to start with social networks that support short-form text-based content.
Structuring Social Posts for Multi-Platform Publishing
Each social platform required a unique data structure in order to post directly to their APIs. So I created a social posts Collection in Payload CMS, with some flexible text entry fields to provide the base payload data structure to publish on each of the social platforms.

Everything in it's right place
The Post Type would dictate the structure of the social post and would show or hide text entry fields depending on the post type.
The social post body is the unifying body that will then be used as the base content body on each of the social platforms.
Keywords can be added and will be used as hashtags, topics, communities, or however each social media platform handles tagging.

Each social platform gets their own body.
When I add a platform to the social media post, new platform bodies fields are added to the social post.
The body of the social post is copied to the platform bodies text fields along with the keywords, and formats them as they will appear in the post on each social platform.
You can see that Threads does not copy the keywords because on Threads they use Topics. Each Thread only supports one Topic, so we use the first keyword as the Topic for Threads.
Social Card Preview of Linked Content

Constructing social cards ain't easy
When we are sharing a URL, we use Puppeteer to scrape the meta title, description, and image URL, to construct the social card preview for each of the social media platforms.
Each social media platform constructs the card differently, so we needed a unifying view to make sure that we had the right data structure to feed into each of the social media platforms for the card to be constructed.
Publish Date
Once the social post is ready, then we set the publish date when all of the social posts go out. This is handled by a daily cron job. Since I'm on the free hobby tier of Vercel and I only have one cron job available per day, I'm going to get the most use out of it.

Each of the social posts publishes on the same date.
The default time is 8 a.m. for the post to go out since my cron job runs at 10 a.m. Central time.
After the cron job runs, then I send out an email summary to the Resend admin segment as a summary of the results of the cron job, including what was posted, any social media metrics that updated, added followers, any failures that were encountered during the cron job, basically anything that would help me maintain the blog and track social media engagement.
Social Media Dashboard ๐
Now that we have social posts going out to different social media platforms, I needed to make the default view of the payload social posts Collection page more valuable.
It All Started With Calendar View ๐
By default, the social posts Collection shows an itemized index of social posts, but I wanted the default view to be a calendar to see when the social posts would publish on each of the platforms.

Lists are only so helpful, get a calendar.
Get Into These Metrics Views ๐
Once I integrated the APIs for publishing, I dug into what metrics were available for all of my profiles. It was rich.
So I added retrieving the data every day to my Cron job, and now the analytics loads almost instantly, since we aren't waiting for several api requests to return to render the data. This way we can track followers trends over time, since we have a daily snapshot of my profiles.
Social Growth ๐ช
I believe this is the most valuable, high level analytics that I've developed. It charts the followers growth relative to the posts over time. So it evaluates the strength of each post related to the followers gained, in a simple percentage.
In this view, you can clearly see what platform is providing the best growth for your content.

This one view was worth months of work.
Social Drill Down
I can also drill down into each social platform to get more information, providing an analytics dashboard for each social platform.

So much data, so happy.
Currently YouTube is pulling live data for the drill down view, outside of the cron job. I figured it might be more valuable to see the live data to monitor how my videos are doing throughout the day. If I tend to prefer the actual YouTube Studio Analytics Dashboard, I may wrap YouTube into the daily cron job.
Now what?
Now I can track my social footprint across 7 different social platforms to share my work with the widest audience possible. I've been looking for work for some time now, and at this point I feel like the work has to find me. I'm everywhere, so I'm easy to get a hold of.
If this platform is valuable to you, reach out and I can build something like it for you. Help me help you.


Launching Payload Portfolio
How I designed, engineered and hosted it.
