www.forgent3d.com。Next.js App Router,通过 @opennextjs/cloudflare 部署到 Cloudflare Workers。
官网讲什么、怎么讲,见 WEBSITE_PRODUCT_DOC.md——改了叙事就改那份文档。
app/[locale]/(site)/page.js: 首页(en/zh),内容由app/lib/landing-page.js渲染app/lib/landing-page.js: 首页全部文案(COPY)+ HTML 模板 + skills 常量app/[locale]/(site)/{skills,quick-start,pricing,local-data,contact,...}/page.js: 子页面,文案在各自的getCopy(locale);(site)/layout.js给它们和首页挂同一条顶栏(路由组,不进 URL)app/[locale]/openscad-to-step/: OpenSCAD → STEP 的三页(首页 / why / compatibility),自带顶栏,不走(site); 文案、路径、metadata 在app/lib/openscad-to-step.jsapp/[locale]/openscad-viewer/: OpenSCAD 在线预览,en / zh / ko / de / ja / es 六种语言,自带顶栏;路径、metadata、语言表在app/lib/openscad-viewer.js,文案一种语言一个文件app/lib/openscad-viewer-copy/<lang>.js,速查表app/lib/openscad-cheatsheet.js; 改了任一语言跑npm run check:openscad-locales(键、数字、链接与英文一致,速查表例子去掉注释后与英文逐字相同)app/[locale]/build123d-online/: build123d 在线(app/build123d)的落地页,en / zh,自带顶栏;路径、metadata、文案、实测数字、 例子名(platformlib/build123d-examples.ts的键,缩略图public/build123d-examples/)在app/lib/build123d-online.jsapp/[locale]/step-to-stl/、app/[locale]/stl-to-step/: STEP ↔ STL 转换器(app/convert)的两页落地,en / zh / de / ja 四种语言, 自带顶栏(app/components/step-tools-page.js);共用的路径、metadata、实测数字(SURVEY,出处 platformdocs/step-tools.md§4)在app/lib/step-tools.js,文案在app/lib/step-to-stl.js、app/lib/stl-to-step.jsapp/m/[shareSlug]/: 公开模型分享页(3D 全屏 / 详情),数据来自 cad-agentapp/lib/cad-agent.js: 已发布模型 API 客户端app/robots.js/app/sitemap.js: robots 与 sitemap(新增页面记得补 sitemap)app/globals.css: Tailwind v4 样式与设计 tokenpublic/site-links.js: 外链配置(工作台 / GitHub / skills 仓库 / 桌面版 Release)public/script.js: 语言切换、外链注入、PostHog 埋点、图片灯箱、命令复制wrangler.jsonc/open-next.config.ts: Cloudflare 部署配置
文案是中英双份,改一处必须同时改另一处。
pnpm install
pnpm dev官网默认 http://localhost:4173。模型 Gallery 和 /m/* 会请求 cad-agent
(默认 https://agent.forgent3d.com,本地可用 CAD_AGENT_API_URL 覆盖到
http://localhost:3000)。端口见 .env.development。
pnpm build # next build
pnpm preview # wrangler dev,跑构建产物npx wrangler login
pnpm deploy # opennextjs-cloudflare build && deploy自定义域名在 Cloudflare 控制台给这个 Worker 加域名路由。
- 在
app/[locale]/(site)/<slug>/page.js里写getCopy(locale)(中英两份)、generateStaticParams、generateMetadata(canonical + hreflang;openGraph里展开app/lib/seo.js的OG_BASE,否则这一页分享出去没有卡片图)。 - 在
app/sitemap.js补/en/<slug>和/zh/<slug>。 - 需要的话在
app/lib/landing-page.js的 footer / nav 里加链接,并在两个 locale 的COPY里加对应文案键。 - 新的 CTA 加
js-*class,并在public/script.js的埋点表里补一条事件。