Make the Codewhale public site documentation-led#4362
Conversation
Replace the oversized marketing sequence with a compact documentation portal, repository-derived quickstart facts, and direct topic navigation. Keep the underwater identity restrained, align typography and controls with CWC, and give the international contributor community clear issue and pull-request paths. Verified with facts/docs checks, 23 web tests, lint, a 39-page production build, and responsive browser QA. Signed-off-by: Hunter B <hmbown@gmail.com>
|
Claude finished @Hmbown's task in 5m 59s —— View job Claude's review progress
SummaryThis PR replaces the public site's marketing homepage with a documentation-led portal, and re-themes nav/footer/whale mark/palette/typography to an "underwater" visual system. It's scoped to The new Four smaller findings, posted inline, none blocking:
Given the sandbox here has no network access, I did not independently re-run the build/tests/lint the PR description claims passed (facts check, docs check, 23 web tests, lint, prod build, browser QA) — those results are as reported in the PR body. |
| export const SITE_URL = "https://codewhale.net"; | ||
|
|
||
| export const SITE_NAME = "CodeWhale"; | ||
| export const SITE_NAME = "Codewhale"; |
There was a problem hiding this comment.
Brand-name inconsistency introduced by this PR. SITE_NAME (and the nav/footer wordmark, and this file's IDENTITY_PHRASE) is now "Codewhale" (lowercase w), but the ~11 other page files this PR doesn't touch — install/page.tsx:14, plus docs/page.tsx, faq/page.tsx, models/page.tsx, roadmap/page.tsx, runtime/page.tsx, community/page.tsx, constitution/page.tsx, contribute/page.tsx, digest/page.tsx, feed/page.tsx — still hardcode <title>/description strings as "CodeWhale". Result: the browser tab title and OG siteName disagree across pages on how the product is spelled. Worth a follow-up pass to make the rename consistent (GitHub repo URLs github.com/Hmbown/CodeWhale should stay as-is since that's the actual repo name).
| function topicHref(topic: DocTopic, locale: string): string { | ||
| if (topic.id === "install") return `/${locale}/install`; | ||
| if (topic.id === "providers") return `/${locale}/models`; | ||
| if (topic.hasPage) return `/${locale}/docs/${topic.slug}`; | ||
|
|
||
| const FALLBACK_DISPATCH_EN: CuratedDispatch = { | ||
| generatedAt: new Date().toISOString(), | ||
| headline: "Quiet release week — install paths and contributor guides up to date.", | ||
| summary: | ||
| "This dispatch is regenerated by DeepSeek V4-Flash on a six-hour cron. Until the cron fills in fresh repo activity, the static links below are the best starting points.", | ||
| highlights: [ | ||
| { title: "Install", href: "/en/install", tag: "shipped", blurb: "npm, Cargo, Homebrew, or a direct download." }, | ||
| { title: "Open issues", href: "https://github.com/Hmbown/CodeWhale/issues", tag: "opened", blurb: "Start with anything labelled good first issue." }, | ||
| { title: "Roadmap", href: "/en/roadmap", tag: "discussion", blurb: "What is confirmed, what is being weighed, what is ruled out." }, | ||
| ], | ||
| movers: [], | ||
| }; | ||
| const source = Array.isArray(topic.repoSource) ? topic.repoSource[0] : topic.repoSource; | ||
| return `${REPO_DOCS_BASE}/${source}`; | ||
| } | ||
|
|
||
| const FALLBACK_DISPATCH_ZH: CuratedDispatch = { | ||
| generatedAt: new Date().toISOString(), | ||
| headline: "本周发布平稳——安装路径和贡献指南已同步。", | ||
| summary: | ||
| "本「今日要闻」由 DeepSeek V4-Flash 每六小时重新生成。在 cron 写入真实仓库动态之前,下面的固定链接是最实用的入口。", | ||
| highlights: [ | ||
| { title: "安装", href: "/zh/install", tag: "shipped", blurb: "npm、Cargo、Homebrew,或直接下载。" }, | ||
| { title: "开放议题", href: "https://github.com/Hmbown/CodeWhale/issues", tag: "opened", blurb: "从 good first issue 标签开始。" }, | ||
| { title: "路线图", href: "/zh/roadmap", tag: "discussion", blurb: "已确认、审议中、以及已排除的功能。" }, | ||
| ], | ||
| movers: [], | ||
| }; | ||
| function TopicList({ items, locale }: { items: DocTopic[]; locale: string }) { | ||
| const isZh = locale === "zh"; | ||
|
|
||
| return ( | ||
| <div className="portal-topic-list"> | ||
| {items.map((topic) => { | ||
| const external = !topic.hasPage && topic.id !== "install" && topic.id !== "providers"; |
There was a problem hiding this comment.
topicHref() (line 18) and this external check both hardcode topic.id === "install" / topic.id === "providers" independently. If a third special-cased route is ever added to topicHref, it's easy to forget updating this external predicate too — the link would then get the wrong target/rel (e.g. an internal-page link opening in a new tab, or an external repo link failing to). Low risk today since the two lists are still in sync, but worth collapsing into one source of truth, e.g. have topicHref return { href, external }.
| .site-install-link { | ||
| display: inline-flex; | ||
| min-height: 2.25rem; | ||
| align-items: center; | ||
| padding: 0.35rem 0.75rem; | ||
| border: 1px solid var(--hairline); | ||
| border-radius: 6px; | ||
| font-family: var(--font-body), "IBM Plex Sans", system-ui, sans-serif; | ||
| font-size: 0.72rem; | ||
| font-weight: 600; | ||
| } | ||
|
|
||
| .site-github-link:hover { border-color: var(--ink); } | ||
| .site-install-link { border-color: rgba(20, 35, 70, 0.17); background: linear-gradient(180deg, var(--indigo), var(--indigo-deep)); color: #fff; } | ||
| .site-install-link:hover { border-color: var(--indigo-deep); background: var(--indigo-deep); } |
There was a problem hiding this comment.
.site-install-link (here, and the display: none override at line 500) appears to be dead CSS. The desktop nav no longer renders an "Install →" button after this refactor (nav.tsx now only renders site-github-link plus the MobileMenu, and MobileMenu's install link uses a Tailwind utility class, not this one). Grepped the whole web/ tree — no component references className="site-install-link". Safe to delete unless it's intentionally kept for a near-term follow-up.
| <div | ||
| id="mobile-menu" | ||
| className="md:hidden fixed inset-x-0 top-[5.7rem] bottom-0 z-40 bg-paper hairline-t overflow-y-auto" | ||
| className="md:hidden fixed inset-x-0 top-[4.25rem] bottom-0 z-40 bg-paper hairline-t overflow-y-auto" |
There was a problem hiding this comment.
Not this line specifically, but nearby in this same file: the mobile menu list divider at line 64 still hardcodes the pre-rebrand ink color rgba(14,14,16,0.18) (#0E0E10), left over from before this PR's palette migration to the new ocean palette (--ink is now #1B2230 / rgb(27,34,48)). The same stale value also appears in web/app/globals.css:74-75 (the desktop column-rule background). Small visual inconsistency in an otherwise thorough palette pass — worth updating both to the new ink value.
Signed-off-by: Hunter B <hmbown@gmail.com>
|
Claude finished @Hmbown's task in 1m 47s —— View job Claude's review progress
SummaryThis sync only added a merge commit ( Re-checked the diff end-to-end against the review priorities (correctness, provider/route safety, reuse, tests, security):
The four findings from the previous pass are still open (unchanged by this sync) and remain non-blocking:
No new inline comments needed since the diff content is unchanged. Sandbox here has no network access, so I did not independently run |
Regenerate the tracked repository facts after the release runtime expanded the built-in tool catalog from 80 to 85 tools. Signed-off-by: Hunter B <hmbown@gmail.com>
|
Claude finished @Hmbown's task in 30s —— View job Claude's review progress
SummaryThis sync added one commit since the last review pass: The Re-checked against the review priorities:
The four findings from the previous passes are still open and remain non-blocking:
Sandbox here has no network access, so I did not independently run |
feat(web): add keyword search to docs hub and FAQ pages Resolved a generatedAt-timestamp conflict in web/lib/facts.generated.ts against the post-#4362 main; both sides already agreed on toolCount 85.
Follow-ups to the Hmbown#4362 documentation-led redesign, addressing the four non-blocking findings from its review: - Align user-visible brand strings across all web pages to the "Codewhale" wordmark the redesign introduced (repo URLs and the Hmbown/CodeWhale slug are untouched). - Deduplicate the homepage topic special-cases: topicHref() and TopicList now share one TOPIC_PAGE_OVERRIDES map instead of two hardcoded id lists that could drift. - Replace the stale pre-rebrand ink rgba(14,14,16,...) with the palette ink rgb(27,34,48) in globals.css and the mobile menu divider. - Remove the dead .site-install-link CSS now that the desktop nav no longer renders an Install button. Verified with eslint, 42 web tests, check-docs, and a full Next.js production build (39 pages). Prepared with agent assistance.
Summary
Verification
Scope
This PR changes only the public site. It does not deploy the site, change DNS, or modify the CWC app/control-plane repositories.