Skip to content

Commit 8edec7e

Browse files
Merge branch 'master' into remove-react-loadable
2 parents f91efa9 + 90f027f commit 8edec7e

19 files changed

Lines changed: 593 additions & 35 deletions

File tree

.claude/skills/layer5-blog-writer/SKILL.md

Lines changed: 75 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ description: Creates complete, publication-ready blog posts for layer5.io/blog w
55

66
# Layer5 Blog Writer
77

8-
You create complete, publication-ready blog posts for [layer5.io/blog](https://layer5.io/blog) and generate branded hero images. You produce:
8+
You create complete, publication-ready blog posts for [layer5.io/blog](https://layer5.io/blog), generate branded hero images, and ship them all the way to merged on `master`. You produce:
99

1010
1. A fully-formed `index.mdx` at the correct path in the Layer5 repo
1111
2. A branded hero image (SVG) in the same directory
12-
3. A brief handoff note covering what was created
12+
3. A signed-off commit on a dedicated branch in an isolated worktree
13+
4. A pull request that is auto-merged (regular fast-forward, no review wait)
14+
5. A brief handoff note covering what was created and the merged PR URL
1315

1416
## Layer5 Brand Voice
1517

@@ -78,27 +80,45 @@ Before writing:
7880
- **Resource flag**: Worth adding `resource: true`?
7981
- **Design embed**: Does this post walk through a specific infrastructure topology (Redis, Dapr, a Kubernetes Deployment, an AWS pattern)? If so, plan to embed the matching Kanvas design with `<MesheryDesignEmbed>`. The available designs and their IDs are in `references/blog-structure.md`.
8082

81-
### Step 4 — Write the blog post
83+
### Step 4 — Set up the git worktree
84+
85+
All file writes for this blog post happen inside an isolated git worktree, never in the main checkout. This keeps the working directory clean and lets the entire branch be deleted at the end with no residue.
86+
87+
```bash
88+
REPO_ROOT=$(git -C "$(pwd)" rev-parse --show-toplevel)
89+
SLUG="kebab-case-descriptive-slug" # matches the folder name under src/collections/blog/YYYY/
90+
BRANCH="blog/${SLUG}"
91+
WORKTREE_DIR="${REPO_ROOT}/.claude/worktrees/blog-${SLUG}"
92+
93+
git -C "$REPO_ROOT" fetch origin master
94+
git -C "$REPO_ROOT" worktree add -b "$BRANCH" "$WORKTREE_DIR" origin/master
95+
96+
cd "$WORKTREE_DIR"
97+
```
98+
99+
`<repo>/.claude/worktrees/` is the convention this repo already uses for isolated worktrees. Treat `$WORKTREE_DIR` as the working root for every later step. Every path below (e.g. `src/collections/blog/...`) is relative to `$WORKTREE_DIR`.
100+
101+
If the worktree path already exists from a prior run, `git worktree add` will fail. Pick a different slug, or run `git worktree remove "$WORKTREE_DIR"` first. Never `rm -rf` a worktree directory without removing it through git, or the metadata under `.git/worktrees/` will go stale.
102+
103+
### Step 5 — Write the blog post
82104

83105
Read `references/blog-structure.md` for the full format spec.
84106

85-
**File path:**
107+
**File path (inside the worktree):**
86108

87109
```
88110
src/collections/blog/YYYY/MM-DD-descriptive-slug/index.mdx
89111
```
90112

91-
Work from the root of the Layer5 repo. To find it, run `git rev-parse --show-toplevel` from any directory inside the repo.
92-
93-
### Step 5 — Generate the hero image
113+
### Step 6 — Generate the hero image
94114

95115
```bash
96116
python3 "<skill_dir>/scripts/generate_hero_image.py" \
97117
--title "Your Blog Post Title" \
98118
--subtitle "Optional subtitle" \
99119
--category "Kubernetes" \
100120
--output "src/collections/blog/YYYY/MM-DD-slug/hero-image.svg" \
101-
--repo-root /path/to/layer5/repo
121+
--repo-root "$WORKTREE_DIR"
102122
```
103123

104124
Produces a fully SVG-native 1200x630 image that:
@@ -120,7 +140,7 @@ Produces a fully SVG-native 1200x630 image that:
120140
- Five's colors are never modified: black skeleton, teal (#00B39F) shoes and hands
121141
- Five appears large (occupying the right ~42% of the frame, nearly full height) - not a small decorative accent
122142

123-
Pass `--repo-root` as the absolute path to the Layer5 repo root (use `git rev-parse --show-toplevel` from inside the repo). Without it, the script still runs but omits the Five mascot and brand font.
143+
Pass `--repo-root` as the absolute path to the worktree root (`$WORKTREE_DIR` from Step 4). Without it, the script still runs but omits the Five mascot and brand font.
124144

125145
See `assets/sample-hero-images/` for visual reference across different category palettes.
126146

@@ -131,7 +151,9 @@ thumbnail: ./hero-image.svg
131151
darkthumbnail: ./hero-image.svg
132152
```
133153
134-
### Step 6 — Final quality check
154+
### Step 7 — Final quality check
155+
156+
Run from inside `$WORKTREE_DIR`. Do not proceed to Step 8 until every box is checked.
135157

136158
**Structure and components:**
137159

@@ -164,6 +186,49 @@ darkthumbnail: ./hero-image.svg
164186
- [ ] Tags match the approved list casing exactly (e.g. `ai` is lowercase, `Open Source` is title case) - see `references/tags-categories.md`
165187
- [ ] Category is exactly one from the approved list
166188

189+
**Authorship:**
190+
191+
- [ ] No reference to AI assistants, AI tooling, or automated authorship anywhere in the post, frontmatter, metadata, alt text, or comments. The post must read as the author's own work.
192+
193+
### Step 8 — Commit, push, auto-merge, and remove the worktree
194+
195+
Land the post on `master` without leaving a PR open for review. The repo's standard merge strategy is regular fast-forward; the workflow below produces a single signed-off commit on top of `origin/master` and merges it via `gh pr merge --merge --delete-branch`.
196+
197+
**Authorship rule (non-negotiable):** the commit message, PR title, PR body, and any other text introduced by this skill must contain no reference to AI assistants, AI authoring tools, "Co-Authored-By" trailers, or automation by name. The signoff is the user's configured `user.name <user.email>`, appended only by `git commit -s`. Do not add `--author`, do not add trailers, do not add "generated with" lines.
198+
199+
```bash
200+
# Run from inside $WORKTREE_DIR
201+
cd "$WORKTREE_DIR"
202+
203+
TITLE="<the blog post's title>" # same as the post's frontmatter title
204+
git add "src/collections/blog/$(date -u +%Y)/" # or the explicit YYYY/MM-DD-slug path
205+
git commit -s -m "blog: ${TITLE}"
206+
207+
# Push and open the PR
208+
git push -u origin "$BRANCH"
209+
PR_URL=$(gh pr create \
210+
--base master \
211+
--head "$BRANCH" \
212+
--title "blog: ${TITLE}" \
213+
--body "Adds the \`${SLUG}\` blog post under \`src/collections/blog/\`.")
214+
215+
# Auto-merge on behalf of the user (regular fast-forward, no review wait)
216+
gh pr merge --merge --delete-branch "$PR_URL"
217+
218+
# Tear down the worktree once the merge is confirmed
219+
cd "$REPO_ROOT"
220+
git worktree remove "$WORKTREE_DIR"
221+
git -C "$REPO_ROOT" pull --ff-only origin master
222+
```
223+
224+
Failure handling:
225+
226+
- If `gh pr merge` reports the PR is not yet mergeable (e.g. CI check pending or branch protection requires status checks), poll with `gh pr checks "$PR_URL" --watch` and retry the merge. Do not leave the PR half-shipped.
227+
- If the merge cannot complete (branch protection blocks `--merge`, conflicts on `master`), report the PR URL and the specific blocker; do not remove the worktree until the user decides how to proceed.
228+
- If `git worktree remove` fails because the worktree has untracked files, investigate before forcing - there may be unsaved work.
229+
230+
End the run with a one-paragraph handoff: the merged PR URL, the post path on `master`, and any follow-ups (e.g. broken cross-links, a Kanvas design ID still to be confirmed).
231+
167232
## Reference files
168233

169234
- **`references/blog-structure.md`** — Complete MDX format, frontmatter fields, all component patterns including `<MesheryDesignEmbed>` with the full table of available designs. Read before writing.

package-lock.json

Lines changed: 19 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"@mui/icons-material": "^7.3.5",
4949
"@mui/material": "^7.3.4",
5050
"@react-icons/all-files": "^4.1.0",
51-
"@sistent/sistent": "^0.18.8",
51+
"@sistent/sistent": "^0.21.2",
5252
"@svgr/webpack": "^8.0.1",
5353
"axios": "^1.13.2",
5454
"babel-plugin-styled-components": "^2.1.4",

src/collections/handbook/recognition/badges-data.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/collections/handbook/recognition/index.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ description: "Layer5 readily recognizes and publicly appreciates its community m
44
type: Handbook
55
contents:
66
- id: 0
7-
link: "#Profile Bages"
8-
text: "Profile Bages"
7+
link: "#Profile Badges"
8+
text: "Profile Badges"
99
- id: 1
1010
link: "#Membership"
1111
text: "Membership to GitHub"
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

src/collections/integrations/consul/index.mdx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,12 @@ components: [
194194
"colorIcon": "icons/components/tcp-route/icons/color/tcp-route-color.svg",
195195
"whiteIcon": "icons/components/tcp-route/icons/white/tcp-route-white.svg",
196196
"description": "",
197+
},
198+
{
199+
"name": "rate-limit",
200+
"colorIcon": "icons/components/rate-limit/icons/color/rate-limit-color.svg",
201+
"whiteIcon": "icons/components/rate-limit/icons/white/rate-limit-white.svg",
202+
"description": "",
197203
}]
198204
featureList: [
199205
"Visualize the topology of your Consul service mesh deployment",
524 KB
Loading
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
name: Apipawe Katoto Daniel
3+
position: Contributor
4+
image_path: ./Apipawe-katoto.jpeg
5+
github: Katotodan
6+
layer5: 7e926cc5-8cde-4383-8c69-56ab6276b537
7+
location: Kampala,Uganda
8+
linkedin: apipawe-katoto-daniel-68a94422b
9+
twitter: DanielKatoto
10+
bio: I'm passionate about software engineering, with experience in frontend development using JavaScript and TypeScript, and backend development with JavaScript, TypeScript, Python, and Go. Currently, I'm exploring the cloud-native ecosystem, contributing to open source, and continuously learning new technologies and best practices.
11+
status: Active
12+
published: true
13+
---

0 commit comments

Comments
 (0)