<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cover-Image on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/tags/cover-image/</link><description>Recent content in Cover-Image on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Wed, 08 Apr 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/tags/cover-image/index.xml" rel="self" type="application/rss+xml"/><item><title>Log-Blog Dev Log #7 — Plugin Command Migration and Bilingual Cover Images</title><link>https://ice-ice-bear.github.io/posts/2026-04-08-log-blog-dev7/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-04-08-log-blog-dev7/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post Log-Blog Dev Log #7 — Plugin Command Migration and Bilingual Cover Images" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://ice-ice-bear.github.io/en/posts/2026-04-03-log-blog-dev6/" &gt;Previous post: Log-Blog Dev Log #6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If #6 was about marketplace migration and CDP reliability, #7 is about finalizing the plugin structure. The legacy &lt;code&gt;.claude/skills/&lt;/code&gt; directory was removed in favor of the plugin&amp;rsquo;s own &lt;code&gt;skills/&lt;/code&gt; directory. A &lt;code&gt;commands/&lt;/code&gt; directory was added for slash command autocomplete, and cover image generation was fixed to produce per-language files for bilingual blogs. Version bumped to 0.2.5.&lt;/p&gt;
&lt;hr&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 A["log-blog #7 Changes"] --&gt; B["Plugin Structure Cleanup"]
 A --&gt; C["Cover Image Fix"]
 A --&gt; D["Version 0.2.5"]

 B --&gt; B1["Remove legacy &amp;lt;br/&amp;gt; .claude/skills/"]
 B --&gt; B2["Add commands/ directory &amp;lt;br/&amp;gt; post.md, setup.md"]
 B --&gt; B3["Remove name field &amp;lt;br/&amp;gt; filename is the command name"]

 C --&gt; C1["Per-language covers &amp;lt;br/&amp;gt; cover-ko.jpg, cover-en.jpg"]
 C --&gt; C2["image frontmatter &amp;lt;br/&amp;gt; overwrite with correct path"]

 D --&gt; D1["pyproject.toml sync"]
 D --&gt; D2["Installation docs update"]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="plugin-structure-cleanup"&gt;Plugin Structure Cleanup
&lt;/h2&gt;&lt;h3 id="background-dual-path-problem"&gt;Background: Dual Path Problem
&lt;/h3&gt;&lt;p&gt;log-blog originally stored skill files in &lt;code&gt;.claude/skills/&lt;/code&gt;, which Claude Code would read directly. When the plugin migrated to marketplace-based installation in #6, the skill files moved to the plugin&amp;rsquo;s &lt;code&gt;skills/&lt;/code&gt; directory. However, the project root&amp;rsquo;s &lt;code&gt;.claude/skills/&lt;/code&gt; was never deleted. Having the same skills in two locations creates ambiguity about which one takes precedence and risks version mismatches.&lt;/p&gt;
&lt;h3 id="fix-remove-legacy-skills"&gt;Fix: Remove Legacy Skills
&lt;/h3&gt;&lt;p&gt;The &lt;code&gt;.claude/skills/&lt;/code&gt; directory was deleted entirely. The plugin&amp;rsquo;s &lt;code&gt;skills/post/SKILL.md&lt;/code&gt; and &lt;code&gt;skills/setup/SKILL.md&lt;/code&gt; are now the single source of truth for all skill definitions.&lt;/p&gt;
&lt;h3 id="adding-the-commands-directory"&gt;Adding the commands/ Directory
&lt;/h3&gt;&lt;p&gt;Claude Code plugins register markdown files in the &lt;code&gt;commands/&lt;/code&gt; directory as slash commands. The filename becomes the command name:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;commands/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── post.md → /logblog:post
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── setup.md → /logblog:setup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Initially each file included a &lt;code&gt;name:&lt;/code&gt; field in the YAML frontmatter, but this caused errors. Command names are derived automatically from filenames, so the field was unnecessary. Removing it resolved the issue.&lt;/p&gt;
&lt;p&gt;With this change, typing &lt;code&gt;/logblog:&lt;/code&gt; presents &lt;code&gt;post&lt;/code&gt; and &lt;code&gt;setup&lt;/code&gt; in the autocomplete list. Previously users had to remember the exact skill names.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="bilingual-cover-image-fix"&gt;Bilingual Cover Image Fix
&lt;/h2&gt;&lt;h3 id="problem-shared-cover-filename"&gt;Problem: Shared Cover Filename
&lt;/h3&gt;&lt;p&gt;On a bilingual blog, both Korean and English posts pointed to the same &lt;code&gt;cover.jpg&lt;/code&gt; path. When cover images include title text, the Korean-title cover and the English-title cover need to be separate files.&lt;/p&gt;
&lt;h3 id="fix"&gt;Fix
&lt;/h3&gt;&lt;p&gt;The cover image generator now receives a &lt;code&gt;language&lt;/code&gt; parameter. When specified, filenames split into &lt;code&gt;cover-ko.jpg&lt;/code&gt; and &lt;code&gt;cover-en.jpg&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;static/images/posts/2026-04-08-example/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── cover-ko.jpg ← Korean title
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── cover-en.jpg ← English title
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;image:&lt;/code&gt; frontmatter injection was also fixed to overwrite with the correct per-language path. Previously, generating a cover image did not update the frontmatter path — a silent bug that left posts pointing to stale or wrong images.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="version-025-and-installation-docs"&gt;Version 0.2.5 and Installation Docs
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;pyproject.toml&lt;/code&gt; was synced to version 0.2.5, and installation documentation was updated to reflect the plugin menu workflow. The previous docs still described the global installation method, which was replaced with the marketplace-based flow.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="commit-log"&gt;Commit Log
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Message&lt;/th&gt;
 &lt;th&gt;Changes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;fix: overwrite image frontmatter with correct cover path and bump to 0.2.5&lt;/td&gt;
 &lt;td&gt;Cover path + version&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;fix: pass language to cover image generator for per-language filenames&lt;/td&gt;
 &lt;td&gt;Bilingual covers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;chore: sync pyproject.toml version to 0.2.5&lt;/td&gt;
 &lt;td&gt;Version sync&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;fix: remove old .claude/skills/ — use plugin skills/ directory only&lt;/td&gt;
 &lt;td&gt;Legacy removal&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;feat: add commands/ directory for /logblog:post and /logblog:setup slash commands&lt;/td&gt;
 &lt;td&gt;Commands added&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;fix: remove name field from commands — filename is the command name&lt;/td&gt;
 &lt;td&gt;Name field removal&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;docs: update installation instructions for plugin menu workflow&lt;/td&gt;
 &lt;td&gt;Install docs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;p&gt;This was a 7-commit session with modest code changes, but the nature of the work was structural finalization. Deleting legacy &lt;code&gt;.claude/skills/&lt;/code&gt; is a one-line decision, but postponing it means constantly questioning which directory is authoritative. Cleanup work is less visible than new features, but skipping it compounds confusion on every subsequent change.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;name&lt;/code&gt; field insert-then-remove cycle in &lt;code&gt;commands/&lt;/code&gt; is a classic case of writing code before reading the docs. Checking the plugin&amp;rsquo;s command registration rules first would have reduced two commits to one. The fix was quick, but the unnecessary commit remains in history.&lt;/p&gt;
&lt;p&gt;The bilingual cover image change is small but has outsized UX impact. Cover images appear as og:image in social media shares — showing a Korean-title cover on an English post confuses readers. Per-language separation is a baseline requirement for bilingual blogs that was missing until now.&lt;/p&gt;</description></item></channel></rss>