Skip to content

Rebrand /what-is/ as Pulumi Resources at /resources/ (existing article URLs preserved) - #20595

Open
CamSoper wants to merge 8 commits into
masterfrom
claude/seo-content-url-restructure-zef591
Open

Rebrand /what-is/ as Pulumi Resources at /resources/ (existing article URLs preserved)#20595
CamSoper wants to merge 8 commits into
masterfrom
claude/seo-content-url-restructure-zef591

Conversation

@CamSoper

@CamSoper CamSoper commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Proposed changes

Rebrands the SEO explainer section ("What Is…") as Pulumi Resources, with the section landing at /resources/, per SEO consultant guidance. Per that same guidance, no existing article URL changes — this is the load-bearing constraint of the PR, so reviewers: the per-page url: pins are intentional, not mistakes.

Retargeted from /learn/. The first version of this PR used /learn/; @cnunciato has plans for that URL, and Chris suggested /resources/. The bare /learn alias on the tutorials section — which the earlier version removed — is restored, so /learn redirects to Tutorials exactly as it does on master today.

Content

  • content/what-is/content/resources/ (git mv, history preserved). Every article gets a url: /what-is/<slug>/ front-matter pin, so it is served at its exact old URL with no redirect, and type: what-istype: resources. New articles added to the section get /resources/<slug>/ URLs by default.
  • The section landing moves to /resources/ (titled "Pulumi Resources") with aliases: [/what-is/] — the single deliberate redirect.
  • content/topics/why-is-python-so-popular.md retyped (it borrows the section layout).

