feat: marketing website (VitePress + Tailwind v4 + en/zh + llms.txt + GH Pages deploy)#5
Merged
feat: marketing website (VitePress + Tailwind v4 + en/zh + llms.txt + GH Pages deploy)#5
Conversation
967b8e3 to
d5364bd
Compare
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
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 frompackages/ui/src/tokens.css.Files in / out
New (
website/):package.json—vitepress,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 blocksindex.md+zh/index.md— hero, eight killer-demo feature cards, three-step "How it works", comparison table vs Claude Design / v0 / Bolt, CTAquickstart.md+zh/quickstart.md— install + first design in 90 seconds (BYOK flow)architecture.md— bird's-eye diagram + package responsibility tableroadmap.md— phased excerpt linking back todocs/ROADMAP.mdpublic/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 placeholderpublic/robots.txt— allow all + sitemap pointerModified:
pnpm-workspace.yaml— registerwebsitepackage.json— adddocs:dev/docs:build/docs:previewscriptsREADME.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 whenwebsite/**changesOut of scope (per Tier-1 rule): no blog, no Algolia DocSearch, no custom search beyond VitePress defaults.
New deps (license + size)
vitepresstailwindcss@tailwindcss/viteZero 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
pnpm installfrom a clean checkoutpnpm --filter open-codesign-website buildwebsite/.vitepress/dist/llms.txtpresent + contains project summarywebsite/.vitepress/dist/sitemap.xmllists every page (en + zh + quickstart + architecture + roadmap)pnpm docs:devserves homepage with hero / features / comparison/zh/and backdist/sizeLighthouse 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
website/public/screenshots/and reference with absolute paths (/screenshots/foo.png→ resolves under/open-codesign/screenshots/foo.pngbecause ofbase). Don't commit binaries > 200 KB withoutoxipng/svgo.website/public/og.svg. When we have a real 1200×630 PNG, drop it next to the SVG, then updateOG_IMAGEin.vitepress/config.ts. The SVG is intentionally text-only so it diff-reviews cleanly.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'slocales.zhblock.website/.vitepress/theme/style.css. Source of truth remainspackages/ui/src/tokens.css. If a token changes there, mirror it here in the same PR.§5b checklist
packages/ui); deploy workflow is replaceable; locale config is declarative.