Skip to content

docs: launch-ready marketing — README, website, SEO, AI-SEO, og:image#40

Merged
hqhq1025 merged 5 commits intomainfrom
wt/marketing-launch
Apr 19, 2026
Merged

docs: launch-ready marketing — README, website, SEO, AI-SEO, og:image#40
hqhq1025 merged 5 commits intomainfrom
wt/marketing-launch

Conversation

@hqhq1025
Copy link
Copy Markdown
Collaborator

Summary

Prep for tomorrow's public launch. All changes are documentation and website only — no TypeScript, no tests affected.

  • README + README.zh-CN: hero image placeholder, badges, punchy hook, comparison table (vs Claude Design / v0 / Lovable), 3-step quickstart, "design intelligence" section, roadmap table (shipped ✅ vs coming 🔜), star-history chart, "Cite this project" block
  • Website index.md (EN + ZH): hero CTA with "Download for macOS" + "Star on GitHub", features polished with coming-soon markers, comparison table updated (Open CoDesign row first, Lovable added), social proof placeholder block, two-button CTA section
  • VitePress config.ts SEO: lang: 'en-US', og:site_name, og:image:width/height, twitter:site, canonical URL, updated keywords with "Claude Design alternative" / "open source AI design tool" / "BYOK design app" / "local-first design generator", JSON-LD expanded (Linux added, aggregateRating placeholder, codeRepository field), nav items "Why" / "Features" / "Pricing", footer with links, Twitter social link
  • llms.txt: expanded with shipped features, coming-soon section, differentiation vs Claude Design as factual statements (LLM-citation-friendly)
  • llms-full.txt: full rewrite with comparison table, architecture section, hard constraints, citation block, community links
  • CITATION.cff: new file at repo root (academic / industry citation, CFF 1.2.0)

Sitemap is handled by VitePress built-in sitemap plugin (already configured). robots.txt already has Allow: / — no change needed.

What is NOT in this PR (TODO before launch)

  • Real hero screenshot — replace website/public/hero.png placeholder
  • Demo GIF — replace https://placehold.co/… in README sections
  • YouTube demo video link — replace TODO in YouTube links
  • Discord server URL — add to footer once server is live
  • Twitter/X handle confirmation — @OpenCoworkAI used; verify it's correct
  • OG image — replace og.svg with a proper 1200×630 PNG when ready
  • aggregateRating in JSON-LD — update once real reviews exist

Compatibility / upgradeability / no bloat / elegance

  • ✅ Compatibility — pure docs/config changes, no runtime impact
  • ✅ Upgradeability — no new deps; VitePress config is additive
  • ✅ No bloat — CITATION.cff is 18 lines; llms files are plain text
  • ✅ Elegance — factual, Anthropic-style editorial tone; no "revolutionary" language