Type/layout rename (what-isresources)

  • layouts/what-is/layouts/resources/, layouts/partials/what-is/layouts/partials/resources/, data/what_is_sections.ymldata/resource_sections.yml.
  • .Type comparisons updated in the schema partials (breadcrumb, main-entity, FAQ graph-builder); breadcrumb crumb is now "Resources" → /resources/.
  • Filter UI contract renamed: theme/src/ts/what-is-list.tsresources-list.ts, data-what-is-filterdata-resources-filter (template + TS + SCSS kept in sync). Analytics data-track slugs keep their existing what-is-* names for reporting continuity.
  • scripts/generate-meta-images.mjs section registry, layouts/index.llms.txt section entry, and the why-pulumi relref (content-path based) updated.
  • Markdown content negotiation (Serve markdown for the homepage, /what-is/, /product/, and /pricing/ #20593) carried over: the landing keeps the outputs/cascade front matter, and the CloudFront allowlist in infrastructure/cloudfrontFunctions.ts covers /resources/ alongside the still-live pinned /what-is/ article paths (BUILD-AND-DEPLOY.md updated to match).
  • Agent docs/path gates point at content/resources/; internal-link URL matchers deliberately keep what-is because the pinned article URLs remain live.

Verified with make build: all 63 pinned articles render as full pages (no meta-refresh) at their old /what-is/<slug>/ URLs and stay in the sitemap; /resources/ renders the landing with rows linking to the pinned URLs; /what-is/ emits the alias redirect to /resources/; /learn still redirects to Tutorials; /resources/index.md and the per-article .md artifacts are emitted; JSON-LD breadcrumbs point at /resources/. make lint passes.

@CamSoper
CamSoper force-pushed the claude/seo-content-url-restructure-zef591 branch from 17747a4 to cba5c9a Compare July 30, 2026 21:15
@pulumi-bot

pulumi-bot commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Your site preview for commit 9bfd557 is ready! 🎉

http://www-testing-pulumi-docs-origin-pr-20595-9bfd5570.s3-website.us-west-2.amazonaws.com

Changed pages:

@pulumi-bot

pulumi-bot commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Lighthouse Performance Report

Commit: 9bfd557 | Metric definitions

Page Device Score FCP LCP TBT CLS SI
Homepage Mobile 🔴 38 3.5s 8.9s 1732ms 0.001 4.9s
Homepage Desktop 🟢 93 0.8s 1.2s 158ms 0.011 0.9s
Install Pulumi Mobile 🟡 57 7.5s 16.1s 96ms 0.000 7.5s
Install Pulumi Desktop 🟢 91 1.1s 1.7s 0ms 0.015 1.1s
AWS Get Started Mobile 🟡 57 7.6s 15.9s 21ms 0.000 7.6s
AWS Get Started Desktop 🟢 93 1.1s 1.4s 0ms 0.019 1.1s

@CamSoper
CamSoper force-pushed the claude/seo-content-url-restructure-zef591 branch from cba5c9a to 8b52c7a Compare July 30, 2026 22:29
@CamSoper
CamSoper marked this pull request as ready for review July 30, 2026 23:16
@CamSoper

Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts in this pull request

Copilot AI commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

@copilot resolve the merge conflicts in this pull request

Merge conflicts resolved in commit f5091ca.

The only conflict was content/what-is/_index.md — my branch deleted it (moved to content/learn/), while master added outputs/cascade frontmatter to it for markdown content negotiation (#20593). Resolution:

  1. Applied the outputs: [HTML, markdown] and cascade frontmatter to content/learn/_index.md so the Pulumi Learn landing and its child articles emit markdown artifacts.
  2. Updated the CloudFront function's eligible-prefix allowlist to include /learn/ alongside /what-is/, so Accept: text/markdown requests and .md-suffix URLs work for the new section landing.

@CamSoper
CamSoper force-pushed the claude/seo-content-url-restructure-zef591 branch from f5091ca to 762a6de Compare July 30, 2026 23:26

Copy link
Copy Markdown
Contributor Author

Heads up: the branch was force-pushed with a rebase onto current master (762a6de), which supersedes Copilot's merge commit f5091ca. Both resolutions were functionally the same; the rebase additionally carries the /learn/ markdown-negotiation change as its own commit (CloudFront allowlist + BUILD-AND-DEPLOY.md docs) and was verified locally with make build — pinned /what-is/<slug>/ pages emit both full HTML and index.md artifacts, /learn/index.md exists, and /what-is/ redirects to /learn/.


Generated by Claude Code

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Rebrands the “What Is…” explainer section as Pulumi Learn by moving content and templates to /learn/ while preserving existing explainer article URLs under /what-is/<slug>/ via per-page url: frontmatter pins.

Changes:

  • Migrates explainer content, layouts, data, and client-side filter UI from what-islearn, and updates schema/SEO-related helpers accordingly.
  • Introduces a new /learn/ landing page (with an alias redirect from /what-is/) and frees /learn from the Tutorials section alias.
  • Updates internal references (meta-image generation, llms.txt index, marketing relrefs) to point at the new Learn section structure.

Reviewed changes

Copilot reviewed 100 out of 101 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
theme/src/ts/main.ts Switches the bootstrapped filter module import from what-is-list to learn-list.
theme/src/ts/learn-list.ts Implements the Learn landing-page filter behavior and updates DOM contract selectors.
theme/src/scss/_blog.scss Updates active-pill styling selector to [data-learn-filter].
scripts/meta-images/render.mjs Updates template comment to reflect “learn” usage.
scripts/generate-meta-images.mjs Renames the “title” section registry from what-is to learn and updates docs/comments.
layouts/partials/schema/graph-builder.html Gates FAQ schema on .Type == "learn" instead of "what-is".
layouts/partials/schema/collectors/main-entity.html Treats learn pages as Article/CollectionPage (replacing what-is).
layouts/partials/schema/collectors/breadcrumb-entity.html Updates breadcrumb JSON-LD logic and section partial reference for learn.
layouts/partials/schema/collectors/article-entity.html Updates schema comment to reference learn pages.
layouts/partials/meta-image-url.html Updates docs/comments to reflect learn section in generated meta-image pathing.
layouts/partials/learn/section-for-page.html New/renamed helper to map a learn page to its curated section from data/learn_sections.yml.
layouts/partials/learn/row.html New/renamed partial to render a single Learn explainer row.
layouts/page/why-pulumi.html Updates relref to the moved explainer content path under /learn/.
layouts/learn/single.html New/renamed single-page layout for learn explainers (breadcrumb now “Learn”).
layouts/learn/list.html New/renamed landing-page template, including the section filter UI and grouped rows.
layouts/index.llms.txt Renames the llms.txt index entry from “What is…” to “Pulumi Learn” and points at /learn/.
layouts/case-studies/single.html Updates comment referencing the learn pages.
data/learn_sections.yml Renames/ports the curated section grouping data file from what-is to learn.
content/what-is/_index.md Removes the old section landing frontmatter (section landing now lives at /learn/).
content/tutorials/_index.md Removes the legacy /learn alias so /learn/ can serve Pulumi Learn.
content/topics/why-is-python-so-popular.md Retypes the page to learn to use the learn layout.
content/learn/_index.md Adds the new Pulumi Learn section landing page with aliases: [/what-is/].
content/learn/what-is-yaml.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-terragrunt.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-terraform-state.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-soc-2.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-serverless.md Retypes to learn, pins URL to /what-is/.../, and updates an embedded image link path.
content/learn/what-is-secrets-management.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-pulumi.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-policy-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-platform-engineering.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-infrastructure-drift.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-infrastructure-as-software.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-infrastructure-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-immutable-infrastructure.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-hitrust.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-hipaa.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-hashicorp-vault.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-google-cloud-secret-manager.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-gitops.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-devops.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-devops-automation.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-configuration-management.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-cloud-security.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-cloud-misconfiguration.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-cloud-infrastructure-autoscaling.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-ci-cd.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-azure-key-vault.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-aws-secrets-manager.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-an-internal-developer-platform.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-agentic-infrastructure.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-a-terraform-module.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-a-github-action-secret.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-a-cloudflare-secret.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-a-circleci-secret.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-are-kubernetes-secrets.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-are-docker-secrets.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-are-docker-configs.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-sts-get-caller-identity-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-s3-sync-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-s3-ls-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-s3-cp-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-lambda-list-functions-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-iam-list-users-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-ec2-stop-instances-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-ec2-start-instances-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-ec2-describe-instances-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-dynamodb-list-tables-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-cloudwatch-get-metric-data-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-unable-to-locate-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-list-buckets-signature-does-not-match.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-list-buckets-invalid-client-token-id.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-list-buckets-invalid-access-key-id.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-list-buckets-expired-token.md Retypes to learn and pins URL to /what-is/.../.
content/learn/python-for-devops.md Retypes to learn and pins URL to /what-is/.../.
content/learn/mcp-for-infrastructure-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/javascript-and-infrastructure-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/is-kubernetes-infrastructure-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/infrastructure-as-code-for-kubernetes.md Retypes to learn and pins URL to /what-is/.../.
content/learn/infrastructure-as-code-for-devops.md Retypes to learn and pins URL to /what-is/.../.
content/learn/guide-to-automating-file-expiration-in-aws-s3.md Retypes to learn and pins URL to /what-is/.../.
content/learn/database-comparison-cosmos-db-vs-dynamodb.md Retypes to learn and pins URL to /what-is/.../.
content/learn/cosmos-db-vs-mongodb-know-the-differences.md Retypes to learn and pins URL to /what-is/.../.
content/learn/amazon-dynamodb-vs-google-cloud-bigtable.md Retypes to learn and pins URL to /what-is/.../.
AGENTS.md Updates repo guidance to replace “what-is” references with “learn”.
.github/workflows/claude-update.yml Updates prose-file path filters to remove content/what-is/.
.github/workflows/claude-triage.yml Updates prose-file path filters to remove content/what-is/.
.github/workflows/claude-code-review.yml Updates prose-file path filters to remove content/what-is/.
.github/labels-pr-review.md Updates docs-domain label definition to remove content/what-is/.
.claude/commands/seo-analyze/SKILL.md Updates SEO analyze skill text/examples from what-is to learn.
.claude/commands/pr-review/scripts/should-fact-check.sh Updates content-path trigger logic to remove what-is.
.claude/commands/new-doc/references/meta-images.md Updates meta-image coverage docs from what-is to learn.
.claude/commands/docs-review/scripts/validate-pinned.py Updates prose-path documentation comment to remove what-is.
.claude/commands/docs-review/scripts/triage-classify.py Updates domain routing to remove content/what-is/.
.claude/commands/docs-review/scripts/extract-urls-and-fetch.py Updates prose-path filter regex/docs to remove what-is.
.claude/commands/docs-review/references/website.md Updates scope description to remove what-is.
.claude/commands/docs-review/references/domain-routing.md Updates domain routing table to remove content/what-is/**.
.claude/commands/docs-review/references/docs.md Updates docs-review criteria text from what-is to learn.
Comments suppressed due to low confidence (2)

content/learn/what-is-serverless.md:88

  • The page links to an image at /learn/serverless-resources.png, but the only matching asset in the repo is content/learn/serverless-resources.png. Hugo only serves files from static/ by default (see config/_default/config.yml mounts), so this absolute URL will likely 404 in production.
    layouts/learn/list.html:85
  • The filter UI is described (and implemented in learn-list.ts) as progressive enhancement over real anchor links, but the "All" pill is a . Without JS, it won’t provide the same link behavior as the other pills, and it contradicts the stated no-JS/crawler fallback.

Comment thread theme/src/scss/_blog.scss Outdated
Comment on lines +38 to +42
@@ -39,7 +39,7 @@
// blog-list.ts) and the /what-is/ section filter pill (moved by what-is-list.ts).
// Styled to match the mockup's selected pill.
[data-blog-filter] .is-active,
[data-what-is-filter] .is-active,
[data-learn-filter] .is-active,
@CamSoper

CamSoper commented Jul 31, 2026

Copy link
Copy Markdown
Contributor Author

Flipping back to draft, @cnunciato already has plans for /learn. Chris suggests /resources.

@CamSoper
CamSoper marked this pull request as draft July 31, 2026 18:42
@CamSoper
CamSoper force-pushed the claude/seo-content-url-restructure-zef591 branch from dda08c3 to e225342 Compare August 5, 2026 22:32
@CamSoper CamSoper changed the title Rebrand /what-is/ as Pulumi Learn at /learn/ (existing article URLs preserved) Rebrand /what-is/ as Pulumi Resources at /resources/ (existing article URLs preserved) Aug 5, 2026
@CamSoper
CamSoper marked this pull request as ready for review August 5, 2026 22:40
@CamSoper
CamSoper requested a review from cnunciato August 5, 2026 22:40
@github-actions github-actions Bot added review:triaging Claude Triage is currently classifying the PR domain:website PR touches marketing, pricing, legal, or competitive landing pages domain:docs PR touches technical docs domain:mixed PR touches more than one domain labels Aug 5, 2026
@github-actions github-actions Bot added review:outstanding-issues Claude review completed; outstanding has author-actionable findings and removed review:in-progress Claude review is currently running labels Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

@claude #update-review

Good catch — that one's real and I'd missed it. Fixed in 7110eff5.

I confirmed the breakage independently before fixing: https://www.pulumi.com/what-is/serverless-resources.png returns HTTP 200 image/png today, and this branch stops emitting anything at that path (public/what-is/serverless-resources.png is absent from the build; the file is published at /resources/serverless-resources.png instead). You're right that the aliases: [/what-is/] entry doesn't cover it — Hugo aliases are page-level.

Added the S3 redirect exactly as suggested, following the moved-image precedent already in that file:

what-is/serverless-resources.png|/resources/serverless-resources.png

Placed next to the existing what-is/ entry with a comment explaining why an alias can't do the job.

Two notes:

  • Scope check: I swept the section for other non-Markdown files, and serverless-resources.png is the only one — so this is the complete fix, not just the instance you happened to surface.
  • I took the redirect over the alternative of leaving the PNG behind, for the reason you gave: parking it would resurrect a content/what-is/ directory the branch otherwise removes entirely.

make lint passes. Worth calling out that this was the single /what-is/ URL the PR didn't preserve, on a PR whose entire premise is preserving them — a good find.


Generated by Claude Code

@github-actions github-actions Bot added review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention review:in-progress Claude review is currently running and removed review:outstanding-issues Claude review completed; outstanding has author-actionable findings review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention labels Aug 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🤖 Review updated on @CamSoper's request.

@github-actions github-actions Bot added review:no-blockers Claude review completed cleanly; outstanding is empty and removed review:in-progress Claude review is currently running labels Aug 11, 2026
claude added 8 commits August 13, 2026 03:46
…e URLs

Move content/what-is/ to content/learn/ and retype pages what-is -> learn.
Every existing article keeps its /what-is/<slug>/ URL via a per-page url:
pin (no redirects), per SEO guidance. The section landing moves to /learn/
with an alias from /what-is/. The bare /learn alias on the tutorials
section (legacy Learn Pulumi redirect) is removed to free the URL; the
/learn/<path>/ sub-aliases remain intact.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
…ages

Rename layouts/what-is -> layouts/learn, partials/what-is -> partials/learn,
data/what_is_sections.yml -> learn_sections.yml, and the filter UI contract
(what-is-list.ts -> learn-list.ts, data-what-is-filter -> data-learn-filter).
Update .Type comparisons in the schema partials, the breadcrumb landing URL
and label, the why-pulumi relref content path, the llms.txt section entry,
and the generate-meta-images section registry. Analytics data-track slugs
keep their existing what-is-* names for reporting continuity.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
content/what-is/ no longer exists, so drop it from content-path filters and
review-skill references. Internal-link URL matchers keep what-is because the
pinned article URLs remain live.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
Master's #20593 enabled markdown artifacts for /what-is/; carry the
outputs/cascade front matter onto the relocated Pulumi Learn landing and
add /learn/ to the CloudFront allowlist. Pinned articles keep emitting
under /what-is/, which stays allowlisted; the bare /what-is/ landing is
now an alias with no artifact.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
/learn/ is spoken for, so the explainer section lands at /resources/ as
Pulumi Resources: content/learn -> content/resources, type learn ->
resources, layouts/partials/data/theme renamed to match, and the
CloudFront markdown allowlist, meta-image registry, llms.txt entry, and
schema breadcrumbs repointed. The bare /learn alias on the tutorials
section is restored, since this branch no longer needs that URL.

Existing article URLs are untouched — every page keeps its
/what-is/<slug>/ pin, and /what-is/ still aliases to the section landing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
…otiation

- content/events/_index.md claimed /resources as an alias (added when the
  migration hub was removed in #20247), which competed with the new section
  landing for the same output path. Drop it; /resources now belongs to the
  explainer section, and /webinar and /webinars still redirect to /events/.
- The CloudFront markdown allowlist matched the bare /what-is/ landing on a
  plain prefix test, so an Accept: text/markdown request would rewrite to
  /what-is/index.md — an artifact that no longer exists now that the landing
  is only an alias. Exclude the bare landing; pinned /what-is/<slug>/ paths
  still negotiate normally.
- Fix a stale 'learn' comment in the schema collector, restore indentation
  lost in layouts/resources/single.html, refresh the Vale path list comment,
  and note that the filter's what-is-* data-track ids are kept deliberately.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
The section's one image asset, serverless-resources.png, is published at
the section path, so moving content/what-is/ to content/resources/ moves
its URL too. https://www.pulumi.com/what-is/serverless-resources.png is
live today and would 404 after merge: Hugo aliases are page-level and
don't cover asset paths, so the aliases entry on the section landing
doesn't help here.

This was the one /what-is/ URL the rebrand didn't preserve. The article
URLs are unaffected — they're pinned in frontmatter.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
@CamSoper
CamSoper force-pushed the claude/seo-content-url-restructure-zef591 branch from 7110eff to 9bfd557 Compare August 13, 2026 03:54

Copy link
Copy Markdown
Contributor Author

@claude #update-review

Rebase only — no findings to respond to; the prior review was at 0 outstanding / 0 low-confidence. Refreshing to clear review:stale after the force-push. New head 9bfd5570 (was 7110eff5).

Conflict: master added a blog-lightbox import to theme/src/ts/main.ts on the line directly above the section-filter import this branch renames, so the two collided in both the intermediate and final commits.

Resolution: kept master's new import and applied only the rename to the adjacent line. The theme diff against master is now exactly three lines, all rename:

-import "./what-is-list";
+import "./resources-list";
-[data-what-is-filter] .is-active,
+[data-resources-filter] .is-active,
-// blog-list.ts) and the /what-is/ section filter pill (moved by what-is-list.ts).
+// blog-list.ts) and the /resources/ section filter pill (moved by resources-list.ts).

blog-lightbox.ts is present and still imported.

Re-verified after the rebase: make build and make lint pass; all 64 pinned /what-is/<slug>/ URLs serve full pages with no meta-refresh; /resources/ is the landing; /what-is/ redirects to it; /learn still redirects to /tutorials/; the filter's data-resources-filter contract is wired through to the built bundle; and the serverless-resources.png redirect entry is intact.


Generated by Claude Code

@github-actions github-actions Bot added review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention review:in-progress Claude review is currently running and removed review:no-blockers Claude review completed cleanly; outstanding is empty review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention labels Aug 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🤖 Review updated on @CamSoper's request.

@github-actions github-actions Bot added review:no-blockers Claude review completed cleanly; outstanding is empty and removed review:in-progress Claude review is currently running labels Aug 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain:docs PR touches technical docs domain:infra PR touches workflows, scripts, infra, Makefile, or build config domain:mixed PR touches more than one domain domain:website PR touches marketing, pricing, legal, or competitive landing pages review:no-blockers Claude review completed cleanly; outstanding is empty

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants