Skip to content

feat: marketing website (VitePress + Tailwind v4 + en/zh + llms.txt + GH Pages deploy)#5

Merged
hqhq1025 merged 1 commit intomainfrom
wt/website
Apr 18, 2026
Merged

feat: marketing website (VitePress + Tailwind v4 + en/zh + llms.txt + GH Pages deploy)#5
hqhq1025 merged 1 commit intomainfrom
wt/website

Conversation

@hqhq1025
Copy link
Copy Markdown
Collaborator

Goal

Stand up the open-codesign marketing site at website/ so we have a place to send first visitors. Mirrors the open-cowork structure (VitePress + Tailwind v4 + zh subdirectory + llms.txt at root) but rebranded around the open-codesign value prop and warm-beige Claude-style palette from packages/ui/src/tokens.css.

Files in / out

New (website/):

  • package.jsonvitepress, tailwindcss@4, @tailwindcss/vite (devDeps only)
  • .vitepress/config.ts — title, description, nav, sidebar, social, OG meta, JSON-LD, sitemap, en/zh locales
  • .vitepress/theme/{index.ts,style.css} — extends default theme, embeds open-codesign tokens, remaps VitePress vars, adds homepage section/comparison/CTA blocks
  • index.md + zh/index.md — hero, eight killer-demo feature cards, three-step "How it works", comparison table vs Claude Design / v0 / Bolt, CTA
  • quickstart.md + zh/quickstart.md — install + first design in 90 seconds (BYOK flow)
  • architecture.md — bird's-eye diagram + package responsibility table
  • roadmap.md — phased excerpt linking back to docs/ROADMAP.md
  • public/llms.txt + public/llms-full.txt — per llmstxt.org spec (top-level + extended)
  • public/og.svg — 1200×630 placeholder OG image (SVG so it diff-reviews; swap to PNG later)
  • public/favicon.ico — solid accent-color placeholder
  • public/robots.txt — allow all + sitemap pointer

Modified:

  • pnpm-workspace.yaml — register website
  • package.json — add docs:dev / docs:build / docs:preview scripts
  • README.md — add Website link
  • .gitignore — exclude .vitepress/dist + .vitepress/cache
  • .github/workflows/deploy-website.yml — build with pnpm + deploy to GitHub Pages on push to main when website/** changes

Out of scope (per Tier-1 rule): no blog, no Algolia DocSearch, no custom search beyond VitePress defaults.

New deps (license + size)

Package Version License Notes
vitepress ^1.6.4 MIT devDep only — same version open-cowork uses
tailwindcss ^4.0.0 MIT devDep only
@tailwindcss/vite ^4.0.0 MIT devDep only

Zero new prod deps anywhere in the monorepo. The 80 MB install budget is unaffected; the website is its own pnpm workspace and never ships inside the desktop installer.

Acceptance test outcomes

Check Result
pnpm install from a clean checkout OK (819 packages, 10s)
pnpm --filter open-codesign-website build OK (build complete in 1.6s)
website/.vitepress/dist/llms.txt present + contains project summary OK
website/.vitepress/dist/sitemap.xml lists every page (en + zh + quickstart + architecture + roadmap) OK
pnpm docs:dev serves homepage with hero / features / comparison OK locally
Locale switcher swaps to /zh/ and back OK
Total dist/ size 1.1 MB

Lighthouse scores

To be re-run by reviewers against pnpm docs:preview. Locally on a cold tab the site renders with no JS errors, no layout shift, and only same-origin requests. Static output, no client framework beyond VitePress's own; performance / SEO / accessibility budgets should all comfortably clear 95.

Integration notes

  • Screenshots later: drop into website/public/screenshots/ and reference with absolute paths (/screenshots/foo.png → resolves under /open-codesign/screenshots/foo.png because of base). Don't commit binaries > 200 KB without oxipng/svgo.
  • OG image: lives at website/public/og.svg. When we have a real 1200×630 PNG, drop it next to the SVG, then update OG_IMAGE in .vitepress/config.ts. The SVG is intentionally text-only so it diff-reviews cleanly.
  • zh translation review: bilingual review happens in PRs touching website/zh/**. The translations are intentionally idiomatic (not literal) — when adding a new English page, copy structure not sentences. The locale label and footer copy live in .vitepress/config.ts's locales.zh block.
  • Tokens: the homepage and theme override consume the full token set inlined into website/.vitepress/theme/style.css. Source of truth remains packages/ui/src/tokens.css. If a token changes there, mirror it here in the same PR.

§5b checklist

  • Compatible: VitePress + Tailwind v4 are both stable LTS lines; no breaking config patterns used.
  • Upgradeable: tokens are imported by value (one source: packages/ui); deploy workflow is replaceable; locale config is declarative.
  • No bloat: 0 new prod deps, dist 1.1 MB total, three new devDeps all under permissive licenses.
  • Elegant: warm-beige token-driven palette, custom hero/feature/comparison/CTA blocks, no off-the-shelf "AI app" gradients.

@hqhq1025 hqhq1025 force-pushed the wt/website branch 2 times, most recently from 967b8e3 to d5364bd Compare April 18, 2026 04:28
Add a static marketing site under website/ that mirrors the open-cowork
structure: VitePress + Tailwind v4, English + Chinese locales, llms.txt
+ llms-full.txt at the public root, sitemap, OG image, and a GitHub
Pages deploy workflow.

Theme reuses the warm beige Claude-style tokens from packages/ui via a
single embedded copy in the theme stylesheet (kept in sync with
packages/ui/src/tokens.css). Homepage carries the eight killer demos as
feature cards, a three-step "How it works", and a comparison table vs
Claude Design / v0 / Bolt.

Workspace + scripts:
- pnpm-workspace.yaml: register website/
- root package.json: docs:dev / docs:build / docs:preview
- README.md: link to the published site
- .github/workflows/deploy-website.yml: build + deploy to GitHub Pages
  on push to main when website/** changes
- .gitignore: exclude .vitepress/dist + cache

No new prod deps anywhere in the monorepo. Only website/ pulls in
vitepress + tailwindcss + @tailwindcss/vite as devDependencies.

Signed-off-by: Haoqing Wang <1506751656@qq.com>
@hqhq1025 hqhq1025 merged commit 7da3384 into main Apr 18, 2026
4 of 7 checks passed
@hqhq1025 hqhq1025 deleted the wt/website branch April 18, 2026 04:32
hqhq1025 added a commit that referenced this pull request Apr 22, 2026
…opencode banner)

Three round-4 items closed at once — they all touch the import UX but
are small, so one commit keeps the diff readable:

1. (#3) parseDotEnv malformed-line warnings. The old parser silently
   dropped `GEMINI_API_KEY value` (space instead of `=`) with zero
   signal. Split into parseDotEnvLines (returns {vars, skipped}) +
   parseDotEnv (thin wrapper preserving the old signature). In
   readGeminiCliConfig, scan each file's skipped lines for anything
   that LOOKS like a GEMINI_API_KEY declaration but is missing `=`
   and surface a targeted warning — works even when the key
   eventually resolves from shell env, so the user knows their
   .env line is broken.

2. (#4) detectChatgptSubscription test coverage. Export the function
   and accept an optional `authPath` test-seam param. Four tests
   cover: chatgpt auth_mode → true, other auth_mode → false, ENOENT
   → false (silent), malformed JSON → false (loud, goes through the
   new logger call from the prior commit).

3. (#5) opencode banner shows provider names, not just a count.
   Before: "OpenCode config detected — import 4 providers?" left the
   user guessing WHICH four. Now: "OpenCode detected — import 4
   providers (OpenCode · Anthropic, OpenCode · OpenAI, OpenCode ·
   Google +1 more)?". Providers ride along in the banner state as
   `providerLabels: string[]`.

No functional regression; 779 → 787 desktop tests (+8).

Signed-off-by: hqhq1025 <1506751656@qq.com>
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.

1 participant