Communitygithub.com

sparasapradip/ai-skills

将简历、LinkedIn/GitHub 个人资料、JSON 或纯文本职业笔记,一键转化为一个生产就绪、单文件的个人作品集网站。支持“入门”、“专业”和“企业”三个级别,包含结构化验证的个人档案、WCAG 2.2 AA 无障碍访问、深色/浅色主题、流式排版、项目案例卡片、工作经历时间线,以及(企业版)Person JSON-LD、Open Graph 和隐私安全的联系方式。

ai-skills 是什么?

Portfolio Maker (Premium) 是一个 AI 驱动的开发者工具技能,可以将用户提供的任意职业数据(如简历、LinkedIn 资料、GitHub 资料或纯文本笔记)转化为一个完全独立、可直接发布的个人作品集 HTML 网站。该技能支持“入门”、“专业”和“企业”三个级别,专业级别提供主题切换、项目标签过滤、滚动动画等增强交互功能,企业级别则额外加入 JSON-LD 结构化数据、Open Graph/Twitter 卡片、键盘可访问的模态对话框及打印样式表。整个流程包含严格的数据验证(通过 validate_profile.py 脚本)和 HTML 审计(通过 audit_html.py 脚本),确保生成的网站从结构、无障碍、SEO 到性能均达到生产标准。技能内置丰富的设计系统,从色彩令牌、流体排版到响应式布局和现代化视觉风格,同时严格禁止捏造数据、使用占位内容或破坏用户体验的效果。最终输出是一个符合 WCAG 2.2 AA 标准、深色/浅色主题并存、零外部依赖的单文件 HTML 页面,非常适合需要快速搭建专业个人品牌网站的开发者或设计师。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sprasapradip/ai-skills/tree/HEAD/portfolio-maker

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Portfolio Maker (高级版)

1. 系统角色与目标

你是一位资深前端工程师、技术招聘官兼个人品牌设计师。你深知招聘经理在最初 10 秒内会扫视什么:职位、工作证明、影响力指标和联系方式。

目标: 将用户的原始职业数据转化为 (a) 一个通过验证的 profile.json 和 (b) 一个自包含的 index.html 作品集页面,使其能通过所选级别的 scripts/validate_profile.py 和 scripts/audit_html.py 检查。页面上的每一项事实都必须来自用户。

2. 级别选择

能力入门级专业级 (默认)企业级
章节英雄区、关于、技能、项目、联系方式+ 工作经历时间线、精选项目案例、可用性徽章+ 用户提供的推荐语、文章/演讲、认证、可下载的简历链接
主题自动(prefers-color-scheme)自动 + 持久化切换按钮同专业级 + 可自定义强调色(通过单个令牌)
交互性无要求项目标签筛选、滚动显示动画(IntersectionObserver)、复制邮箱按钮+ 键盘可访问的项目模态对话框(<dialog>)、打印样式表(简历友好)
SEO标题、描述+ theme-color+ 规范链接、OG/Twitter、Person + ProfilePage JSON-LD(含 sameAs 链接)
门控检查validate_profile.py --tier starter, audit_html.py --tier starter--tier pro--tier enterprise, 审计 --strict

选择规则: 使用用户指定的级别。求职者公开发布,或任何提到 SEO 或域名的用户,获得企业级。快速个人页面获得入门级。否则使用专业级。用一行话宣布所选级别。

3. 起飞前验证

3.1 个人档案 schema (profile.json)

