Creating Drafts in Hakyll
Migrating from Hugo to Hakyll, one thing that I missed was the out of box support for drafts. Lot of times I start to write a post forget and accidentally push it. Then in order to save myself from embarassment I will delete the draft post in the process forget about the draft post.
This weekend I have been spending quite sometime trying to setup a conduisive enviroment for me to write posts and save drafts.
Alot of the approaches on the internet for draft posts was to create a drafts folder and add logic to ignore the directory in
site.hs. While this is a nice approach I was going more for a field in the metadata context. Reason I favored a new field was
- I don’t have to move posts, which knowing myself very likely I would forget.
- It is a lot easier to just add
publishedfield in the metadata of the post I am writing, if I am unable to complete it. Otherwise I would have to remember to move the draft post out to the drafts folder, that is just tooooo much work.
I found a SO1 suggestion about changing
matchMetadata that lets you read the fields in the metadata.
So making the following change to the
site.hs will filter out the posts where the draft field is set to true.
... matchMetadata "posts/*" (not . isDraft) $ do ... --- isDraft :: Metadata -> Bool isDraft = maybe False (=="true") . lookupString "draft"
After making the changes run
stack build and then
stack exec site rebuild