(v1) Terminal-forward homepage redesign with nautical motif - #1161
(v1) Terminal-forward homepage redesign with nautical motif#1161yamcodes wants to merge 9 commits into
Conversation
🦋 Changeset detectedLatest commit: e849011 The changes in this PR will be included in the next version bump. This PR includes no changesetsWhen changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Caution
This PR drops homepage <title> and <meta description> metadata and removes the theme toggle from all docs pages.
Reviewed changes — complete homepage redesign with terminal-forward CLI aesthetic, nautical/marine OKLCH design tokens, and a three-tab interactive workbench simulator.
- New
design.mddesign system — locked OKLCH palette, typography, spacing, motion, and microinteraction rules for the app. - Homepage rewrite — terminal header with
--docs/--githubnav flags, sonar/radar background animation, CTA copy-command chip, interactive workbench simulator with init/schema/validation tabs, and a dense monospace footer colophon. - Design token migration —
dark.cssandlight.cssmigrated to OKLCH colors with marine-cyan accent;AnnouncementBadgeandLogocomponents switched from hardcoded blue toprimaryCSS variables. - Theme toggle relocation — removed from global header in both
(home)/layout.tsxanddocs/layout.tsx, moved to homepage footer.
🚨 Homepage loses <title> and <meta description> metadata
The page was converted from a server component (which exported metadata: Metadata) to a client component ("use client"), removing the title ("ArkEnv") and description ("Environment variable validation from editor to runtime"). The root layout.tsx does not define a title or description override, so the homepage will have no meaningful <title> or <meta description> tags.
Technical details
# Homepage loses `<title>` and `<meta description>` metadata
## Affected sites
- `apps/www/app/(home)/page.tsx` line 81 — `"use client"` directive prevents `metadata` export
- `apps/www/app/(home)/page.tsx` lines 74–76 — removed `export const metadata: Metadata = { title: "ArkEnv", description: "..." }`
## Required outcome
- The homepage must render with a `<title>` and `<meta name="description">` tag.
- Either restore the page as a server component with `metadata` export, or use `generateMetadata` in a separate `layout.tsx` or co-located file.
## Suggested approach
- Move the client-interactive components (workbench simulator, copy button, etc.) into a child client component, keeping the page as a server component with `metadata` export intact.
- Alternatively, add a `title` and `description` to the root `layout.tsx` metadata object as a fallback.⚠️ Docs pages have no way to toggle themes
The ThemeToggle was removed from both the desktop header (actions array) and mobile menu (menuActions array) in apps/www/app/docs/layout.tsx. Unlike the homepage (which relocated the toggle to its footer), the docs layout has no fallback toggle, leaving docs pages without any theme-switching UI.
Technical details
# Docs pages have no way to toggle themes
## Affected sites
- `apps/www/app/docs/layout.tsx` lines 557–581 — `ThemeToggle` removed from `actions` (desktop header) and `menuActions` (mobile menu)
## Required outcome
- Docs pages must have a visible theme toggle, either in the header or sidebar.
- If the intent is to keep the global header toggle-free, add `ThemeToggle` to the docs sidebar or a similar persistent UI element.
## Suggested approach
- Restore `ThemeToggle` to the `actions` array in the docs layout header, or
- Add it as a sidebar footer element via Fumadocs' `sidebarFooter` configuration.ℹ️ Nitpicks
useCopyCommandinapps/www/hooks/use-copy-command.tsshows a toast on copy, butdesign.mdspecifies "silent success" for clipboard operations — the hook could be updated to match the design system's microinteraction stance.StarUsButton,QuickstartButton,CLICommand,HeroGradientOverlay, andHeroVisualare no longer imported anywhere in the app; their source files and tests can be cleaned up in a follow-up.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — the second commit addresses both critical issues flagged in the prior review: restoring homepage metadata and re-adding a theme toggle to docs pages. Client code is cleanly extracted into a new file.
- Extracted
HomePageClientcomponent — moved the full workbench-simulator homepage intoapps/www/app/(home)/home-page-client.tsx, keepingpage.tsxas a server component that re-exportsmetadata: Metadata. - Restored
ThemeToggleto docs sidebar — added as a sidebarfooterelement inapps/www/app/docs/layout.tsx, with Fumadocs' built-inthemeSwitchdisabled to avoid a duplicate toggle. - Cleaned up unused import — removed the dangling
ThemeToggleimport fromapps/www/app/(home)/layout.tsx.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
Co-authored-by: Cursor <cursoragent@cursor.com>
c5f9f86 to
83f4b90
Compare
Update homepage selectors for the new docs/GitHub CTAs and darken light primary (plus status colors) so WCAG AA contrast checks pass. Co-authored-by: Cursor <cursoragent@cursor.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — incremental delta since the prior review: restored Playwright coverage for the redesigned homepage, added Hallmark design-trace artifacts, and fixed light-mode contrast for the OKLCH palette.
- Restored Playwright homepage coverage — updated
apps/playwright-www/tests/homepage.test.tsto match the new terminal-forward nav (--docslink and exact-name GitHub link selectors). - Added Hallmark design-trace files —
.hallmark/log.jsonand.hallmark/preflight.jsoncapture the Workbench macrostructure, theme axes, and preflight findings. - Fixed light-mode contrast — darkened
light.css--primary/--ringtooklch(42% ...)for WCAG AA, and adjusted success/error text inhome-page-client.tsxto readabletext-green-700/text-red-700in light mode.
Kimi K2 (free via Pullfrog for OSS) | 𝕏
<!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Summary Merges latest `v1` into the homepage redesign branch and resolves the single content conflict in `apps/www/app/(home)/page.tsx`. ## Resolution - Kept the redesign's thin server page that renders `HomePageClient` (discarded the old hero markup from `v1`). - Ported the `v1` announcement badge update into `home-page-client.tsx`: **Next.js, Netlify presets** → `/docs/cli/hosting-presets`. ## Test plan - [ ] Confirm no conflict markers remain - [ ] Homepage loads with redesigned UI and updated announcement badge - [ ] `pnpm check` / relevant www checks pass <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-5540de83-df58-45d8-b811-4844b600c231"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-5540de83-df58-45d8-b811-4844b600c231"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: arkenv-bot[bot] <237618717+arkenv-bot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Resolve remaining merge conflicts after the prior squash-merge left Git without a merge parent on v1. - Keep the redesign thin HomePageClient page (discard old v1 hero markup). - Keep redesign .changeset/pre.json formatting (identical changeset set). - Keep example package pins already aligned with Version Packages (alpha). Co-authored-by: Yam Borodetsky <hi@yam.codes>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — merged latest v1 into the redesign branch and ported the upstream announcement badge update into the redesigned homepage.
- Resolved merge conflict in
page.tsx— kept the redesign's thin server page that rendersHomePageClientand discarded the old hero markup fromv1. - Updated homepage announcement badge — changed
apps/www/app/(home)/home-page-client.tsxto link to/docs/cli/hosting-presetswith the label "Next.js, Netlify presets".
Kimi K2 (free via Pullfrog for OSS) (GPT Sol not used — the program covers this model; add its provider key to run your pick) | 𝕏
<!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Summary Resolves the merge conflict between `design/homepage-redesign` and `v1` (PR #1161). The only conflict was in `.changeset/pre.json`: `v1` added four changeset entries that the redesign branch did not have. Resolution keeps `v1`'s full changeset list: - `align-missing-schema-host-hints` - `align-v1-shared-missing-schema-errors` - `optional-strict-shared-v1` - `split-help-global-init-options` Merging this into `design/homepage-redesign` should make #1161 mergeable into `v1` again. ## Test plan - [x] Confirmed single conflict file (`.changeset/pre.json`) - [x] Valid JSON after resolution - [x] Matching changeset markdown files present from `v1` <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-8aa99b59-c809-4964-b433-6e2399e9d0ca"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-8aa99b59-c809-4964-b433-6e2399e9d0ca"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: arkenv-bot[bot] <237618717+arkenv-bot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
arkenv
@arkenv/build
@arkenv/bun-plugin
@arkenv/core
@arkenv/fumadocs-ui
@arkenv/nextjs
@arkenv/nuxt
@arkenv/standard
@arkenv/vite-plugin
commit: |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — synced latest v1 into the redesign branch. No homepage files were touched; the merge brings in v1 features that landed in separate PRs.
- Optional
internal/shared.tsin strict layout —isStrictLayoutDirnow only requiresclient.ts+server.ts;findSchemaPathno longer requiresshared.ts; Nuxt module aliases#arkenv/shared-schemato the empty stub when the file is omitted; boot-gate skips the shared schema when absent. - Standardized missing-schema errors —
formatMissingSchemaErrorin@arkenv/buildproduces consistent "Could not find schema file … runnpx arkenv@latest init" messages across Bun, Vite, Next.js, and Nuxt plugins, without embedding starterenv.tsmodules. - Split CLI
--helpinto Global and init sections —help.tsnow groups shared flags (--yes,--quiet,--json,--agent) under Global options and scaffolding flags (--example,--force,--no-codegen,--host-preset) under init options. - GitHub Actions improvements — new
deploy-www-manual.yml(maintainer escape hatch for manual SHA deploys), enhancedpreview-www-reusable.ymlwith git metadata passed to Vercel deploys, and polishedpreview-www-default.ymlfork-PR + label-gate logic. - Docs updates for optional
shared.ts— Next.js strict layout and Nuxt configuration/validation docs now describeshared.tsas optional throughout.
DeepSeek Pro (free via Pullfrog for OSS) (GPT Sol not used — the program covers this model; add its provider key to run your pick) | 𝕏
|
Gonna close this in favor of #1509 |

Description
This PR implements a complete redesign of the website homepage using a terminal-forward, CLI-first utility style with a subtle nautical/sailing motif, aligning with Arkenv's brand.
Visual & Architectural Changes
design.mdutilizing OKLCH colors—anchored on a deep marine navy backdrop (oklch(13% 0.014 225)) and electric cyan accent (oklch(78% 0.16 210)).> arkenv --init) with navigation flags.npx arkenv init.env.tsusing ArkType.Verification
pnpm check.