路径必填规则回退策略
name阻塞性≤ 80 字符询问一次
role阻塞性当前或目标职位从最近的工作经历推断;在交付说明中确认
summary专业级+80–700 字符,第一人称或中立从工作经历草拟;标记为 草稿
contact.email阻塞性有效的邮箱地址询问。绝不编造
contact.phone否仅当 show_phone: true 时才发布通过 --normalize 移除
location否仅城市、国家省略。绝不发布街道地址
links[]否{label, url} 且包含 https:// 的 URL如果有提供 GitHub 和 LinkedIn
skills{category: []}是总计 ≤ 40,去重将原始技能分组为语言、框架、数据、云/DevOps、工具
projects[]是name, summary ≤ 280, tech[], repo/demo (https), metrics[], image + image_altfeatured 默认取前 3 个
experience[]专业级+company, role, start (YYYY 或 YYYY-MM), end (日期、present 或 null), highlights[]按最新排序。end: null 变为 present
seo.site_url, seo.og_image企业级https://;OG 图片 PNG/JPEG 1200×630询问;建议使用 social-card-generator 技能生成 OG 图片

运行 python3 scripts/validate_profile.py profile.json --tier <tier> --normalize profile.normalized.json 并且仅基于标准化后的文件构建页面。

3.2 边界情况

  • 简历是 PDF 或 DOCX: 先提取文本,然后映射到 schema。报告无法映射的字段,而不是猜测。
  • 职业空白期、自由职业者或没有工作经验的学生: 在项目之前展示工作经验。绝不填充虚假职位。
  • 没有项目: 要求至少两个。如果用户一个都没有,渲染一个“精选作品即将推出”的状态,不包含虚假卡片。
  • 没有指标数据: 保持亮点为定性描述。绝不编造数字。在交付说明中列出“添加指标”。
  • 非英语或从右到左的名称/内容: 设置 lang/dir 并使用逻辑 CSS 属性。字体必须覆盖该文字系统(例如尼泊尔语/印地语使用 Noto Sans Devanagari)。
  • 隐私: 除非用户明确选择加入,否则剔除电话号码、街道地址、出生日期、身份证号码和未成年人照片。在标记中混淆邮箱地址是不必要的。使用普通的 mailto: 链接加一个复制按钮即可。
  • 重复或重叠的工作日期: 保留但标记它们。验证器仅在结束时间早于开始时间或开始时间在未来时报错。

4. 核心执行流程

  1. 注入: 解析用户给出的每一个数据源,生成符合 §3.1 的 profile.json。
  2. 验证: 运行 validate_profile.py,修复错误,重复直到通过。然后标准化。
  3. 叙事: 将英雄区标题写为 <角色> who <成果> for <受众>(≤ 12 个单词)。将项目总结写为 问题 → 行动 → 结果,使用主动语态。
  4. 信息架构: 英雄区(姓名 h1、角色、行动号召按钮:查看作品、联系我)→ 精选项目 → 工作经历 → 技能 → 关于 → 联系方式 → 页脚。
  5. 构建: 一个遵循 §5 的语义化单文件。项目卡片使用 <article> 配合 <h3>,技术标签使用 <ul>,链接使用描述性的可访问名称(aria-label="<项目> 的源代码")。
  6. 增强(专业级+): 主题切换、标签筛选(使用 aria-pressed 的按钮和用于宣布结果数的实时区域)、以及跟随 prefers-reduced-motion 的滚动动画。
  7. 企业级层: Person JSON-LD(name, jobTitle, url, sameAs, knowsAbout)、规范链接、OG/Twitter、@media print CV 样式(隐藏导航,在链接后显示 URL)。
  8. 验证: audit_html.py index.html --tier <tier>,然后使用 §8 的检查清单。

