[POST] Add Pokémon TCG Catalog post#8
Merged
Merged
Conversation
# Problem The blog had no published posts, tags rendered as plain comma-separated text with no visual weight, and external links in post markdown opened in the same tab without `rel="noopener"`, leaving the site exposed to reverse tabnabbing. # Solution Added the first blog post documenting a one-night build of a Pokémon card scanner using Claude Code, Next.js, and an agent-driven XP workflow. The post covers architecture decisions (structured tool output, lazy price caching, server-first rendering), honest limitations, and a broader reflection on lowered barriers to building software. Refactored tag rendering site-wide to use styled pill components. Tags now render via a `renderTagPills` helper in build.js that wraps each tag in a `<span class="tag">` element. Supporting CSS adds dark background, rounded corners, and tight typographic treatment. This replaces comma-separated text across post pages, theme listing pages, and the homepage post list. Secured all external links: markdown-authored links in post body copy now get `target="_blank" rel="noopener"` via a markdown-it renderer override in build.js, scoped only to post content so site navigation stays in-tab. Static external links in index.html were updated with matching `rel="noopener"` attributes by hand. # Notes The generated HTML files (index.html, side-projects/index.html, side-projects/2026-05-24-*.html) are committed directly — that's intentional for the GitHub Pages build pipeline. Empty `.keep` files in js/ and posts/ were removed as dead scaffolding, and .claude/ was added to .gitignore.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The blog had no published posts, tags rendered as plain comma-separated text with no visual weight, and external links in post markdown opened in the same tab without
rel="noopener", leaving the site exposed to reverse tabnabbing.Solution
Added the first blog post documenting a one-night build of a Pokémon card scanner using Claude Code, Next.js, and an agent-driven XP workflow. The post covers architecture decisions (structured tool output, lazy price caching, server-first rendering), honest limitations, and a broader reflection on lowered barriers to building software.
Refactored tag rendering site-wide to use styled pill components. Tags now render via a
renderTagPillshelper in build.js that wraps each tag in a<span class="tag">element. Supporting CSS adds dark background, rounded corners, and tight typographic treatment. This replaces comma-separated text across post pages, theme listing pages, and the homepage post list.Secured all external links: markdown-authored links in post body copy now get
target="_blank" rel="noopener"via a markdown-it renderer override in build.js, scoped only to post content so site navigation stays in-tab. Static external links in index.html were updated with matchingrel="noopener"attributes by hand.Notes
The generated HTML files (index.html, side-projects/index.html, side-projects/2026-05-24-*.html) are committed directly — that's intentional for the GitHub Pages build pipeline. Empty
.keepfiles in js/ and posts/ were removed as dead scaffolding, and .claude/ was added to .gitignore.