Skip to content

feat: landing pages + URL redirects + CMS root-level routing - #977

Merged
treoden merged 1 commit into
devfrom
release213
Jul 4, 2026
Merged

feat: landing pages + URL redirects + CMS root-level routing#977
treoden merged 1 commit into
devfrom
release213

Conversation

@treoden

@treoden treoden commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator

Three interlocking bodies of work.

URL-redirect subsystem

  • New url_redirect table (base) with write-time chain collapse; a notFound-gated middleware 302s an old path to the new one.
  • Inline capture in the product/category update services: url_key renames, category reassignment/unassignment (incl. whole variant groups), and category rename AND reparent.
  • Unified, unit-tested path algebra (pathRemap: buildEntityPath / remapPath / planSubtreeRedirects); boundary-anchored subscriber cascade (fixes the /shoe-sale sweep and /cat/cat-toy mangle); set-based recordRedirectsBatch.
  • Delete-cascade cleanup: purge a category subtree's aliases and capture the nested->root move of every product it uncategorises.

CMS root-level routing

  • CMS pages are served at root-level /<url_key> via url_rewrite; the page-builder for CMS pages reverts to route-level.

Landing pages (promotion module)

  • New first-class entity: root-level URL, page-builder-only body via entity_urn, admin grid + CRUD + duplicate, status + publish schedule; wins URL collisions.
  • Page-builder entity-scope registry; draft/scheduled pages preview in the editor via a valid changeset token (possession-based trust).

SEO / UI

  • LinkPicker "Landing page" tab + a promotion:landing_page link loader.
  • Live SearchSnippetPreview (SERP snippet) on the landing-page and CMS-page SEO forms; dropped meta_keywords from landing pages; two-column landing edit layout with status + schedule in the sidebar.

Verified: tsc 0 errors; jest 82 suites / 790 tests green.

PR Checklist

Please check if your PR fulfills the following requirements:

  • Tests for the changes have been added (for bug fixes / features)

PR Type

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Other... Please describe:

What is the current behavior?

Issue Number: N/A

What is the new behavior?

Does this PR introduce a breaking change?

  • Yes
  • No

Other information

Three interlocking bodies of work.

URL-redirect subsystem
- New url_redirect table (base) with write-time chain collapse; a
  notFound-gated middleware 302s an old path to the new one.
- Inline capture in the product/category update services: url_key renames,
  category reassignment/unassignment (incl. whole variant groups), and
  category rename AND reparent.
- Unified, unit-tested path algebra (pathRemap: buildEntityPath / remapPath /
  planSubtreeRedirects); boundary-anchored subscriber cascade (fixes the
  /shoe-sale sweep and /cat/cat-toy mangle); set-based recordRedirectsBatch.
- Delete-cascade cleanup: purge a category subtree's aliases and capture the
  nested->root move of every product it uncategorises.

CMS root-level routing
- CMS pages are served at root-level /<url_key> via url_rewrite; the
  page-builder for CMS pages reverts to route-level.

Landing pages (promotion module)
- New first-class entity: root-level URL, page-builder-only body via
  entity_urn, admin grid + CRUD + duplicate, status + publish schedule;
  wins URL collisions.
- Page-builder entity-scope registry; draft/scheduled pages preview in the
  editor via a valid changeset token (possession-based trust).

SEO / UI
- LinkPicker "Landing page" tab + a promotion:landing_page link loader.
- Live SearchSnippetPreview (SERP snippet) on the landing-page and CMS-page
  SEO forms; dropped meta_keywords from landing pages; two-column landing
  edit layout with status + schedule in the sidebar.

Verified: tsc 0 errors; jest 82 suites / 790 tests green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@treoden
treoden merged commit d951ca3 into dev Jul 4, 2026
2 checks 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