#!/usr/bin/env python3 """Convert the user manual markdown to a formatted DOCX file.""" from docx import Document from docx.shared import Pt, Cm, RGBColor from docx.enum.text import WD_ALIGN_PARAGRAPH import re def create_manual(): doc = Document() # Set default style style = doc.styles['Normal'] style.font.name = '微软雅黑' style.font.size = Pt(11) style.font.color.rgb = RGBColor(0x33, 0x33, 0x33) style.paragraph_format.space_after = Pt(6) style.paragraph_format.line_spacing = 1.5 def h(text, level=1): heading = doc.add_heading(text, level=level) for run in heading.runs: run.font.name = '微软雅黑' return heading def p(text, bold=False, size=None, color=None, align=None, indent=False): para = doc.add_paragraph() run = para.add_run(text) if bold: run.bold = True if size: run.font.size = Pt(size) if color: run.font.color.rgb = RGBColor(*color) if align: para.alignment = align if indent: para.paragraph_format.left_indent = Cm(1) run.font.name = '微软雅黑' return para def code(text): para = doc.add_paragraph() para.paragraph_format.left_indent = Cm(1) para.paragraph_format.space_before = Pt(4) para.paragraph_format.space_after = Pt(4) run = para.add_run(text) run.font.name = 'Consolas' run.font.size = Pt(9) run.font.color.rgb = RGBColor(0x1a, 0x1a, 0x2e) return para def tbl(headers, rows): table = doc.add_table(rows=1 + len(rows), cols=len(headers)) table.style = 'Light Grid Accent 1' for i, h_text in enumerate(headers): cell = table.rows[0].cells[i] cell.text = h_text for cell_p in cell.paragraphs: for r in cell_p.runs: r.bold = True r.font.name = '微软雅黑' r.font.size = Pt(10) for ri, row in enumerate(rows): for ci, cell_text in enumerate(row): cell = table.rows[ri+1].cells[ci] cell.text = str(cell_text) for cell_p in cell.paragraphs: for r in cell_p.runs: r.font.name = '微软雅黑' r.font.size = Pt(10) doc.add_paragraph() return table def tip(text): para = doc.add_paragraph() para.paragraph_format.left_indent = Cm(1) run = para.add_run('💡 ' + text) run.font.name = '微软雅黑' run.font.size = Pt(10) run.font.color.rgb = RGBColor(0x25, 0x63, 0xeb) return para def image_placeholder(text): para = doc.add_paragraph() para.alignment = WD_ALIGN_PARAGRAPH.CENTER para.paragraph_format.space_before = Pt(12) para.paragraph_format.space_after = Pt(12) run = para.add_run(f'[此处插入截图:{text}]') run.font.name = '微软雅黑' run.font.size = Pt(10) run.font.color.rgb = RGBColor(0x93, 0x3a, 0xea) run.italic = True run.bold = True return para def page_break(): doc.add_page_break() # ===== TITLE PAGE ===== doc.add_paragraph() doc.add_paragraph() title_para = doc.add_paragraph() title_para.alignment = WD_ALIGN_PARAGRAPH.CENTER title_run = title_para.add_run('用 Claude Code 搭建企业产品独立站') title_run.font.size = Pt(28) title_run.font.color.rgb = RGBColor(0x0f, 0x17, 0x2a) title_run.bold = True title_run.font.name = '微软雅黑' subtitle_para = doc.add_paragraph() subtitle_para.alignment = WD_ALIGN_PARAGRAPH.CENTER subtitle_run = subtitle_para.add_run('零代码使用手册') subtitle_run.font.size = Pt(18) subtitle_run.font.color.rgb = RGBColor(0x25, 0x63, 0xeb) subtitle_run.bold = True subtitle_run.font.name = '微软雅黑' doc.add_paragraph() p('v1.0 · 2026年5月', size=10, color=(0x94, 0xa3, 0xb8), align=WD_ALIGN_PARAGRAPH.CENTER) doc.add_paragraph() p('适用人群:没有编程基础的市场、运营、产品经理', align=WD_ALIGN_PARAGRAPH.CENTER) p('所需工具:Claude Code(命令行版)+ 产品介绍 PPT', align=WD_ALIGN_PARAGRAPH.CENTER) p('产出成果:一个被 AI 搜索引擎收录的多语言产品官网', align=WD_ALIGN_PARAGRAPH.CENTER) p('全程耗时:约 1-2 小时(含 AI 自动生成时间)', align=WD_ALIGN_PARAGRAPH.CENTER) page_break() # ===== TABLE OF CONTENTS ===== h('目录', level=1) toc_items = [ '准备工作:你需要什么', '第一步:准备产品资料', '第二步:让 AI 学习你的产品', '第三步:让 AI 研究 SEO 策略', '第四步:让 AI 设计网站架构', '第五步:让 AI 编写网站', '第六步:检查网站效果', '第七步:发现样式问题并修复', '第八步:部署上线(可选)', '常见问题排查', '附录 A:给 AI 的完整提示词合集', '附录 B:我们的实战案例复盘', '附录 C:GEO 优化清单', '附录 D:关键技术概念解释', ] for i, item in enumerate(toc_items): p(f'{i+1}. {item}', size=11) page_break() # ===== SECTION 1: 准备工作 ===== h('1. 准备工作:你需要什么', level=1) h('硬件/软件要求', level=2) tbl(['项目', '要求'], [ ['电脑', 'Windows / Mac 均可'], ['网络', '能正常访问互联网'], ['Claude Code', '已安装并登录'], ['Node.js', 'Claude Code 自带,无需单独安装'], ]) h('材料要求', level=2) tbl(['材料', '格式', '说明'], [ ['产品介绍 PPT', '.pptx', '产品定位、功能、品牌故事等'], ['品牌手册', '.pptx 或 .pdf', '愿景、使命、价值观等'], ]) image_placeholder('准备就绪的文件夹,内含 PPT 文件') h('确认 Claude Code 已启动', level=2) p('打开终端(Windows 按 Win+R,输入 cmd,回车),输入:') code('claude') p('看到欢迎界面说明启动成功。') image_placeholder('Claude Code 启动后的欢迎界面') # ===== SECTION 2 ===== h('2. 第一步:准备产品资料', level=1) h('操作目标', level=2) p('将 PPT 产品资料放到一个文件夹里,让 Claude Code 能找到它们。') h('步骤 2.1:创建文件夹', level=2) p('在电脑上创建一个文件夹来存放所有材料。例如:') code('D:\\我的项目\\产品介绍\\') p('将你的产品 PPT 文件放入这个文件夹。') image_placeholder('文件夹中放置了 PPT 文件') h('步骤 2.2:确认工作目录', level=2) p('在 Claude Code 中,输入以下命令查看当前工作目录:') code('你现在在哪个文件夹工作?') p('Claude 会告诉你当前的工作路径,记下这个路径。') image_placeholder('Claude 回复当前工作路径') # ===== SECTION 3 ===== h('3. 第二步:让 AI 学习你的产品', level=1) h('操作目标', level=2) p('让 Claude 读取你的 PPT 资料,深入理解你的产品、品牌和业务。') h('步骤 3.1:发送第一个提示词', level=2) p('将以下提示词完整复制到 Claude Code 对话框中,替换 [文件夹路径] 为实际路径:') code('请读取我放在 [你的产品介绍文件夹路径] 目录下的所有 PPT 文件,\n深度理解我们的产品定位、品牌理念、核心功能、目标客户和竞争优势。\n然后帮我总结:\n1. 产品的核心定位是什么?\n2. 产品解决什么痛点?\n3. 产品有哪些核心功能?\n4. 目标客户是谁?') image_placeholder('在 Claude Code 中粘贴提示词') h('步骤 3.2:确认 AI 的理解', level=2) p('Claude 会输出对产品的理解摘要。仔细阅读,确认理解正确。') p('如果 AI 有理解偏差,直接告诉它:"第 2 点不太对,正确的理解应该是……"') image_placeholder('Claude 输出的产品理解摘要') # ===== SECTION 4 ===== h('4. 第三步:让 AI 研究 SEO 策略', level=1) h('操作目标', level=2) p('让 Claude 搜索互联网上关于 GEO(生成式引擎优化)的最佳实践。') h('为什么这步很重要?', level=2) p('传统 SEO 是让 Google 收录你的网站。但现在越来越多用户用 ChatGPT、豆包等 AI 工具搜索信息。GEO 就是让你的网站在 AI 回答中被引用和推荐的技巧。') h('步骤 4.1:复制以下提示词', level=2) code('请帮我做三件事:\n\n1. 搜索 GEO(Generative Engine Optimization)的最佳实践和最新策略\n\n2. 搜索 Astro 框架制作多语言网站的 SEO 最佳实践\n\n3. 基于你对我们产品的理解,梳理目标用户可能会搜索什么内容、\n 问什么问题,建立一个问题库\n\n然后把以上内容整理成一个 GEO 优化方案。') image_placeholder('粘贴 GEO 研究提示词') h('步骤 4.2:等待 AI 完成研究', level=2) p('Claude 会自动搜索多个网页,阅读内容,然后整理出一份完整的 GEO 方案。约需 1-3 分钟。') image_placeholder('Claude 输出的 GEO 优化方案摘要') h('步骤 4.3:确认方案', level=2) p('阅读 AI 输出的内容,重点关注:') p('• 关键词列表:用户搜索时会用的词', indent=True) p('• 问题库:用户可能会问的问题', indent=True) p('• 内容建议:网站需要包含的内容', indent=True) # ===== SECTION 5 ===== h('5. 第四步:让 AI 设计网站架构', level=1) h('操作目标', level=2) p('让 Claude 规划网站的页面结构、导航、每个页面的内容。') h('具体步骤', level=2) p('复制以下提示词,一次性发送:') code('基于你对产品资料的学习和 GEO 研究,现在帮我规划完整的网站架构。\n\n请完成以下工作:\n1. 设计网站的页面地图(sitemap),列出所有页面\n2. 设计中英文双语的 URL 结构\n3. 规划每个页面的核心内容\n4. 列出所有需要做的 GEO 优化措施\n5. 把规划写入一个 ARCHITECTURE.md 文件\n\n输出格式要清晰,让我这个不懂技术的人也能看明白。') image_placeholder('Claude 输出的网站架构设计') # ===== SECTION 6 ===== h('6. 第五步:让 AI 编写网站', level=1) h('操作目标', level=2) p('让 Claude 自动生成整个网站的代码。') h('步骤 6.1:发送生成指令', level=2) p('复制以下提示词,确保一次性完整发送:') code('现在请开始实际的网站搭建。\n\n要求:\n1. 使用 Astro 框架\n2. 支持中英文双语(/zh/ 和 /en/)\n3. 包含完整的 GEO 优化(结构化数据、hreflang、FAQ schema 等)\n4. 创建一个 website 目录存放所有代码\n5. 所有代码一次性生成,确保完整可运行\n\n请在开始前先创建任务清单,然后逐步执行每个任务,\n直到网站可以正常构建和预览。') image_placeholder('粘贴网站生成提示词') h('步骤 6.2:等待代码生成', level=2) p('Claude 会自动完成:创建项目结构、编写所有页面、配置 SEO/GEO 优化、设置中英文双语、自动安装依赖包、构建并启动网站。约需 10-20 分钟。') image_placeholder('Claude 正在生成代码的进度显示') h('步骤 6.3:网站生成完成', level=2) p('构建成功后会看到:') code('38 page(s) built in 2.32s\nComplete!') image_placeholder('构建成功的输出信息') # ===== SECTION 7 ===== h('7. 第六步:检查网站效果', level=1) h('操作目标', level=2) p('在浏览器中查看生成的网站。') h('步骤 7.1:让 Claude 打开浏览器', level=2) code('帮我用浏览器打开网站首页看看效果') image_placeholder('浏览器中打开的网站首页') h('步骤 7.2:检查清单', level=2) tbl(['检查项', '正常标准', '✅/❌'], [ ['页面排版', '文字、图片排列整齐,无重叠', ''], ['导航菜单', '能正常展开,链接可点击', ''], ['语言切换', '点"EN"能切换到英文版', ''], ['手机显示', '手机浏览器中正常显示', ''], ['页面加载速度', '2 秒内打开', ''], ]) # ===== SECTION 8 ===== h('8. 第七步:发现样式问题并修复', level=1) p('这是本次实战中实际遇到的问题,供你参考。') h('问题描述', level=2) p('网站打开后只有文字,排版完全乱了。') image_placeholder('排版错乱的网站') h('原因分析', level=2) p('Claude 使用的技术方案中引用了海外 CDN 资源(Google Fonts、Partytown 等),国内网络无法访问。') h('修复步骤', level=2) p('直接复制以下提示词给 Claude:') code('网页打开后排版是乱的,只有文字没有样式。\n请你检查是否引用了海外 CDN 资源(如 Google Fonts、Partytown 等),\n把这些都替换为国内可用的替代方案或完全移除。\n修复后重新构建并打开浏览器给我看。\n\n另外,请建立一条规则记住:以后在国内网络环境下做项目,\n禁止使用任何海外 CDN 资源。') image_placeholder('粘贴修复提示词') p('Claude 会自动:') p('1. 切换到 Tailwind CSS v3(国内稳定版本)', indent=True) p('2. 移除 Partytown 组件', indent=True) p('3. 移除 Google Fonts 引用', indent=True) p('4. 重新安装依赖并构建', indent=True) p('5. 建立持久化规则,以后不会再犯', indent=True) image_placeholder('修复后排版正常的网站') # ===== SECTION 9 ===== h('9. 第八步:部署上线(可选)', level=1) h('操作目标', level=2) p('将网站发布到互联网上,让所有人都能访问。') h('推荐方案', level=2) tbl(['平台', '费用', '适合人群', '操作难度'], [ ['Vercel', '免费额度够用', '所有人', '⭐ 最简单'], ['Cloudflare Pages', '免费', '有小技术基础', '⭐⭐'], ['GitHub Pages', '免费', '有 GitHub 账号', '⭐⭐'], ]) h('使用 Vercel 部署(推荐新手)', level=2) code('帮我把这个网站部署到 Vercel 上。') p('Claude 会引导你完成:注册 Vercel 账号、安装 Vercel CLI、一键部署。') h('绑定自己的域名', level=2) code('网站部署好了,我想绑定自己的域名 www.我的公司.com,\n请告诉我怎么做?') # ===== SECTION 10 ===== h('10. 常见问题排查', level=1) h('Q1:生成的代码有错误,网站打不开', level=2) code('构建时报错了,错误信息如下:\n[粘贴错误信息]\n请帮我修复。') h('Q2:网站内容需要修改', level=2) code('请把首页的标题从"XX"改为"YY",并添加一段关于我们新产品的介绍。') h('Q3:想增加新的页面', level=2) code('请帮我在网站上增加一个"客户案例"页面,列出以下 3 个案例:\n1. [案例1名称]:[简述]\n2. [案例2名称]:[简述]\n3. [案例3名称]:[简述]') h('Q4:想让网站更好看', level=2) code('首页的配色太单调了,能否换成更现代的风格?\n主题色改为蓝色系 (#2563eb),搭配紫色点缀。') h('Q5:Claude 操作到一半停了', level=2) code('继续刚才未完成的工作。') # ===== APPENDIX A ===== page_break() h('附录 A:给 AI 的完整提示词合集', level=1) p('使用时,将 [方括号] 中的内容替换为你的实际信息。') h('A.1 产品学习提示词', level=2) code('请读取我放在 [文件夹路径] 目录下的所有 PPT 文件,\n深度理解我们的产品定位、品牌理念、核心功能、目标客户和竞争优势。\n然后帮我总结产品的核心定位、解决的痛点、核心功能和目标客户。') h('A.2 GEO 研究提示词', level=2) code('请搜索 GEO 的最佳实践。\n然后基于你对我们产品的理解:\n1. 梳理目标用户可能会搜索的内容和问题\n2. 建立一个问题库\n3. 整理关键词列表\n4. 制定完整的内容策略') h('A.3 网站架构设计提示词', level=2) code('基于产品学习和GEO研究,帮我规划完整的网站架构:\n1. 网站页面地图(sitemap)\n2. 中英文双语URL结构\n3. 每个页面的核心内容\n4. GEO优化措施清单') h('A.4 网站生成提示词', level=2) code('请使用 Astro 框架,帮我创建一个完整的产品官网。\n要求:\n- 支持中英文双语(/zh/ 和 /en/)\n- 包含完整的GEO优化\n- 所有代码放在 website 目录下\n- 确保在国内网络环境下所有资源可用\n- 完成后自动构建并用浏览器打开') h('A.5 样式修复提示词', level=2) code('网页排版乱了,请检查是否有海外CDN依赖并修复。\n以后在国内环境做项目,禁止使用海外CDN资源。') h('A.6 内容修改提示词', level=2) code('请修改 [页面名称] 页面的以下内容:\n- [修改项1]\n- [修改项2]') # ===== APPENDIX B ===== page_break() h('附录 B:我们的实战案例复盘', level=1) h('B.1 任务全景', level=2) tbl(['阶段', '输入', '输出', '耗时'], [ ['产品学习', '2 个 PPTX 文件(共 58 页)', '产品理解摘要', '~3 分钟'], ['SEO 研究', '"搜索 GEO 最佳实践"', 'GEO 优化方案 + 问题库', '~5 分钟'], ['架构设计', '"设计网站架构"', '完整网站地图 + URL 结构', '~5 分钟'], ['代码生成', '"使用 Astro 框架搭建"', '38 个页面 + 全部配置', '~15 分钟'], ['样式修复', '"页面排版乱了"', '切换到 Tailwind v3 方案', '~5 分钟'], ['总计', '', '', '~35 分钟'], ]) h('B.2 产出统计', level=2) tbl(['指标', '数值'], [ ['页面总数', '38 个(中英双语)'], ['代码文件', '40+ 个'], ['博客文章', '3 篇 GEO 优化文章'], ['FAQ 条目', '10 个(含结构化数据)'], ['术语定义', '13 个(中英双语)'], ['SEO Schema 类型', '6 种'], ['支持语言', '中文 + 英文'], ]) h('B.3 人机分工', level=2) tbl(['人类做的事', 'AI 做的事'], [ ['提供产品 PPT 资料', '读取和分析 PPT'], ['审核 AI 理解和方案', '搜索 SEO 最佳实践'], ['检查网站效果', '设计网站架构'], ['发现排版问题', '编写全部代码'], ['反馈问题给 AI', '自动修复技术问题'], ['', '构建和启动网站'], ]) # ===== APPENDIX C ===== page_break() h('附录 C:GEO 优化清单', level=1) p('以下是所有实施的 GEO 措施,可交给 AI 逐项检查。') h('C.1 结构化数据', level=2) p('✅ 网站首页:Organization schema(告诉 AI 这是哪家公司)') p('✅ FAQ 页面:FAQPage schema(让 AI 直接引用问答)') p('✅ 博客文章:TechArticle schema(标注作者、发布时间)') p('✅ 产品页面:SoftwareApplication schema(标注产品信息)') p('✅ 所有页面:BreadcrumbList schema(标注页面层级)') h('C.2 多语言 SEO', level=2) p('✅ hreflang 标签:告知搜索引擎中英文版本对应关系') p('✅ x-default 标签:指定默认语言版本') p('✅ 规范链接(canonical URL):避免重复内容问题') p('✅ 多语言站点地图(sitemap):列出所有语言版本') h('C.3 AI 爬虫友好', level=2) p('✅ llms.txt:专门给 AI 爬虫的站点说明文件') p('✅ robots.txt:明确允许 ChatGPT、Google AI 等爬虫访问') p('✅ 术语表页面:为专业术语提供权威定义') p('✅ 每篇博客标注"作者 + 发布时间"') h('C.4 内容策略', level=2) p('✅ 为核心概念建立专属页面') p('✅ FAQ 回答直接、权威、结构化') p('✅ 博客覆盖高频搜索问题') p('✅ 内容互联(文章之间互相引用链接)') # ===== APPENDIX D ===== page_break() h('附录 D:关键技术概念解释', level=1) p('以下内容面向非技术读者,用"白话"解释涉及的技术概念。', size=10, color=(0x94, 0xa3, 0xb8)) concepts = [ ('Astro 是什么?', '一个"静态网站生成器",能像搭积木一样把网站的各个部分拼在一起,最终输出为纯 HTML 文件,加载极快。', '传统的网站像"现场炒菜"——用户访问时服务器现做。Astro 像"预制菜"——提前做好,用户来了直接端上桌。'), ('Tailwind CSS 是什么?', '一个"样式工具箱",通过给 HTML 标签添加简短的类名来控制外观,不需要写 CSS 代码。', '传统写样式像"从零设计一套家具",Tailwind 像"宜家的标准化配件"——你只需要选择搭配。'), ('GEO 是什么?', 'Generative Engine Optimization,生成式引擎优化。让你的内容被 ChatGPT、豆包等 AI 在回答中引用和推荐。', '传统 SEO 像在图书馆卡片目录中排名靠前;GEO 像是让你的书成为图书馆员回答问题时必引用的参考书。'), ('JSON-LD 是什么?', '在网页中嵌入"机器可读的标签",告诉搜索引擎和 AI"这段文字是 FAQ 问答"、"这个页面是产品介绍"。', '就像超市货架上商品的条形码——人类看包装就知道是什么,但扫码器需要条形码。JSON-LD 就是给 AI 的"条形码"。'), ('hreflang 是什么?', '告诉搜索引擎"这个页面有中文版和英文版,中文版在这里,英文版在那里",避免被当作重复内容。', '就像一本书有中英文两个版本,封面标注"中文版"和"English Edition",读者不会困惑。'), ('i18n 是什么?', 'Internationalization(国际化)的缩写——i 和 n 之间有 18 个字母。指让网站支持多种语言。', ''), ] for name, explanation, analogy in concepts: h(name, level=2) p(f'一句话解释:{explanation}') if analogy: p(f'类比:{analogy}', size=10, color=(0x64, 0x74, 0x8b)) # ===== CONCLUSION ===== page_break() h('总结', level=1) p('你现在拥有了一套完整的方法:') steps = [ '准备好产品 PPT → 放到文件夹', '打开 Claude Code → 粘贴本手册的提示词', '审核 AI 输出 → 必要时反馈调整', '获得成品网站 → 浏览器直接看效果', ] for i, step in enumerate(steps, 1): p(f'{i}. {step}', indent=True) h('最重要的原则', level=2) p('✅ 提示词要完整清晰,一次性说清楚需求') p('✅ 每一步确认 AI 理解正确再继续') p('✅ 遇到问题直接反馈,AI 会自己修复') p('✅ 让 AI 建立规则,下次不再犯同类错误') doc.add_paragraph() doc.add_paragraph() footer_para = doc.add_paragraph() footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER footer_run = footer_para.add_run('— 手册结束 —') footer_run.font.size = Pt(10) footer_run.font.color.rgb = RGBColor(0x94, 0xa3, 0xb8) footer_run.font.name = '微软雅黑' doc.add_paragraph() version_para = doc.add_paragraph() version_para.alignment = WD_ALIGN_PARAGRAPH.CENTER vr = version_para.add_run('v1.0 · 2026年5月 · 基于未来飞马(Fmode)产品官网实战编写') vr.font.size = Pt(9) vr.font.color.rgb = RGBColor(0x94, 0xa3, 0xb8) vr.font.name = '微软雅黑' # Save output_path = 'd:/workspace/temp/newp/产品独立站搭建手册-Claude版.docx' doc.save(output_path) print(f'✅ DOCX saved to: {output_path}') if __name__ == '__main__': create_manual()