# Olakunlevpn Blog Publishing

> Use when writing and publishing a blog post to the olakunlevpn.github.io Jekyll site, especially a post announcing a new agent skill. A complete runbook covering the required companion skills, the repo and branch facts, the GitHub account switch, the post front-matter and voice, the humanization self-check, the commit standards, the Pages build poll, and the live verification. Follow every step so a fresh session with no prior context can reproduce the whole workflow.

- Skill: `olakunlevpn/olakunlevpn-blog-publishing` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add olakunlevpn/olakunlevpn-blog-publishing`
- Raw SKILL.md: https://api.skillmd.com/api/skills/olakunlevpn/olakunlevpn-blog-publishing/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: olakunlevpn (https://skillmd.com/u/olakunlevpn)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/olakunlevpn/olakunlevpn-blog-publishing

---


# 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 `&apos;`) |
| 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
---
```

- `date` is the real current date. Future-dated posts are skipped by the build and never render, so never post-date.
- `tags` are 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)

```bash
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

```bash
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

```bash
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

```bash
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)

```bash
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

```bash
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.

```bash
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

```bash
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

```bash
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 `spatie` when the subject is brand-swapped content
- [ ] Only the one post staged, never `git add .`
- [ ] Commit author is Olakunlevpn, zero AI attribution
- [ ] Pushed to `master` (not `main`) under the `olakunlevpn` account
- [ ] 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`. Pushing `main` silently 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 to `olakunlevpn` before pushing and switch back after.
- The Atom feed escapes apostrophes as `&apos;`. 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 one `PromptScript` failure. 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)
```

