Skip to content

fix(website): rework the landing grid, drop the intro video and the AI-first lede - #1467

Merged
vivek7405 merged 14 commits into
mainfrom
fix/website-drop-video-ai-first
Sep 8, 2026
Merged

fix(website): rework the landing grid, drop the intro video and the AI-first lede#1467
vivek7405 merged 14 commits into
mainfrom
fix/website-drop-video-ai-first

Conversation

@vivek7405

@vivek7405 vivek7405 commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

Closes #1466

Summary

A pass over the landing page, /why-webjs and /what-is-webjs, mostly reworking what the landing page's six-card grid argues.

The intro video is gone. The bytes stay in the R2 bucket webjs-videos, so bringing the section back later is an editorial decision rather than a re-upload. The six assertions describing the player are replaced by one counterfactual: the landing page must render no <video>, no <iframe>, and no reference to the video host, so an embed cannot land there again without failing a test.

"AI-first" comes out of the one-line definition on three pages. Each of those sentences is duplicated across the visible lede, a meta description, and an OG-image generator, so all three copies move together and the cards are regenerated. /why-webjs also gains "web components" in its category line, which is the one differentiator the shortest spelling of the sentence was dropping. The positioning is not retired: the /what-is-webjs FAQ entry that answers "What makes WebJs AI-first?", its capability card, the docs pages, /ui and llms.txt all keep it. What changes is that the definition of WebJs leads with what it is.

The six-card grid now opens with the four claims /why-webjs argues at length, in this order: model-agnosticism, architecture, design system, type safety, then the two it already had, auth and the unglamorous half. Model-agnosticism leads because it is the reason to try this framework at all and the rest of the grid is what you find once you have. File routing, typed server actions, streaming and elision gave up their slots; the architecture inset keeps the route tree and adds the .server boundary so the routing claim survives in a concrete form.

The comment over the grid records what the page no longer explains anywhere, ranked, so the next slot that frees up has an answer: elision first (the chips still assert "Display components ship 0 KB" and nothing explains it, and it is the one claim there no other framework can make), then streaming, then the client router.

Two sections are renamed to say what they argue. "The first paint is the whole page" becomes "Native web components the browser already understands, with better DX", which is what its live <like-button> stage actually shows; the lede is rewritten to pay the DX half in nouns a reader can check in that stage rather than as a comparison the page cannot make honestly, and progressive enhancement plus elision move from the lede into the chips, where the P.S. dare still invites the reader to verify the first. "Nothing is compiled away" becomes "What you write is what runs", naming the claim its own first sentence already made, in the same words /why-webjs uses for it.

The two prompt panels on /why-webjs are relabelled from "Where the decisions are still open" and "Where they are already made" to "Other frameworks" and "WebJs". The old labels made the reader hold the section's argument in their head to work out which panel was which.

Smaller: the design-system window shows three tokens with a colour swatch each instead of six names in two columns; the architecture inset's actions line reads → mutations; the "an agent has no reason to reach for any" line is cut from the type-safety claim on both pages that carry it.