Test plan

  • pnpm --filter website docs:build succeeds with no errors
  • /llms.txt is accessible at https://opencoworkai.github.io/open-codesign/llms.txt
  • /llms-full.txt accessible at same origin
  • og:image meta tag renders correctly in browser dev tools head inspector
  • Comparison table renders correctly on both EN and ZH index pages
  • Star history chart image loads (external SVG from star-history.com)
  • JSON-LD validates at https://validator.schema.org/ with no errors

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Findings

  • [Major] Placeholder aggregateRating JSON-LD can be treated as misleading structured data and hurt search visibility. The PR adds a synthetic 5-star rating with one review while also marking it as placeholder, which should not be published metadata, evidence website/.vitepress/config.ts:87.
    Suggested fix:

    // Remove placeholder rating block until real review data exists
    // aggregateRating: {
    //   '@type': 'AggregateRating',
    //   ratingValue: '5',
    //   reviewCount: '1',
    // },
  • [Minor] README contains an unresolved demo URL (watch?v=TODO), which creates a broken CTA in public docs, evidence README.md:30.
    Suggested fix:

    <!-- until demo video exists -->
    <!-- ▶ [Watch on YouTube](https://www.youtube.com/watch?v=TODO) -->
  • [Minor] Chinese README has the same unresolved watch?v=TODO demo URL, evidence README.zh-CN.md:30.
    Suggested fix:

    <!-- 在真实视频发布前先移除占位链接 -->
    <!-- ▶ [在 YouTube 观看](https://www.youtube.com/watch?v=TODO) -->

Summary

  • Review mode: initial
  • 3 issues found on changed lines (1 Major, 2 Minor).
  • Required context files docs/VISION.md and docs/PRINCIPLES.md: Not found in repo/docs.
  • Hard-constraint checks in this diff: no direct provider SDK imports, no dependency/license/install-size changes detected.

Testing

  • Not run (automation). Suggested coverage: add CI link-check (README + docs) and a VitePress build-time check for metadata placeholders.

open-codesign Bot

Comment thread website/.vitepress/config.ts Outdated
priceCurrency: 'USD',
description: 'Free and open source. Bring your own API key (token cost only).',
},
aggregateRating: {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aggregateRating is currently hardcoded placeholder data (5/1). Search engines can treat synthetic review schema as misleading rich-result markup. Please remove this block until real rating data exists.

// aggregateRating: {
//   @type: AggregateRating,
//   ratingValue: 5,
//   reviewCount: 1,
// },

Comment thread README.md Outdated
Open CoDesign turns natural-language prompts into HTML prototypes, slide decks, and marketing assets — all running on your laptop, with whichever AI model you bring. It's the open-source counterpart to Anthropic Claude Design, built around three convictions:
## Quick demo (60 s)

▶ [Watch on YouTube](https://www.youtube.com/watch?v=TODO) _(placeholder — video coming before launch)_
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This CTA links to watch?v=TODO, so users land on a broken target. Either replace with a real URL or remove the link until video is available.

<!-- ▶ [Watch on YouTube](https://www.youtube.com/watch?v=TODO) -->

Comment thread README.zh-CN.md Outdated

## 快速演示(60 秒)

▶ [在 YouTube 观看](https://www.youtube.com/watch?v=TODO)(占位 — 发布前替换为真实视频)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue as EN README: the YouTube URL is unresolved (watch?v=TODO) and produces a broken CTA. Remove or replace before merge.

<!-- ▶ [在 YouTube 观看](https://www.youtube.com/watch?v=TODO) -->

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Findings

  • [Minor] Broken YouTube CTA in English README (watch?v=TODO) leads users to a non-existent target, evidence README.md:30.
    Suggested fix:

    <!-- Remove placeholder link until video is live -->
    <!-- ▶ [Watch on YouTube](https://www.youtube.com/watch?v=TODO) -->
  • [Minor] Broken YouTube CTA in Chinese README (watch?v=TODO) has the same issue, evidence README.zh-CN.md:30.
    Suggested fix:

    <!-- 真实视频上线前先移除占位链接 -->
    <!-- ▶ [在 YouTube 观看](https://www.youtube.com/watch?v=TODO) -->

Summary

  • Review mode: follow-up after new commits
  • 2 issues found on changed lines (both Minor).
  • Verified fixed from previous review: placeholder aggregateRating was removed from JSON-LD in website/.vitepress/config.ts.
  • Required context files docs/VISION.md and docs/PRINCIPLES.md: Not found in repo/docs.
  • Hard-constraint checks in this diff: no direct provider SDK imports, no dependency/license/install-size changes detected.

Testing

  • Not run (automation). Suggested coverage: link-check for README/docs external CTAs.

open-codesign Bot

Comment thread README.md Outdated
Open CoDesign turns natural-language prompts into HTML prototypes, slide decks, and marketing assets — all running on your laptop, with whichever AI model you bring. It's the open-source counterpart to Anthropic Claude Design, built around three convictions:
## Quick demo (60 s)

▶ [Watch on YouTube](https://www.youtube.com/watch?v=TODO) _(placeholder — video coming before launch)_
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This link targets watch?v=TODO, so users hit a broken destination. Please replace with a real video URL or remove/comment it until ready.

<!-- ▶ [Watch on YouTube](https://www.youtube.com/watch?v=TODO) -->

Comment thread README.zh-CN.md Outdated

## 快速演示(60 秒)

▶ [在 YouTube 观看](https://www.youtube.com/watch?v=TODO)(占位 — 发布前替换为真实视频)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue in zh-CN README: watch?v=TODO is a broken placeholder target. Please replace with a real URL or remove/comment this line until launch.

<!-- ▶ [在 YouTube 观看](https://www.youtube.com/watch?v=TODO) -->

@hqhq1025 hqhq1025 force-pushed the wt/marketing-launch branch from ec1fa19 to 38b5140 Compare April 18, 2026 18:10
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Findings

  • [Major] Global canonical points all pages to the site root canonical URL, which can cause search engines to treat /quickstart, /architecture, /roadmap, and localized pages as duplicates of home, reducing discoverability and potentially de-indexing those pages. Evidence website/.vitepress/config.ts:66.
    Suggested fix:
    // Remove the static canonical tag from `head`, then add a per-page canonical:
    transformHead: ({ pageData }) => {
      const path = pageData.relativePath
        .replace(/index\.md$/, '')
        .replace(/\.md$/, '');
    
      return [[
        'link',
        { rel: 'canonical', href: new URL(path, SITE_URL).toString() },
      ]];
    },

Summary

  • Review mode: follow-up after new commits
  • 1 issue found on changed lines.
  • Required context docs docs/VISION.md and docs/PRINCIPLES.md: Not found in repo/docs.
  • Hard-constraint checks in this diff: no direct provider SDK imports, no dependency/license/install-size changes detected, and DCO sign-off is present on commits.

Testing

  • Not run (automation). Suggested coverage: build docs and verify canonical URL differs per route (home, /quickstart, /architecture, /zh/).

open-codesign Bot

Comment thread website/.vitepress/config.ts Outdated
},
],
// Canonical
['link', { rel: 'canonical', href: SITE_URL }],
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This static canonical applies the same URL to every page. For non-home pages this can collapse indexing to root. Please generate canonical per page path instead of a single global value.

transformHead: ({ pageData }) => {
  const path = pageData.relativePath
    .replace(/index\.md$/, '')
    .replace(/\.md$/, '');

  return [[
    'link',
    { rel: 'canonical', href: new URL(path, SITE_URL).toString() },
  ]];
},

hqhq1025 added a commit that referenced this pull request Apr 18, 2026
Replace global canonical pointing to site root with a per-page canonical
generated in transformPageData. Search engines were treating /quickstart,
/architecture, /roadmap, and the localized /zh pages as duplicates of the
home page.

Addresses Codex review on #40.

Signed-off-by: hqhq1025 <[email protected]>
@hqhq1025 hqhq1025 force-pushed the wt/marketing-launch branch from 38b5140 to 9fdf278 Compare April 18, 2026 19:22
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Findings

  • [Major] README hero image paths point to a non-existent file, so the primary visual renders as a broken image on GitHub and docs previews. Evidence README.md:10, README.zh-CN.md:10.
    Suggested fix:

    <!-- Option A: point to an existing asset until hero.png is added -->
    <img src="website/public/og.svg" alt="Open CoDesign — prompt to prototype" width="900" />
    
    <!-- Option B: remove the img block until website/public/hero.png is committed -->
  • [Minor] og:url is hardcoded to the site root, so non-home pages emit incorrect Open Graph canonical URL metadata. Evidence website/.vitepress/config.ts:42.
    Suggested fix:

    transformPageData(pageData) {
      const path = pageData.relativePath.replace(/index\.md$/, '').replace(/\.md$/, '');
      const canonical = `${SITE_URL}${path}`;
      pageData.frontmatter.head ??= [];
      pageData.frontmatter.head.push(['link', { rel: 'canonical', href: canonical }]);
      pageData.frontmatter.head.push(['meta', { property: 'og:url', content: canonical }]);
    },

Summary

  • Review mode: follow-up after new commits
  • 2 issues found on changed lines.
  • Required context docs docs/VISION.md and docs/PRINCIPLES.md: Not found in repo/docs.
  • Hard-constraint checks in this diff: no direct provider SDK imports, no dependency/license/install-size changes detected, and DCO sign-off is present on commits.

Testing

  • Not run (automation). Suggested coverage: pnpm --filter website docs:build and inspect generated page head tags (canonical, og:url) for /, /quickstart, and /zh/quickstart.

open-codesign Bot

Comment thread README.md Outdated
[Website](https://opencoworkai.github.io/open-codesign/) · [Quickstart](#quickstart) · [Docs](https://opencoworkai.github.io/open-codesign/quickstart) · [Contributing](./CONTRIBUTING.md) · [Security](./SECURITY.md)

<p align="center">
<img src="website/public/hero.png" alt="Open CoDesign — prompt to prototype" width="900" />
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This image points to website/public/hero.png, but that file is not in the repo at this commit, so the README hero renders broken. Please either commit hero.png in this PR or temporarily point to an existing asset.

Comment thread README.zh-CN.md Outdated
[官网](https://opencoworkai.github.io/open-codesign/) · [快速开始](#快速开始) · [贡献指南](./CONTRIBUTING.md) · [安全政策](./SECURITY.md)

<p align="center">
<img src="website/public/hero.png" alt="Open CoDesign — 提示词到原型" width="900" />
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue as the English README: website/public/hero.png is missing in this commit, so this hero image renders broken.

['meta', { property: 'og:image', content: OG_IMAGE }],
['meta', { property: 'og:image:width', content: '1200' }],
['meta', { property: 'og:image:height', content: '630' }],
['meta', { property: 'og:url', content: SITE_URL }],
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

og:url is still fixed to the site root, so social metadata for non-home pages is inaccurate. Consider emitting per-page og:url from the same canonical path logic in transformPageData.

Part A — README marketing polish (EN + zh-CN):
- Hero image placeholder + badge strip at top
- "What is Open CoDesign?" punchy 80-word hook
- Quick demo section with YouTube + GIF placeholders
- Comparison table: Open CoDesign vs Claude Design vs v0 vs Lovable
- Quickstart rewritten as numbered 3-step flow (download → BYOK → prompt)
- "Built-in Anthropic-style design intelligence" section (anti-slop Skill)
- Roadmap table with shipped ✅ vs coming 🔜 status
- Star History chart
- "Cite this project" block (citation template + CITATION.cff reference)

Part B — Website hero + features:
- hero.image added (placeholder /hero.png)
- CTA buttons: "Download for macOS" + "Star on GitHub" + "Quickstart"
- Features 8 items polished; coming-soon items marked clearly
- Comparison table updated (Open CoDesign row first, Lovable added)
- Social proof / testimonial placeholder block added
- CTA section with two links

Part C — SEO deepening (config.ts):
- lang: 'en-US' added
- og:site_name, og:image:width/height added
- twitter:site @OpenCoworkAI added
- Canonical URL link tag added
- Keywords updated with high-value phrases:
  "Claude Design alternative", "open source AI design tool",
  "BYOK design app", "local-first design generator"
- JSON-LD SoftwareApplication: name capitalised, operatingSystem
  expanded to include Linux, aggregateRating placeholder added,
  codeRepository field added
- Nav: added Why / Features / Pricing links
- Footer: links to Apache-2.0, Contribute, Issues
- socialLinks: Twitter added

Part D — AI-SEO:
- llms.txt: expanded with shipped features, coming-soon section,
  differentiation facts in statement form
- llms-full.txt: full rewrite with comparison table, architecture
  section, hard constraints, community links, citation block
- CITATION.cff: new file at repo root for academic/industry citation

Sitemap: VitePress built-in sitemap plugin already configured.
robots.txt: existing Allow: / is correct, no change needed.

Signed-off-by: hqhq1025 <[email protected]>
Replace global canonical pointing to site root with a per-page canonical
generated in transformPageData. Search engines were treating /quickstart,
/architecture, /roadmap, and the localized /zh pages as duplicates of the
home page.

Addresses Codex review on #40.

Signed-off-by: hqhq1025 <[email protected]>
Codex flagged README hero referencing website/public/hero.png which
does not exist, so the primary visual rendered broken on GitHub and
docs previews. Use placehold.co in both READMEs and point the
VitePress hero at the existing /og.svg until a real screenshot lands.

Signed-off-by: hqhq1025 <[email protected]>
@hqhq1025 hqhq1025 force-pushed the wt/marketing-launch branch from 9fdf278 to 6307f6b Compare April 18, 2026 20:27
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Findings

  • [Minor] og:url is still pinned to the site root, so shared links for non-home pages can publish incorrect URL metadata. Evidence website/.vitepress/config.ts:42 and canonical logic at website/.vitepress/config.ts:100-105.
    Suggested fix:
    transformPageData(pageData) {
      const path = pageData.relativePath.replace(/index\.md$/, '').replace(/\.md$/, '');
      const canonical = `${SITE_URL}${path}`;
      pageData.frontmatter.head ??= [];
      pageData.frontmatter.head.push(['link', { rel: 'canonical', href: canonical }]);
      pageData.frontmatter.head.push(['meta', { property: 'og:url', content: canonical }]);
    }
    
    // Remove the static root value from head:
    // ['meta', { property: 'og:url', content: SITE_URL }],

Summary

  • Review mode: follow-up after new commits
  • 1 issue found on changed lines.
  • docs/VISION.md and docs/PRINCIPLES.md: Not found in repo/docs (as noted in CLAUDE.md, docs are gitignored/internal).
  • Hard-constraint checks in this diff: no direct provider SDK imports, no dependency/license/install-size changes detected.

Testing

  • Not run (automation). Suggested checks: build docs and inspect generated metadata for /, /quickstart, and /zh/quickstart to ensure og:url equals each page canonical URL.

open-codesign Bot

['meta', { property: 'og:image', content: OG_IMAGE }],
['meta', { property: 'og:image:width', content: '1200' }],
['meta', { property: 'og:image:height', content: '630' }],
['meta', { property: 'og:url', content: SITE_URL }],
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

og:url is currently static (SITE_URL), while canonical links are page-specific in transformPageData. This can produce incorrect OG URL metadata for non-home pages. Please emit og:url from the same per-page canonical value and remove the static root tag.

@hqhq1025 hqhq1025 merged commit 04d8ea1 into main Apr 19, 2026
6 checks passed
@hqhq1025 hqhq1025 deleted the wt/marketing-launch branch April 19, 2026 04:31
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