Blog Publishing for olakunlevpn.github.io
This is the full runbook for writing and shipping a post to the olakunlevpn.github.io blog. It exists so any session, even one that has never seen this project, can publish a post correctly without guessing. Do every step in order. Do not skip the verification steps.
Most posts announce a new agent skill that was just built and pushed. The runbook is written for that case, but the mechanics are the same for any post.
Load These Skills First (mandatory)
Load these before writing a single word. They are not optional.
- olakunlevpn-human-writing -- humanize the post prose so it does not read as AI-generated. Load it before drafting, and run its self-check before committing.
- olakunlevpn-clean-export-skills -- gatekeeps git. Load before any
git add, commit, or push. - olakunlevpn-git-skills -- commit message format and author rules.
If the post makes technical claims about a specific stack (Laravel, React, security, and so on), also load the matching standards skill so the claims are accurate.
Fixed Facts (do not guess these)
| Thing | Value |
|---|---|
| Blog repo | https://github.com/olakunlevpn/olakunlevpn.github.io |
| Engine | Jekyll on GitHub Pages, legacy build |
| Branch | master (NOT main, pushing main does nothing) |
| Posts folder | _posts/ |
| Post filename | YYYY-MM-DD-slug.md |
| Live post URL | https://olakunlevpn.github.io/YYYY/MM/DD/slug.html |
| Blog index | https://olakunlevpn.github.io/blog/ |
| Atom feed | https://olakunlevpn.github.io/feed.xml (apostrophes escaped as ') |
| Default active gh account | seven2082 |
| Publish gh account | olakunlevpn |
| Commit identity | Olakunlevpn <olakunlevpn@live.com> |
| Skill install line format | npx skills add olakunlevpn/<repo> |
Front-Matter Template
---
layout: post
title: "Sentence-case title in double quotes"
date: YYYY-MM-DD HH:MM:SS +0100
tags: Word Word Skills
---
dateis the real current date. Future-dated posts are skipped by the build and never render, so never post-date.tagsare space-separated single words, not a YAML list.- Post order on the index is by
date. Newest date sorts to the top.
Post Anatomy and Voice
Open on a concrete scene or the actual problem. No throat-clearing, no restating the title.
Right after, say what the thing is in one plain sentence.
Pull the core rules into a short bullet list or tight prose. Bold sparingly, not every phrase.
Vary sentence length hard. Fragments are fine. This is what human-writing enforces.
For a skill-announcement post, include a one-line install block:
npx skills add olakunlevpn/<repo>Close with one punchy line.
Last line is the repo link:
Repo: [<repo>](https://github.com/olakunlevpn/<repo>)The whole thing must pass the olakunlevpn-human-writing self-check.
Procedure (run in order)
0. Load the mandatory skills above.
1. Clone fresh into scratch (never work inside the current project)
git clone https://github.com/olakunlevpn/olakunlevpn.github.io.git <scratch>/ghio
# the checked-out branch is master
2. Read one recent post to match format and voice
ls -t <scratch>/ghio/_posts | head -5
# open one and mirror its front-matter and rhythm
3. Write the post
Create <scratch>/ghio/_posts/YYYY-MM-DD-slug.md using the front-matter template. Humanize as you write, do not humanize as an afterthought.
4. Run the prose self-check
f=<scratch>/ghio/_posts/YYYY-MM-DD-slug.md
grep -c "—" "$f" # em-dash count, must be 0
grep -in "spatie" "$f" # must be empty when the subject is brand-swapped content
grep -oiE "\b(delve|leverage|utilize|robust|seamless|elevate|boast|testament|realm|landscape|tapestry|embark|foster|harness|unlock|empower|streamline)\b" "$f"
Fix every hit. The only allowed exception is a banned word shown in quotes as an example of what to avoid.
5. Set commit identity and stage only the new post
cd <scratch>/ghio
git config user.name "Olakunlevpn"
git config user.email "olakunlevpn@live.com"
git add _posts/YYYY-MM-DD-slug.md
git diff --cached --name-only # must be exactly the one post, never git add .
6. Commit (conventional, 50-char subject, imperative, no AI attribution)
git commit -m "docs: add <slug> blog post"
git log -1 --format=%B | grep -iE "claude|anthropic|copilot|co-authored" # must be empty
git log -1 --format="%an <%ae>" # Olakunlevpn <olakunlevpn@live.com>
7. Switch to the publish account and push to master
gh auth switch --user olakunlevpn
gh api user -q .login # must print olakunlevpn
git push origin master
8. Poll the Pages build until it is built
Build takes roughly 40 seconds to 2.5 minutes.
for i in $(seq 1 30); do
s=$(gh api repos/olakunlevpn/olakunlevpn.github.io/pages/builds/latest -q .status)
echo "$i: $s"; [ "$s" = "built" ] && break; sleep 10
done
9. Verify it is live
curl -s -o /dev/null -w "%{http_code}\n" https://olakunlevpn.github.io/YYYY/MM/DD/slug.html # 200
curl -s https://olakunlevpn.github.io/blog/ | grep -o "slug.html" | head -1 # slug present on index
10. Restore the default account
gh auth switch --user seven2082
Done Checklist (every item must be true)
- Post file named
YYYY-MM-DD-slug.md, real current date - Front-matter matches the template, tags are space-separated words
- Prose passes the human-writing self-check (no em-dash, no banned words)
- No
spatiewhen the subject is brand-swapped content - Only the one post staged, never
git add . - Commit author is Olakunlevpn, zero AI attribution
- Pushed to
master(notmain) under theolakunlevpnaccount - Pages build status reached
built - Live URL returns 200 and the slug shows on
/blog/ - Active gh account restored to
seven2082
Gotchas
- The branch is
master. Pushingmainsilently does nothing. - Future-dated posts do not render. Use the real current date, not a made-up sequence.
- The active gh account resets to
seven2082. Always switch toolakunlevpnbefore pushing and switch back after. - The Atom feed escapes apostrophes as
'. Grepping the feed for a title that contains an apostrophe misses it. Verify by the URL slug instead. - If the same session also installs a skill globally with
npx skills add <repo> -g, expect exactly onePromptScriptfailure. It is expected and harmless.
Where It Fits
- olakunlevpn-blog-publishing (this one) -- publish a post to the Jekyll blog end to end
- olakunlevpn-human-writing -- make the prose read human (required)
- olakunlevpn-clean-export-skills -- keep non-project files out of git (required)
- olakunlevpn-git-skills -- commit message and author standards (required)
Files
SKILL.md # Main skill file (loaded by AI agents)