In recent days, I’ve been working on a proof-of-concept to replicate Numeric Citizen I/O website currently hosted on Blot.im into Craft. I’m happy to report that the main portion of my work is completed. You can have a look at the end results here (Craft link). Now, the only missing part is the support of custom domains and notifications. The former will help mask the Craft URL behind a more user-friendly URL. The latter will let me know when someone is dropping a comment on the website. For the time being, I’ll update both versions in parallel. Enjoy.
The problem: I want to migrate a few dozens of posts from my Numeric Citizen Blog to my other website, Numeric Citizen Introspection, hosted on Ghost. Easy, right? Think again. The Ghost migrator plugin doesn’t support posts selection; it’s an all or nothing tool. How can I migrate a subset of my posts in that context? By assigning a specific category to each post, I can use the WordPress export tool to export these posts. Next, those posts can then be imported into an empty WordPress instance. From there, I could use the Ghost Migrator plugin. The issue is that I don’t have an empty WordPress instance sitting idle. Using WordPress.com, I cannot install the plugin in a free instance (it’s part of a Business plan, which I subscribe to for my main blog). The solution, was to use my Synology NAS to install an empty WordPress instance locally and proceed from there. Let’s see what the workflow looks like.
Turn off post update in the WP to Buffer Pro plugin to prevent flooding your Buffer queue
On the source WordPress instance, update posts category that you want to export
Install the “Export media with selected content” plugin (which is needed to export images as well as text content)
Export content to an XML file with the plugin
Install WordPress on Synology NAS with all required dependancies
Configure a WordPress website that will be used to host exported content in transit to Ghost
Install “Export media with selected content” in Synology WordPress instance (not really required)
Install the Ghost Migrator plugin
Delete the default post and unneeded page from the WordPress instance, as well as any images from the media library.
For each post to export, add the export category of your choice (in my case it was “PhotoLegend”.)
Export posts using these options from the WordPress Tools menu
Switch to the WordPress instance running on the Synology NAS
Select Import from the Tools menu
Select the XML file created from the Export step earlier
Set the author for the imported posts
Set the Download and import file attachments to bring in images
Click Submit and wait for the process to complete (it takes some time, depending on the number of posts and images to import)
Verify if all posts are listed in the Posts section (check creation date, author, etc.)
Check for Media Library to verify if images are imported
Open a few posts to see if content is correctly formatted
Edit posts with back links or other elements that need to be updated before importing content into Ghost
Edit tags according to the destination website requirements
Edit post slug and post title according to destination website requirements
Export using Ghost Migrator plugin, select the JSON format since ZipArchive module isn’t installed with this version of WordPress and PHP
Import JSON file created in the previous step
Check for imported posts issues. This is where I hit the wall. Missing photos, content imported as HTML blocs, etc. Not great at all.
Turn back on the WP to Buffer Pro Post Update option
This workflow doesn’t meet the goal of migrating WordPress content to Ghost. I ended up deleting the posts on the source WordPress instance and kept a copy of them on my Synology instead. I don’t know what I’ll do eventually with these “archived” posts.
Some observations are in order. This whole story brought many observations that I think you should consider if you’re attempting something similar.
The Ghost Migrator plugin is very limited, which make it hard to build an optimal migration workflow.
Images migration is close to impossible or very unreliable, forcing to use a manual export and import process.
Image optimization plugins on WordPress could make the migration harder than necessary.
Website optimization plugins on WordPress could add tags that are probably hindering the migration process.
Ghost import feature is still a work in progress can there is no way to select which post to import after reading the JSON file.
Testing the migration with a single post would most likely help identify issues faster, instead of importing all the content on the first try.
It doesn’t help to convert the WordPress post to use the block editor before exporting the content.
Migration efforts are time-consuming, making sure the content still has value to your reader is a good idea. I ended up deleting my 23 posts after spending hours of migration efforts. The positive side of this story is that I learned quite a lot.
Even if I couldn’t use the ZIP file for the Ghost Migrator plugin, I don’t think it would have made a difference in the migration quality. I tried to add ZIP Archive to the PHP installation, but the WordPress installation within my Synology NAS is hard to customize. After spending a few hours trying, I dropped the ball.
Data portability is really an issue these days. Even with export or import plugins exist, there are other problems that are inherent to each platform or CMS.
One thing that I gained from this experience is that by using WordPress on my Synology NAS, I can export content from my online WordPress to my Synology NAS for archiving purposes. That’s cool. Other than that, the problem of data mobility across content platform is real.
My previous blogger workflow update was in March 2021. Quite many things has happened since then. It’s time for another update. Buckle up because this is a big one and enjoy the ride!
For 2021, I was expecting a year without many changes to my blogger workflow, and yet, I was in for quite a few surprises.
Probably one of the most important additions this year are Toggl, Timery, and Focused Work to track my time while creating content (consider bookmarking and read “Why and How I’m Tracking Time With Toggl” if you want to know all the details.) Tracking my time does take some time, but I like the results.
Hello Ghost (again)! I started experimenting with Ghost with the 14 days trial period where all features were available for testing. I started building automation with the Zapier integration. After the trial period ended, the integration with Zapier stopped working for some reasons. I quickly found out that many features like custom themes, custom integrations, commenting support are only available with certain subscription tiers. Commenting on each blog post isn’t available by default, unless I’m on the Creator tier and customize one of the provided theme. To use Commento, I needed an API key, as well as a custom theme and a custom integration. And, moreover, a custom version of Casper with some script invocation added to enable Commento integration. Forking such a builtin theme requires staying in sync with the official theme, as Ghost update them from time to time to benefit from all Ghost’s additions. Finally, I paid a visit to Google Search Console to add my Ghost website for better SEO management and optimizations. I became a subscriber at the entry-level tier for $9 per month, but I quickly realized that the $25 was the one I need (consider bookmarking and read “Moving From Substack to Ghost — My Experience” for more details.)
iPadOS 15 introduced support for Safari extensions. Working on the iPad now feels less and less a compromise, as Grammarly support and many other extensions are now available. For people depending on the iPad, it is a much welcomed addition. Unexpectedly, in 2021, my workflow shifted towards the MacBook Air (read “Coming Out of a Rabbit Hole and Buying Two MacBook Air”).
Pocket made a comeback in addition to Readwise (consider bookmarking and read “Instapaper vs Pocket — Which Read Later Service Is Better for Me”). Pocket is well-known and doesn’t need much introduction. According to Readwise website: “Readwise makes it easy to revisit and learn from your ebook & article highlights.” Resurfacing previously highlighted text snippets is fun and helps build a lasting memory of past readings. I added a Readwise as a source to my weekly newsletter built using Mailbrew.
Using Readwise sharing feature to repost quotes on Twitter is handy. I don’t use it too often, though.
WordPress plugin: I’m using the paid version of “WB to Buffer” for reposting previously published posts to Buffer. With another WordPress plugin named “Feedzy” it imports RSS feeds from Substack and Microblog and create “Also on my …” type of blog posts automatically. It didn’t generate much traction and added too much noise in my original content feed. This was disabled after a few months, when I moved out of Substack.
I unexpectedly started using Matter when Matter officially became public. Matter seems to gain some traction over Pocket as the best read later service. Compared to Pocket, it creates great link posts that can be saved or shared online, just like Readwise and Pocket.
I became a subscriber of Typefully (typefully.com), a web application for writing threads on Twitter. Some features of Typefully are similar to Buffer’s, like being able to schedule tweets. I use it to write threads to complement some of my articles. The latest example things to watch in 2022. Finally, Typefully brings great engagement analytics
My experience with HEY World didn’t last long. I’ve been moving out of HEY World to go to Substack for my Friday Notes and Photo Legend Series (consider bookmarking and read “Migrating My Content From Hey World to Substack”). I can say the same thing about my Substack experience. These services, while being attractive, didn’t stick in my workflow.
HEY is no longer on the workflow diagram. HEY doesn’t really contribute to my blogger workflow. Most of my readings doesn’t happen there anyway, even if HEY provide a newsletters dedicated feed, one of the tent pole feature of the mail client.
Substack is out as mentioned earlier. The popularity of a platform doesn’t guarantee the popularity of your content.
I closed my Telegram account, read more here to know the reasons why. I’m contemplating Signals instead.
WordPress Plugin: Coblock was disabled to remove overhead in webpage processing. It didn’t make a difference, though.
I do spend more time maintaining my digital garden in Craft all year long. You can find a lot of stuff in there.
I’m still trying to figure out how to use Apple’s Quick Notes feature in iPadOS 15 and macOS Monterey. I may end up having no use for this after all. Too bad because on paper the idea is cool.
I’m always thinking about my use of Apple’s Reminders in my workflow. Reminders has improved quite a lot over the years, but occasionally, I think Craft could take over if tables support was better (sorting, tagging, etc.). The more things I’ll do with Craft, the more synergy it creates. I’ll watch Craft’s evolution in 2022, and maybe I’ll make a move.
Things to Improve
The addition of text clipping in Craft would be so helpful. There are shortcuts that work with Craft that do just that, but I don’t find the experience very satisfying.
Speaking of Apple’sShortcuts, I do find more use cases for them to speed up a few key tasks, like setting up my work session after logging into my account on macOS.
Templates in Craft to kickstart the creation of a new article would be very handy. It is expected in 2022, in an upcoming update in 2022 or via an extension.
As much as I would like to see the addition of tags in Craft, the implementation of this feature could be tricky. Where should we be able to tag things actually: In a page’s properties, inline in page’s content?
I have to work on my reading workflow and decide what I’m going to do with Pocket, Readwise and Matter. Pocket will probably go as it is entirely covered with Matter.
My usage of Craft has significantly increased this year. It is becoming my second brain (Fun fact: find out the name of my MacBook Air). Lately, I decided to use Craft calendaring feature to prepare a weekly planning which contains my content creation objectives. As the week progresses, I keep it up-to-date and check items off the list. It’s a satisfying experience. Trust me.
I’m still using Notion to keep my old data and connect Matter to Notion to save my reading highlights automatically. As soon as a Craft extension allows for pumping my data out of Notion, I might be done with Notion once and for all. Notion is not shown on my workflow diagram, but it will in an upcoming post about my reading workflow.
Twitter Revue: I had a Revue account before Twitter bought them. Now that it is integrated into their platform, I experimented with it (read a sample issue here). I love Twitter Revue, but I have yet to find a unique and useful use case for it. I currently have five subscribers.
Furthermore, I should consider closing my Flipboard account. I never go there, it’s not what it used to be, and I don’t get any traffic from this platform.
Google News where I cross-post my main blog content could also go down the drain too. I don’t get any traction there.
Finally, Tumblr is another place where I cross-post content. Tumblr has become a ghost town in recent years. It doesn’t help at all. Even if cross-posting is done automatically using WordPress builtin feature, I should consider stopping using this platform.
In my previous workflow update, I considered moving my Photo Legend Series to Hey, which I did for a short while. Now, this is hosted on Ghost, with my Friday Notes Series and my monthly newsletter. I like consolidating stuff sporadically.
Since getting a MacBook Air, my iPad Pro usage significantly dropped. The Mac is the power user tool. I cannot be as productive on an iPad.
I worked a lot on my WordPress blog to improve its score on Google’s PageSpeed Insights, as documented here. Did it make a difference? According to my blog visitors statistics, the answer is no. Here is a strange thing: if I run PageSpeed tests twice in a row, the final score is quite different. Usually, the second try gives much better results. How much trust should I put in these results? Another observation: my score for this blog, a static website, is the worst. Is Blot hosted on a low-end performance tier in the cloud?
I’ve been using Commento with Blot to add comments support on this blog. I never got a single comment! It’s a high price to pay for a service that nobody takes advantage of. Maybe it will be a better fit with my newsletter website on Ghost? Time will tell.
IFTTT still plays an important role in my publishing workflow as it works with Buffer to help me control the cross-posting flow. Each day, I spend some time managing the Buffer queue to spread out posts to be published. I also use IFTTT to cross-post anything that I post on Reddit, to my Twitter channel on Buffer. There is a new calendar view in Buffer which helps see a timeline overview of all future publishing. Buffer isn’t cheap, but I like what it does for me. Cross-posting content do help create traffic and improves engagement.
Well, that was a long one. For an upcoming article, I want to walk you through my reading workflow. I do read a lot of stuff online, and many applications and services are at play here. Reading is the source of my inspiration for most of my work as a content creator. I think there are some interesting things to write about. Stay tuned and see you in 2022.
Digital nomads. Flavour of the day. Looking for a better digital experience. Every reasons are good to move from one place to another in the digital world. It’s about having some fun.
I recently came across this blog post from Greg Morris where he writes: “I look at blog designs like Birchtree.me and think to myself “I want a blog like that” and then go out and try to build one.”. I often tell myself the exact same thing. But then, not long after, I came across another blog post but this time by Andy Nicolaides writing on his blog, The Dent:
“I’ve just gone through yet another blog migration, moving from Micro.Blog to Ghost (again). I was happily posting to Ghost a year or so ago, saw a nice looking blog on Micro.blog and jumped ship. I then sat there, not posting for half a year, before I saw Greg Morris’ updated site over on Ghost and my blog envy kicked off again. Let’s not even mention how incredible Matt Birchler’s Birchtree looks right now!”
Ghost has always been a source of curiosity for me, coming back to it from time to time to have a look and see how it is evolving over time. Following those two blog posts, I got back to one of my article about a past experience with Ghost for photo sharing. At the time, it didn’t go well. Furthermore, for unknown or clearly defined reasons, I started using Substack to host my newsletter. So, this time around, I came back to Ghost to look at it has an alternative to Substack. Why? After all, I was quite happy with Substack. And yet… If I look at Substack and Ghost, there are many things that made me dubious of my choices.
I don’t get any subscribers from Substack discovery or because Substack is very popular these days.
I prefer the way Ghost is handling the publishing process and the distinction between having a CMS and a newsletters publishing platform within the same platform.
Ghost’s API supports text editors like Ulysses which would help speed up the process of creating newsletter issues. By working directly in Ulysses each new issues would be much easier to put together as Ulysses supports templates., Substack doesn’t. Since the basic structure of my newsletter stays the same each month, using a template makes full of sense.
Substack offers some visual customization options, but they are quite limited. On the other hand, Ghost offers themes which helps a lot to make a more personal looking website.
Ghost supports Unsplash, which is a must for me.
Ghost provides better support for photos than in Substack with photo galleries. This could prove to be useful for my photo legend series, among other use cases.
Integration of Plausible analytics is easy something not possible with Substack. Another must-have for me.
Stripe integration which I already use for Medium payments if I ever chose to make a paid tier to my newsletter.
Commenting is possible by tweaking the theme and adding some integration code. Yet, I wish there was a better and easier way to add this to a website. In the future I could try to setup Commento for comments using this procedure. Ghost theme customization is available only on mid-tier and up paid plans. This feature could replace the thread feature available on Substack.
Good integration with Buffer via Zapier, IFTTT integration possible only via RSS feeds. As a paying member of IFTTT, I chose the latter.
Better RSS feeds support on posts, tags, pages just by adding /rss to any URL. On top of that, it is possible to customize the webpage referring to a tag by adding a header image and a description, just like here for the Photo Legend Series.
Selecting a fully featured theme is challenging, as Ghost doesn’t provide an easy way to filter themes by supported features.
I’ll leave my Substack account active just for the Substack Reader feature.
Easy migration path from Substack to Ghost using this procedure.
Should I import my content? After a short test run while using the 14-days evaluation period, it was clear that I had to.
How Ghost Could Be Improved for Me?
One of the most powerful and useful features of the Ghost editor is the ability to create and re-use content snippets. If you’ve ever used an email client with a concept of saved replies then this will be immediately intuitive.
Integration features and custom themes for the entry-level paid plan (access to the API admin token).
A customizable dashboard.
A native client on Mac or iPad.
Steps to Move From Substack to Ghost
Export my data from Substack — this took less than 10 minutes to complete. Substack makes this super easy to do.
Import my subscribers list into Ghost’s members list.
Download Xcode from the Mac App Store, launch it for default configuration (required for the next step).
Follow this procedure to import articles into Ghost CMS. This is done via command line. migrate substack numericcitizen-export-2021-11-14-m9k19kr99s/posts.csv --readPosts numericcitizen-export-2021-11-14-m9k19kr99s/posts --url https://numericcitizen.substack.com --useMetaImage --useMetaAuthor --drafts falseA lot of my decision to switch depended on the success of this step. If content was successfully imported without too much required tweaks, I would consider this a success and go with the next steps.
Import the created zip file (the migrate command generated a 230 mb zip file ready to import). This file was then imported using this procedure.
Once the import is complete and without error, configure site pages and tags.
Review imported content and set tags according to each post content. That step was tedious but was mandatory to recreate the same content structure currently on my Substack website.
Configure and write a contact page so that users can click from the bottom portion of my Ghost website in order to get in touch with me.
Connect my account Ghost to my Stripe account just in case even though my newsletter is free — you never know!
Configure Ulysses publishing options to publish content from within the application to Ghost. After all, this was one of the main reason I switched from Substack to Ghost, right?
Do a test run with a fake article, check RSS feed content generation.
Configure the support and reply-to email addresses.
Setup Plausible analytics and add it to my Ghost website using the customization feature, in the header section.
Update all my IFTTT automations for when a newsletter issue comes out for cross-posting to Twitter via Buffer.
For mid-tier paid plans only: Add Twitter Revue new sign up to Ghost via Zapier (this requires the Admin API token which is not available in the entry-level paid tier.)
For mid-tier paid plans only: Add Ghost cross posting to Buffer via Zapier (this requires the Admin API token which is not available in the entry-level paid tier.) It took me about a day of work to accomplish all this, from the trigger to the final announcement post on Substack. I’m super happy with the end results. You can subscribe to my free newsletter by going to the website: https://numericcitizen-introspection.blog.
Notion Releases Their Public APIs — Here Is Why I’m Excited
It’s now official: Notion offers APIs ([currently in beta]). This is good news for Craft users like me who is awaiting for a way to move my Notion data into Craft. I don’t have a lot of data but the data that I’ve got, I’d like to move it out. According to my sources close to the Craft team, they are looking at it. No timeline was given. I’m patient.