Skip to content

Commit eab3926

Browse files
authored
feat(landing-page): agent design pages β€” all 21 supported agents (#4050)
* feat(landing-page): add the Gemini CLI agent design page Add a rich long-form /agents/gemini-design/ page for Google's Gemini CLI, mirroring the existing agent detail pages: hand-structured how-to content (what it is, the multimodal + 1M-context design angle, setup, screenshot-to-UI, GEMINI.md / MCP, a comparison table, pitfalls, and with Open Design), an FAQ with JSON-LD, and a hero illustration with the Gemini mark fused into the artwork. Wire it into the /agents/ hub via DETAIL_ROUTES and the Agent nav dropdown. Localize across every landing locale: en is hand-written, zh hand-reviewed, and the other 16 are machine-translated and merged into the split agent-guides part files (kept under the 1 MiB changed-file blob guard). * fix(landing-page): render the zh-tw agent guides in Traditional Chinese The hand-authored INFO_PAGE_COPY['zh-tw'] entry spreads the zh (Simplified) copy and overrides specific sections, but it never overrode `agentGuides` β€” so every agent detail page rendered Simplified Chinese under /zh-tw/ instead of Traditional (the part-file localization is only consumed by the locales that go through compactInfoPageCopy, which zh-tw does not). Add a Traditional Chinese `agentGuides` override to the zh-tw entry (all five agents, converted with Taiwan terminology) and drop zh-tw from the generated part files since it never used them. This also fixes the four existing agents (claude-code, codex, cursor, opencode) that were already shipping Simplified text on their zh-tw pages. * feat(landing-page): add five more agent design pages (Copilot, Qwen, Grok, Kimi, DeepSeek) Extend the agent detail family with five well-documented agents, each built from the same rich long-form template as the existing pages: - GitHub Copilot CLI, Qwen Code, Grok CLI, Kimi CLI, DeepSeek TUI - /agents/<slug>-design/ with hand-structured how-to content (what it is, the design angle, setup, screenshot-to-UI, extend, comparison, pitfalls, with Open Design), an FAQ with JSON-LD, and a warm editorial hero illustration with each agent's real mark fused into the artwork - wired into the /agents/ hub (DETAIL_ROUTES) and the Agent nav dropdown Every fact, command, model name, and resource URL was verified against official sources; nothing fabricated. Localized across all landing locales: en hand-checked, zh translated, the other 15 machine-translated and merged into the split agent-guides part files (now 8 parts to stay under the 1 MiB blob guard), and a Traditional Chinese override added for each agent under the zh-tw entry. * feat(landing-page): complete the agent design pages β€” all 21 supported agents Add the remaining eleven agent detail pages so /agents/ covers every coding agent Open Design's runtime supports (the hub was previously missing four): - Trae CLI, Aider, Antigravity, DeepSeek Reasonix (added to the hub + pages) - Hermes, Devin for Terminal, Pi, Kiro CLI, Kilo, Mistral Vibe CLI, Qoder CLI Each is built from the same rich long-form template (what it is, the design angle, setup, reference-to-UI, extend, comparison, pitfalls, with Open Design), an FAQ with JSON-LD, and a warm editorial hero β€” the agent's real mark where one exists, a clean wordmark where it does not. Every fact, command, model name, and resource URL was verified against the agent's own runtime def and official sources; sparse agents are described accurately-but-generally rather than with invented specifics. Also fixes the hub's incorrect vendor for Pi. Wired into the /agents/ hub (now 21 agents) and the Agent nav dropdown. Localized across all landing locales: en hand-checked, zh translated, the other 15 machine-translated and merged into the split agent-guides part files (now 15 parts to stay under the 1 MiB blob guard), with a Traditional Chinese override added for each agent under the zh-tw entry. * refactor(landing-page): hoist en/zh agent guides out of info-page-i18n.ts With all 21 agents inlined, info-page-i18n.ts grew to ~1.5 MiB and tripped the changed-file blob guard (1 MiB). Move the English and Simplified-Chinese agentGuides maps into agent-guides.en.i18n.ts / agent-guides.zh.i18n.ts and import them back, mirroring how the other locales' guides already live in split part files. No behavior change β€” same data, just hoisted. All changed files are now under the blob guard. * fix(landing-page): derive agent-hub count and credential labels from the data Address review feedback on the agent hub metadata: - The browser title / meta description hard-coded "17 BYOK adapters" while the hub now renders 21 cards. Switch the en/zh/zh-tw strings to a {count} placeholder and substitute allAgents.length in the page, so the metadata can no longer drift from the rendered list (also fixes a pre-existing unsubstituted {count} in the ja title). - Localized hubs showed "BYOK Β· <vendor>" fallbacks for the four newly added agents and a stale interactive-login string for Pi. Fall back to each agent's localized guide credential before the BYOKΒ·vendor placeholder, and drop the stale Pi entries from the per-locale map so every agent shows a real localized credential. * fix(landing-page): align hub agent names with the nav and detail pages The hub cards used 'Qwen' / 'Grok' / 'Cursor Agent' while the nav dropdown and detail-page breadcrumbs use 'Qwen Code' / 'Grok CLI' / 'Cursor', so the same routes shipped two public names (and the shorter ones leaked into the hub JSON-LD). Update the hub tiers to the detail-page names so hub, nav, and JSON-LD all agree. * fix(landing-page): localize detail-page breadcrumb and correct Qoder hub metadata Two more review fixes: - The agent detail pages hard-coded the second breadcrumb crumb as "Agents" in both the visible nav and the BreadcrumbList JSON-LD, so localized routes (/zh/, /ja/, /uk/, …) shipped an English crumb and English structured data. Source it from the locale-aware `copy.agents.breadcrumb` in all 21 detail pages so the navigation and schema localize with the rest of the page. - The Qoder hub row said `vendor: 'community'` / `Provider keys via Qoder config (BYOK)`, contradicting the Qoder guide and runtime def (an Alibaba product that signs in with a Qoder account / `qodercli login`). Align it to `vendor: 'Alibaba'` and a Qoder-account credential so the hub onboarding path matches the guide and runtime. * fix(landing-page): finish localizing qoder hub credential and CTA landmark Follow-up to the two remaining localization gaps: - The per-locale credential map still had stale "provider keys via Qoder config (BYOK)" overrides for zh / zh-tw / uk, so localized hub cards contradicted the corrected Alibaba/account metadata. Drop them so qoder falls through to the localized guide credential (Qoder account) in every locale. - The CTA section's aria-label was hard-coded "Open Design call to action" in every detail page, leaving an English-only landmark name on localized routes. Source it from the localized CTA title (rich.ctaTitle / page.ctaTitle) so the landmark name translates with the rest of the page. * fix(landing-page): align the Cursor agent name with the runtime adapter Reviewer noted the hub still drifted from the runtime registry it documents: the card/dropdown shipped 'Cursor' while `runtimes/defs/cursor-agent.ts` names the adapter 'Cursor Agent'. Rename the Cursor hub card, nav dropdown entry, and detail-page breadcrumb (all locales) to 'Cursor Agent' so the landing page advertises the same name users select in the app, and reword the registry comment to describe the display-name contract instead of overstating a literal 1:1 mirror. * fix(landing-page): correct agent nav active state and align Grok name Two more review-flagged consistency fixes: - Every /agents/*-design/ detail page and the /agents/ hub passed active="home" to Layout, which highlights the Product menu instead of the Agent dropdown. Switch them to active="agent" so the top-nav active state matches the route. - The hub/dropdown/guide called the grok adapter "Grok CLI" while the runtime def is name: 'Grok Build'. Rename it to "Grok Build" across the landing surface (hub, dropdown, breadcrumb, and guide copy in every locale) so the advertised name matches the runtime picker users select in the app. --------- Co-authored-by: Joey <276262049+xne998808-ai@users.noreply.github.com>
1 parent 8c3500c commit eab3926

110 files changed

Lines changed: 8926 additions & 2454 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

β€Žapps/landing-page/app/_components/header.tsxβ€Ž

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,9 +327,26 @@ export function Header({
327327
</li>
328328
{[
329329
{ route: 'codex-design', name: 'Codex' },
330-
{ route: 'cursor-design', name: 'Cursor' },
330+
{ route: 'cursor-design', name: 'Cursor Agent' },
331331
{ route: 'claude-code-design', name: 'Claude Code' },
332332
{ route: 'opencode-design', name: 'OpenCode' },
333+
{ route: 'gemini-design', name: 'Gemini CLI' },
334+
{ route: 'copilot-design', name: 'GitHub Copilot CLI' },
335+
{ route: 'qwen-design', name: 'Qwen Code' },
336+
{ route: 'grok-design', name: 'Grok Build' },
337+
{ route: 'kimi-design', name: 'Kimi CLI' },
338+
{ route: 'deepseek-design', name: 'DeepSeek TUI' },
339+
{ route: 'trae-cli-design', name: 'Trae CLI' },
340+
{ route: 'aider-design', name: 'Aider' },
341+
{ route: 'antigravity-design', name: 'Antigravity' },
342+
{ route: 'reasonix-design', name: 'DeepSeek Reasonix' },
343+
{ route: 'hermes-design', name: 'Hermes' },
344+
{ route: 'devin-design', name: 'Devin for Terminal' },
345+
{ route: 'pi-design', name: 'Pi' },
346+
{ route: 'kiro-design', name: 'Kiro CLI' },
347+
{ route: 'kilo-design', name: 'Kilo' },
348+
{ route: 'vibe-design', name: 'Mistral Vibe CLI' },
349+
{ route: 'qoder-design', name: 'Qoder CLI' },
333350
].map((agentItem) => (
334351
<li role='none' key={agentItem.route}>
335352
<a role='menuitem' href={href(`/agents/${agentItem.route}/`)}>

β€Žapps/landing-page/app/agent-guides.en.i18n.tsβ€Ž

Lines changed: 27 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
11
/*
22
* Localized agent-guide copy for the landing-page agent detail pages.
33
*
4-
* en + zh live directly in info-page-i18n.ts. Every other landing locale
5-
* gets its agent pages from the part files here (split to stay under the
6-
* repo changed-file blob guard). buildLocalizedAgentGuides() spreads the
7-
* English guide first then overrides with the translation; it is wired into
8-
* compactInfoPageCopy so a compact locale renders fully localized agent
9-
* pages instead of falling back to English. Machine-translated; native
10-
* review welcome.
4+
* en + zh live directly in info-page-i18n.ts. Every other landing locale gets
5+
* its agent pages from the part files here (split for the changed-file blob
6+
* guard). Wired into compactInfoPageCopy via buildLocalizedAgentGuides.
7+
* Machine-translated; native review welcome.
118
*/
129
import type { InfoPageCopy } from './info-page-i18n';
1310
import type { LandingLocaleCode } from './i18n';
1411
import { localizedAgentGuidesPartA } from './agent-guides.part-a.i18n';
1512
import { localizedAgentGuidesPartB } from './agent-guides.part-b.i18n';
1613
import { localizedAgentGuidesPartC } from './agent-guides.part-c.i18n';
1714
import { localizedAgentGuidesPartD } from './agent-guides.part-d.i18n';
15+
import { localizedAgentGuidesPartE } from './agent-guides.part-e.i18n';
16+
import { localizedAgentGuidesPartF } from './agent-guides.part-f.i18n';
17+
import { localizedAgentGuidesPartG } from './agent-guides.part-g.i18n';
18+
import { localizedAgentGuidesPartH } from './agent-guides.part-h.i18n';
19+
import { localizedAgentGuidesPartI } from './agent-guides.part-i.i18n';
20+
import { localizedAgentGuidesPartJ } from './agent-guides.part-j.i18n';
21+
import { localizedAgentGuidesPartK } from './agent-guides.part-k.i18n';
22+
import { localizedAgentGuidesPartL } from './agent-guides.part-l.i18n';
23+
import { localizedAgentGuidesPartM } from './agent-guides.part-m.i18n';
24+
import { localizedAgentGuidesPartN } from './agent-guides.part-n.i18n';
25+
import { localizedAgentGuidesPartO } from './agent-guides.part-o.i18n';
1826

1927
type Guides = NonNullable<InfoPageCopy['agentGuides']>;
2028

@@ -24,5 +32,16 @@ export function buildLocalizedAgentGuides(en: Guides): Partial<Record<LandingLoc
2432
...localizedAgentGuidesPartB(en),
2533
...localizedAgentGuidesPartC(en),
2634
...localizedAgentGuidesPartD(en),
35+
...localizedAgentGuidesPartE(en),
36+
...localizedAgentGuidesPartF(en),
37+
...localizedAgentGuidesPartG(en),
38+
...localizedAgentGuidesPartH(en),
39+
...localizedAgentGuidesPartI(en),
40+
...localizedAgentGuidesPartJ(en),
41+
...localizedAgentGuidesPartK(en),
42+
...localizedAgentGuidesPartL(en),
43+
...localizedAgentGuidesPartM(en),
44+
...localizedAgentGuidesPartN(en),
45+
...localizedAgentGuidesPartO(en),
2746
};
2847
}

β€Žapps/landing-page/app/agent-guides.part-a.i18n.tsβ€Ž

Lines changed: 173 additions & 130 deletions
Large diffs are not rendered by default.

β€Žapps/landing-page/app/agent-guides.part-b.i18n.tsβ€Ž

Lines changed: 199 additions & 156 deletions
Large diffs are not rendered by default.

β€Žapps/landing-page/app/agent-guides.part-c.i18n.tsβ€Ž

Lines changed: 195 additions & 152 deletions
Large diffs are not rendered by default.

β€Žapps/landing-page/app/agent-guides.part-d.i18n.tsβ€Ž

Lines changed: 195 additions & 152 deletions
Large diffs are not rendered by default.

β€Žapps/landing-page/app/agent-guides.part-e.i18n.tsβ€Ž

Lines changed: 229 additions & 0 deletions
Large diffs are not rendered by default.

β€Žapps/landing-page/app/agent-guides.part-f.i18n.tsβ€Ž

Lines changed: 229 additions & 0 deletions
Large diffs are not rendered by default.

β€Žapps/landing-page/app/agent-guides.part-g.i18n.tsβ€Ž

Lines changed: 229 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
Β (0)