Skip to content

feat(website): migrate blog from Aparador (14 posts EN+ES) (PR2)#164

Merged
montfort merged 1 commit into
mainfrom
feat/website-blog
May 18, 2026
Merged

feat(website): migrate blog from Aparador (14 posts EN+ES) (PR2)#164
montfort merged 1 commit into
mainfrom
feat/website-blog

Conversation

@montfort
Copy link
Copy Markdown
Contributor

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 their NN- 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/ and website/i18n/es/docusaurus-plugin-content-blog/ — 14 + 14 migrated posts, filenames YYYY-MM-DD-<EN-slug>.md.
  • authors.yml in both locales — registers jose (montfort) and claude-opus-47.
  • docusaurus.config.tsblog: false → blog plugin config: RSS + Atom feeds, locale-aware editUrl, 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-running npm run migrate:blog is safe — only cleans .md files, preserves authors.yml / tags.yml.

Frontmatter normalization

Source Destination
title, date, tags preserved
subtitle renamed to description
author + co-author replaced with authors: [jose, claude-opus-47]
lang, translation_of, status dropped
(none) slug added per-locale: EN slug in EN file, ES slug in ES file

The per-file status: draft from the editorial archive is dropped — the author considers the set ready to publish at merge. To hold a post back, add draft: true to its frontmatter in a follow-up.

URLs

Locale URL pattern Example
EN /blog/<en-slug> /blog/four-names-in-four-months
ES /es/blog/<es-slug> /es/blog/cuatro-nombres-en-cuatro-meses

Locale 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 from main.

Known follow-ups (non-blocking)

  • The 8 broken-link warnings on the build come from PR1 (docs/i18n/es/** cross-locale and ../README.md refs). No new warnings from the blog.
  • tags.yml not provided — Docusaurus auto-generates tag pages from the per-post tags: arrays. A curated tags.yml with labels/descriptions can come later if needed.
  • A few post slugs share a date (e.g. two on 2026-05-09). Docusaurus disambiguates by slug, no conflict.

Test plan

  • cd website && npm install
  • npm run migrate:blog re-runs cleanly (verifies idempotency); git diff shows no spurious changes
  • npm run start boots; navbar shows "Blog"; /blog lists the 14 posts newest-first
  • npm run start -- --locale es; /es/blog lists the 14 Spanish posts; switcher between EN/ES on a post lands on the paired translation
  • /blog/rss.xml and /blog/atom.xml validate (W3C feed validator)
  • npm run build exits 0 with no new warnings beyond the pre-existing PR1 set
  • After merge, Deploy Website runs green and the live site at https://strangedaystech.github.io/straymark/blog shows the posts

🤖 Generated with Claude Code

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>
@montfort montfort merged commit f1b8653 into main May 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant