feat(website): migrate blog from Aparador (14 posts EN+ES) (PR2)#164
Merged
Conversation
Migrates the 28 source files (14 bilingual pairs) from the editorial archive under Aparador/Para blog/ into the Docusaurus blog plugin. What landed: - scripts/migrate-blog.ts — one-shot migrator. Pairs source files by their `NN-` numeric prefix; normalizes frontmatter (drops `lang`, `translation_of`, `status`; converts `author` + `co-author` to `authors: [jose, claude-opus-47]`; preserves `title`, `subtitle`→`description`, `date`, `tags`); strips a duplicate leading `# Title` H1 when it matches the frontmatter title; writes ES files using the EN slug as filename (Docusaurus pairs locales by filename) while keeping each locale's native slug in frontmatter for legible URLs. Idempotent — only cleans .md files, preserves authors.yml. - website/blog/ + website/i18n/es/docusaurus-plugin-content-blog/ — 14 + 14 migrated posts. Filenames `YYYY-MM-DD-<EN-slug>.md`. - blog/authors.yml + i18n/es/.../authors.yml — author registry for `jose` (montfort) and `claude-opus-47`. - docusaurus.config.ts — replaces `blog: false` with the blog plugin config: RSS+Atom feeds, locale-aware editUrl, navbar and footer links to `/blog`. The source files in Aparador/Para blog/ stay as the editorial archive (the migrator reads them but does not move them). Re-running `npm run migrate:blog` is safe and regenerates the output. All posts publish on merge — the per-file `status: draft` from the editorial archive is dropped during migration (the author considers the set ready). To hold a post back, add `draft: true` to its frontmatter in a follow-up. Out of scope: PR3 (`feat/website-landing`) — custom landing with Hero, Mermaid workflow diagram, and FeatureGrid; can ship in parallel from main. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
Summary
Second of three planned PRs for the website rollout. Migrates the editorial archive (
Aparador/Para blog/, gitignored) into the Docusaurus blog plugin — 14 bilingual posts (28 files) about the framework's emergence and the patterns that crystallized during it.scripts/migrate-blog.ts— one-shot migrator. Pairs source files by theirNN-prefix; normalizes the editorial frontmatter to Docusaurus blog convention; strips duplicate H1s; writes ES files using the EN slug as filename so Docusaurus pairs locales correctly, while keeping each locale's native slug in frontmatter for clean URLs.website/blog/andwebsite/i18n/es/docusaurus-plugin-content-blog/— 14 + 14 migrated posts, filenamesYYYY-MM-DD-<EN-slug>.md.authors.ymlin both locales — registersjose(montfort) andclaude-opus-47.docusaurus.config.ts—blog: false→ blog plugin config: RSS + Atom feeds, locale-awareeditUrl, navbar and footer links to/blog.Source files in
Aparador/Para blog/stay as the editorial archive (the migrator reads them but does not move them). Re-runningnpm run migrate:blogis safe — only cleans.mdfiles, preservesauthors.yml/tags.yml.Frontmatter normalization
title,date,tagssubtitledescriptionauthor+co-authorauthors: [jose, claude-opus-47]lang,translation_of,statusslugadded per-locale: EN slug in EN file, ES slug in ES fileThe per-file
status: draftfrom the editorial archive is dropped — the author considers the set ready to publish at merge. To hold a post back, adddraft: trueto its frontmatter in a follow-up.URLs
/blog/<en-slug>/blog/four-names-in-four-months/es/blog/<es-slug>/es/blog/cuatro-nombres-en-cuatro-mesesLocale switcher works because both files share the same filename (
2026-04-05-four-names-in-four-months.md).Out of scope
PR3 (
feat/website-landing) — Hero + Mermaid workflow diagram + FeatureGrid custom landing. Can ship in parallel frommain.Known follow-ups (non-blocking)
docs/i18n/es/**cross-locale and../README.mdrefs). No new warnings from the blog.tags.ymlnot provided — Docusaurus auto-generates tag pages from the per-posttags:arrays. A curatedtags.ymlwith labels/descriptions can come later if needed.2026-05-09). Docusaurus disambiguates by slug, no conflict.Test plan
cd website && npm installnpm run migrate:blogre-runs cleanly (verifies idempotency);git diffshows no spurious changesnpm run startboots; navbar shows "Blog";/bloglists the 14 posts newest-firstnpm run start -- --locale es;/es/bloglists the 14 Spanish posts; switcher between EN/ES on a post lands on the paired translation/blog/rss.xmland/blog/atom.xmlvalidate (W3C feed validator)npm run buildexits 0 with no new warnings beyond the pre-existing PR1 setDeploy Websiteruns green and the live site athttps://strangedaystech.github.io/straymark/blogshows the posts🤖 Generated with Claude Code