Test plan

  • website node + browser suites green, 478 node tests and 88 browser tests
  • New website/test/ssr/landing-copy-ssr.test.ts fails if a video or embed returns, pins the hero wording, pins the DX claim being paid in checkable nouns, and pins the progressive-enhancement and elision chips (a copy pass dropping one would take the page's only statement of either claim with it)
  • why-webjs-ssr.test.ts category assertion updated, and its panel slice re-anchored: it sliced on the old column heading, where a missing boundary returns -1, silently widening the slice to the rest of the document and leaving every assertion on it passing vacuously. It now slices on the aria-labels and asserts each boundary exists first.
  • ( cd website && npx webjs check ) clean
  • npx webjs doctor clean, 2 pre-existing warnings unchanged by this PR
  • og.png, og-what.png, og-why.png regenerated and checked for overflow
  • Booted locally throughout, all three pages serve 200

Surfaces

  • Docs site, README, AGENTS.md, the skill, scaffold templates, MCP, editor plugins: N/A, website copy with no framework surface change.
  • Bun, e2e, smoke: N/A, no runtime-sensitive source touched.

The landing page no longer carries the intro video. The bytes stay in the
R2 bucket, so restoring the section later is an editorial call rather than
a re-upload.

"AI-first" comes out of the one-line definition on the landing page,
/why-webjs and /what-is-webjs. It leads with what WebJs is instead. The
sentence is duplicated across the visible lede, the meta description and
the OG-image generator on each page, so all three move together and the
cards are regenerated to match. The positioning is not retired: the
/what-is-webjs FAQ entry and capability card that explain it stay.

/why-webjs also gains "web components" in its category line, which is the
one differentiator the shortest version of the sentence was dropping.
Two of the six cards in "The browser is the framework" were the two things
a reader already assumes a full-stack framework has. File routing and typed
server actions are table stakes, so neither card was doing work in a grid
whose job is to answer "is this complete, and what does it give me that the
browser does not".

The write path with scripting off, and a mutation that rolls itself back,
are the two that are genuinely ours, so they take those slots. The
progressive-enhancement card is deliberately aimed at forms rather than at
the first paint, which "The first paint is the whole page" already owns
above it, and the comment above the grid now records that.
@vivek7405 vivek7405 self-assigned this Sep 8, 2026
The two slots freed up on "The browser is the framework" now carry the
architecture and design-system claims that /why-webjs argues at length.
This grid exists to answer "is this complete", and what a reader gets
without having to ask for it is the strongest answer to that.

The architecture inset also puts the route tree back on the page, which
the routing card had been carrying, and adds the .server boundary to it.
Type safety end to end is what a reader evaluating a full-stack framework
weighs, and it is the third claim /why-webjs makes that this grid was not
carrying. Elision gives up the slot for it.

The claim itself is not gone from the page: the chips under "The first
paint is the whole page" still say display components ship 0 KB. What is
gone is the only place the page explained it, which the comment over the
grid now records so it can be brought back if a slot frees up.
"Where the decisions are still open" and "Where they are already made"
made the reader hold the section's argument in their head to work out
which panel was which. "Other frameworks" and "WebJs" say it outright,
and the prose above the panels still makes the open-decision point.

The SSR test sliced the left panel at the old heading text. A renamed
boundary returns -1 there, which quietly widens the slice to the rest of
the document and leaves every assertion on it passing vacuously, so it
now slices on the aria-labels and asserts each boundary exists first.
The sentence before it already says types run the whole way through with
no code generation in between, so naming the escape hatch an agent then
does not need was arguing a point the reader had already been given.

Cut on both surfaces that carry the claim, the landing grid and the
/why-webjs card, so the two keep saying the same thing.
Streaming gives up the slot. A display-only component that ships zero
bytes is the one claim on this grid no other framework can make, and the
chips above it assert that without ever explaining it, so the card is the
only explanation the page has.

The two comments over the grid enumerated a card set that four commits of
swapping had left behind, so both are corrected to the current six, and
the note now records what the trade cost: streaming is down to a word in
the scaffold inventory and the client router is claimed nowhere on this
page at all.
Six token names in two columns read as a list of strings, which is the
opposite of the point the window is making. Three tokens with a swatch
each reads as a palette: a ground, an ink, and an accent.

The swatches are decorative, so they carry aria-hidden and the token
names stay the accessible content.
/why-webjs spends a whole page on it and the landing page never stated it,
which left the strongest reason to try this framework off the page a
reader actually lands on.

The card is written as a claim about location rather than volume: the
source is in the working directory the agent is already in, at the
version installed, so a model reads the router it is calling instead of
recalling an API. Elision gives up the slot, and the comment over the
grid records that it, streaming, and the client router are now the three
claims the page no longer explains.
It is the reason to try this framework at all, and the other five cards
are what a reader finds once they have. Reading it fourth put the answer
after the questions it exists to make worth asking.

Pure move, no copy change. The comment over the grid records why it leads
so a later reorder does not undo the reason.
The middle line was the only one of the three not following the path to
what it produces, and "the writes" was doing that job in prose while the
lines above and below it used an arrow. It now reads as mutations, which
is the word the docs use.
The section's stage is a real custom element with its own source beside
it, and the heading over it was arguing the first paint instead. It now
names what the demo shows, and the lede pays the DX half in nouns a
reader can check in that stage rather than as a comparison the page
cannot make honestly.

Progressive enhancement and elision stay. Both are consequences of the
component model rather than a separate topic, so they move from the lede
into the chips, where the P.S. dare below still invites the reader to
verify the first one. Two assertions pin them, because a chip going
missing in a later copy pass would take the only statement of either
claim off the page with it.
"Nothing is compiled away" described the absence. The section's own first
sentence already made the positive claim, that the file in your editor
and the file in the network tab are the same file, so the heading now
says that and matches the wording /why-webjs uses for the same reason.

The lede is unchanged and did not need to be. The new heading is the
stronger sentence though, so the comment above it records the two
carve-outs the lede is already quietly handling: a server action never
reaches the browser at all, and an elided component is never served. A
later edit widening this to "every file you write is served" would be
refuted by both.
@vivek7405 vivek7405 changed the title fix(website): drop the intro video and the AI-first lede fix(website): rework the landing grid, drop the intro video and the AI-first lede Sep 8, 2026
@vivek7405
vivek7405 marked this pull request as ready for review September 8, 2026 04:22
"Templates are lit's" reads as a dependency to anyone who does not
already know the API is a parity target, and tells the ones who do
nothing they need. "Markup is a tagged template literal" says what the
reader will see in the stage directly below it.

The familiarity comment further down still records the lit relationship,
which is where that belongs.
@vivek7405
vivek7405 merged commit f81070d into main Sep 8, 2026
10 checks passed
@vivek7405
vivek7405 deleted the fix/website-drop-video-ai-first branch September 8, 2026 05:04
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.

fix(website): drop the intro video and the AI-first lede on three pages

1 participant