feat(cli): add the marketing page-template set (landing, pricing, features, footer) - #5341
Draft
AKnassa wants to merge 3 commits into
Draft
feat(cli): add the marketing page-template set (landing, pricing, features, footer)#5341AKnassa wants to merge 3 commits into
AKnassa wants to merge 3 commits into
Conversation
A page template's search keywords are read back out of its own source, and each rendered component name scored as an exact keyword match — the same 90 an author's `category` earns. So every page rendering a <List> anywhere claimed "list" as loudly as the page that IS a list. On "customer list" 14 pages tied at 98, the tie fell through to the alphabetical tiebreak, and table-page came back 35th of 36. Breadth was unbounded too: theme-showcase renders 51 components — 4x the median page — so it matched more terms of almost any query than the page written for it, and took first place on "list of users". Keywords now come in two grades. Authored ones (a component's `keywords`, a block's `componentsUsed`, a page's `category`) keep scoring at face value. Ones derived by reading a page's source are length-normalized by how many were derived alongside them, so a focused page outranks a kitchen sink on the same component and a wide-surface page stops claiming concepts it only brushes against. Results now read `renders "List"` rather than `keyword "List"`, so a ranking can be explained. Addresses the retrieval-hygiene half of facebook#5300. The roster half — six proposed new page templates — is a curation call left to maintainers. Verified: `astryx search "customer list" --type template` returns the table pages instead of dashboard-portfolio. Full cli suite 2777 passed, with the same 9 pre-existing failures as the base commit; lint:strict, check:repo and all four cli typechecks green.
The official roster answers app-shell prompts well and marketing prompts not at all: "landing page", "pricing page", "feature grid" and "footer" had no page template to retrieve, so an agent hand-rolled them. Adds four pages. marketing-landing composes a hero, value pillars, a testimonial, a pricing teaser and a closing CTA. marketing-pricing has a billing-period toggle, three tiers, per-plan feature lists and a billing FAQ. marketing-feature-sections deliberately shows four different shapes (split media, icon grid, metric band, bento) rather than repeating one, because an identical card grid is called out as an anti-pattern in the Card guidance. marketing-footer collects a sitemap, newsletter and minimal footer. TemplateCategory gains a Marketing group: Landing, Pricing, Feature Sections, Footer, Testimonials and FAQ. The last two are reserved with no template behind them, which is what the taxonomy's own doc comment says reserved values are for. Also fixes a retrieval bug found while building these: search() indexed a template's directory but never its authored name, so a page authored "Searchable Table" could not be found by that phrase, and on "landing page" two templates tied on the keyword "Landing" and the alphabetical tiebreak answered with ai-chat-landing. The authored name now runs the same name ladder as the directory and the stronger of the two wins. Part of facebook#5300, covering item 1 of its proposed roster. Verified: "landing page" and "pricing page" both resolve to their new template on an exact-name match; "feature sections" and "footer" resolve to theirs. A 16-query ranking battery is unchanged in score and order, so the name signal costs nothing elsewhere. Ten new tests cover retrieval, the category taxonomy, doc metadata, component purity, hardcoded colors, and both directions of the docsite registry sync. Full cli suite 2787 passed with the same 9 pre-existing failures as the base; lint:strict, check:repo and all four cli typechecks green.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
github-actions
Bot
requested review from
cvkxx,
ernestt,
kentonquatman and
rubyycheung
August 22, 2026 17:34
Contributor
PR Analysis Report📚 Storybook PreviewView Storybook for this PR 🧪 Sandbox PreviewView Sandbox for this PR No new or modified components detected. Bundle Size SummaryNo component packages changed. Accessibility AuditStatus: No accessibility violations detected. Generated by PR Enrichment workflow | Storybook | Sandbox | View full report |
Found by rendering the templates rather than reading them. The Badge in a VStack stretched to the full column width instead of hugging its label, because a vertical stack stretches its children by default. Wrapped each in an HStack so it sizes to content. The footer sitemap put the brand block and four link columns in one five-track grid. At the shipped width that resolved to 169.2px per track against a 200px minimum, so "Legal" wrapped onto a row of its own. Tuning the minimum would have left it one padding change away from breaking again, so the brand block now sits above a four-track grid and the tracks have room to spare. The newsletter field carried a flex shorthand that stretched it into a tall box beside the Subscribe button. The field sizes itself now. Part of facebook#5300.
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.
What this does
Adds the four marketing page templates from item 1 of #5300: a landing page, a pricing page, a feature-sections page, and a footer collection.
Why
The roster answers app-shell prompts well and marketing prompts not at all. Before this,
astryx search "pricing page" --type templatereturned no pricing page, because none existed. "landing page", "feature grid" and "footer" were the same. An agent asked for any of them hand-rolled the layout instead of retrieving a graded template.What changed
marketing-landingmarketing-pricingmarketing-feature-sectionsmarketing-footermarketing-feature-sectionsdeliberately shows four different shapes rather than repeating one, because the Card guidance calls an identical icon-heading-text card grid an anti-pattern.marketing-footerusesSectionrather thanCardfor the same reason: a footer is a page region, not a discrete item.TemplateCategorygains a Marketing group: Landing, Pricing, Feature Sections, Footer, Testimonials, FAQ. The last two are reserved with no template behind them, which the taxonomy's doc comment states reserved values are for. This is a typed public surface in@astryxdesign/cli/authoring, so the group name is worth a maintainer's opinion.Retrieval fix included
search()indexed a template's directory but never its authored name. A page authoredSearchable Tablecould not be found by that phrase. On "landing page" two templates tied on the keywordLanding, so the alphabetical tiebreak answered withai-chat-landing. The authored name now runs the same name ladder as the directory and the stronger of the two wins.How to see it
landing pagemarketing-landing(exact name)pricing pagemarketing-pricing(exact name)feature sectionsmarketing-feature-sectionsfootermarketing-footerEach page is registered in the docsite lazy-import map, so all four render in the templates gallery.
Checks
Ten new tests cover retrieval for each prompt-class, the category taxonomy, doc metadata, component purity, hardcoded colors, and both directions of the docsite registry sync. The registry test asserts the real invariant: a page that is
isReadyand not hidden must have an entry. 32 of the 45 pages qualify and all 32 pass, with no entry pointing at a missing page.Against the audit rubric,
<img>is the only raw HTML element across the four pages, and there are no hardcoded colors.A 16-query ranking battery is unchanged in score and order, so the name signal costs nothing elsewhere.
pnpm -F @astryxdesign/cli testpasses 2787, with the same 9 failures present on the base commit (ENOENT scandir 'packages/core/src').pnpm lint:strictreports 0 errors,pnpm check:repois clean, and all four cli typechecks pass.Scope
Part of #5300, covering item 1 of its proposed roster. Items 2 through 6 (scheduling, form wizard, command palette, notification center, mobile shell) are not included. Item 2 in particular is on hold per the discussion on #4784.