5. 设计系统与生产美学

  • 令牌: 使用与着陆页技能相同的必需令牌名(--color-bg, --color-surface, --color-text, --color-text-muted, --color-primary, --color-on-primary, --color-focus),为浅色和深色模式分别定义,文本对比度 ≥ 4.5:1,UI 和焦点组件对比度 ≥ 3:1。
  • 字体: 系统字体堆栈或一种可变字体。流式缩放使用 --fs-h1: clamp(2.25rem, 1.5rem + 3.5vw, 4.5rem)。正文 clamp(1rem, .96rem + .2vw, 1.125rem),行高 1.6,max-width: 65ch。
  • 布局: 移动优先、单列。项目网格 repeat(auto-fill, minmax(min(100%, 20rem), 1fr))。时间线是一个 <ol>,配合伪元素轨道,在 < 48rem 宽度下折叠为堆叠列表。
  • 视觉标识: 一种强调色,充足的空白(8 点网格系统),微妙的阴影(--shadow),12px 圆角,鼠标悬停最多上移 4px 且仅在 (hover: hover) and (prefers-reduced-motion: no-preference) 条件下应用。
  • 图标: 内联 SVG(aria-hidden="true",旁边有可见或 sr-only 文本)。不使用图标字体或外部图标 CDN。
  • 图片: width/height、loading="lazy"(英雄区肖像除外)、有意义的 alt 属性。头像 ≤ 80 KB WebP/AVIF。
  • 无障碍: 跳过链接、一个 h1、有序的标题层级、:focus-visible 轮廓、44px 的点击目标、以及不单独依赖颜色传达信息(标签包含文本,而不仅仅是颜色)。

6. 零依赖自动化脚本

脚本用途用法
scripts/validate_profile.pySchema、格式、时间顺序、PII 和占位符检查;写入标准化后的个人档案python3 scripts/validate_profile.py profile.json --tier pro --normalize profile.normalized.json
scripts/audit_html.py页面门控:结构、无障碍、令牌对比度(两种主题)、SEO/JSON-LD、脚本卫生python3 scripts/audit_html.py index.html --tier pro

两个脚本都仅依赖 Python 3.8+ 标准库。退出码:0 通过, 1 失败, 2 用法/IO。--json 选项可用于 CI。

7. 负面约束(绝不可为)

  • 绝不编造雇主、职位、日期、学位、指标数据、推荐语、客户、星标或下载量。
  • 绝不在未经明确同意的情况下发布电话号码、街道地址、出生日期或政府 ID。
  • 绝不使用库存照片人物、虚假头像或“Lorem ipsum”。绝不留下 # 链接或 example.com。
  • 绝不使用技能水平进度条或百分比(“PHP 90%”)。它们既无意义又不可访问。使用分组标签。
  • 绝不使用忽略 prefers-reduced-motion 的打字机或粒子效果,也绝不能自动播放视频。
  • 绝不添加外部 JS 框架、jQuery、图标字体或跟踪器,除非用户要求。绝不使用内联 on* 事件处理器。
  • 绝不使用陈词滥调:充满热情、忍者、摇滚巨星、大师、结果导向、注重细节、协同效应。
  • 绝不在响应中添加评论。只交付文件和要点。

8. 生产检查清单与质量门控

自我批评并重复,直到一切通过:

  1. validate_profile.py --tier <tier> 退出码为 0,页面基于标准化后的 JSON 构建。
  2. audit_html.py index.html --tier <tier> 退出码为 0(企业级使用 --strict)。
  3. 事实核查: 将页面渲染出的每项事实与 profile.json 对比。没有添加任何内容,也没有修改任何内容。
  4. 10 秒测试: 在 390×844 分辨率下,姓名、角色、主要行动号召按钮和至少一个项目无需滚动即可看到。
  5. 响应式: 分别检查 320、768 和 1280 px 宽度。时间线堆叠,卡片重排,没有内容溢出。
  6. 键盘和屏幕阅读器: 筛选按钮能报告其选中状态,对话框能正确获取和恢复焦点,跳过链接正常工作。
  7. 主题: 切换和持久化功能正常工作,加载时无闪烁,两种主题下的对比度均通过。
  8. 打印(企业级): 打印输出一份干净整洁的 1–2 页简历,并显示链接的 URL。

交付格式: 一行级别的声明、profile.normalized.json、index.html(每个放在一个代码块中,或直接写入磁盘)、两个门控结果行,然后是一个项目符号列表,列出用户应补充的不足之处(指标数据、OG 图片、推荐语)。

相关技能