跳到正文
cccskills
免费在 GitHub 公开

devsync-portfolio

Create portfolios using Devsync template with automated CV, GitHub, LinkedIn, and academics generation

中文简介正在准备中。当前显示原文说明。

集成工具LinkedInGitHub
查看安装方法

包含的文件(1)

  • SKILL.md11.0 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Devsync Portfolio Creation Skill

Purpose

Create and maintain developer portfolios using the Devsync template system. This skill guides you through building portfolios where all content comes from DEVSYNC.json - never hardcode text in templates.

Core Principle: Zero Hardcoded Text

All UI text must use translations[lang]['key'] from @devsync/src/devsync/fields-translations.ts. Never write <h3>Projects</h3> - use <h3>{translations[lang]['Projects']}</h3>.

Template Framework

Templates are framework-agnostic. The developer chooses their own stack (Astro, Next.js, SvelteKit, Vue, vanilla HTML, etc.).

When generating a template, always ask:

  • Which framework?

Infer multilingual support directly unless user specifies otherwise.

DEVSYNC.json Structure

Global Fields (required, language-agnostic)

{
	"defaultLang": "en",
	"site": "https://your-site.com",
	"name": "Your Name",
	"img": "https://image-url.com/photo.jpg",
	"socialMedia": [{ "name": "LinkedIn", "url": "...", "icon": "...", "mdBadge": "..." }],
	"githubUserName": "your-username"
}

DEVSYNC.json Example

{
	"defaultLang": "en",
	"site": "https://devsync.work",
	"name": "Your Full Name",
	"img": "https://your-image-url.com/your-image.jpg",
	"socialMedia": [
		{
			"name": "LinkedIn",
			"url": "https://www.linkedin.com/in/your-linkedin-handle",
			"icon": "/icons/linkedin.svg",
			"mdBadge": "![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?logo=linkedin&logoColor=white)"
		}
	],
	"githubUserName": "your-github-username",
	"en": {
		"description": "Write a short professional summary about yourself. Example: Full-stack developer focused on developer experience, performance, and product quality.",
		"jobTitle": "Your Current Job Title",
		"status": {
			"status": "your-status",
			"badge": "![Status](https://img.shields.io/badge/Status-Your%20Status-blue)"
		},
		"languages": [
			{
				"name": "Your Language 1 / Your Language 2",
				"mdBadge": "![Languages](https://img.shields.io/badge/Languages-Your%20Languages-1f6feb)",
				"icon": "https://cdn.simpleicons.org/googletranslate"
			}
		],
		"experience": [
			{
				"company": "Your Company Name",
				"position": "Your Position Title",
				"img": "https://your-image-url.com/company-image.jpg",
				"web": "https://your-company-website.com",
				"description": "Describe your role and impact in one concise sentence.",
				"date": "MM/YY - Present",
				"links": [
					{
						"name": "Company Website",
						"url": "https://your-company-website.com",
						"mdBadge": "![Company](https://img.shields.io/badge/Company-Website-0ea5e9)",
						"icon": "https://cdn.simpleicons.org/googlechrome"
					}
				],
				"list": {
					"title": "key-achievements",
					"items": [
						{
							"highlight": "Achievement headline",
							"description": "Describe one measurable result you delivered (performance, revenue, growth, reliability, etc.)."
						}
					]
				},
				"skills": [
					{
						"name": "Your Key Skill",
						"mdBadge": "![Skill](https://img.shields.io/badge/Skill-Your%20Skill-339933)",
						"icon": "https://cdn.simpleicons.org/codeforces"
					}
				]
			}
		],
		"projects": [
			{
				"name": "Your Project Name",
				"img": "https://your-image-url.com/project-image.jpg",
				"web": "https://your-project-url.com",
				"links": [
					{
						"name": "GitHub",
						"url": "https://github.com/your-github-username/your-project-repo",
						"mdBadge": "![GitHub Repo](https://img.shields.io/badge/Repo-GitHub-181717?logo=github&logoColor=white)",
						"icon": "/icons/github.svg"
					}
				],
				"description": "Describe what the project does and why it matters.",
				"list": {
					"title": "project-highlights",
					"items": [
						{
							"highlight": "Technical highlight",
							"description": "Describe one concrete technical decision or outcome from this project."
						}
					]
				},
				"skills": [
					{
						"name": "Project Skill",
						"mdBadge": "![Skill](https://img.shields.io/badge/Skill-Project%20Skill-61DAFB)",
						"icon": "https://cdn.simpleicons.org/git"
					}
				]
			}
		],
		"education": [
			{
				"name": "Your University or Institution",
				"degree": "Your Degree / Program",
				"img": "https://your-image-url.com/education-image.jpg",
				"date": "MM/YY - MM/YY",
				"links": [
					{
						"name": "Program URL",
						"url": "https://your-program-link.com",
						"mdBadge": "![Program](https://img.shields.io/badge/Program-Details-b45309)",
						"icon": "https://cdn.simpleicons.org/googlechrome"
					}
				],
				"list": {
					"title": "education-highlights",
					"items": [
						{
							"highlight": "Academic highlight",
							"description": "Describe a relevant course, thesis, capstone, or achievement."
						}
					]
				}
			}
		],
		"certifications": [
			{
				"name": "Your Certification Name",
				"url": "https://your-certification-url.com",
				"list": {
					"title": "what-this-validates",
					"items": [
						{
							"highlight": "Validated area",
							"description": "Describe what this certification validates for your profile."
						}
					]
				},
				"skills": [
					{
						"name": "Certification Skill",
						"mdBadge": "![Certification Skill](https://img.shields.io/badge/Skill-Certification-232F3E)",
						"icon": "https://cdn.simpleicons.org/coursera"
					}
				]
			}
		]
	}
}

Key flexibility: Any section can be omitted - if experience is missing, it simply won't appear in CV. Portfolio can add custom fields beyond CV requirements.

package.json Configuration

{
	"devsync": {
		"pathToCompiledCV": "src/[lang]/cv.html"
	}
}

Important: [lang] is a placeholder. The devsync build command iterates through available languages and replaces [lang] with each language code. If your portfolio is monolingual, the replacement still occurs but only one iteration happens.

How 'devsync build' Works

The CLI command (bunx devsync build) executes:

  1. Installs dependencies → bun install
  2. Builds project → bun run build
  3. Extract languages → Reads DEVSYNC.json, filters out global fields to get language codes
  4. For each language:
    • Builds CV HTML → Gets path from package.json, replaces [lang], fetches HTML, generates PDF
    • Creates LinkedIn markdown → Generates linkedin-{lang}.md with professional summary
  5. **Once **(using defaultLang):
    • Creates GitHub README → Combines experience + projects into README.md
    • Creates academics file → Education + certifications in academics/README.md

Translation System

Current Keys (fields-translations.ts)

Available in 8 languages (en, es, fr, pt, de, zh, ja, ko):

  • Description, jobTitle, Status, Languages
  • Professional Experience, Projects, Education, Certifications
  • Core Skills, credential, academics
  • View Certificate, Selected projects, Let's connect, Github Profile, I am, Links

Extensible: Add new keys as needed for portfolio-specific UI text.

Adding New Translation Keys

When a template needs UI text not covered by existing keys, add it to src/devsync/fields-translations.ts in all 8 languages:

  1. Identify the key name — use a descriptive English string (e.g. 'Open to work')
  2. Add to every language block:
// fields-translations.ts
export const translations = {
	en: {
		// ... existing keys
		'Open to work': 'Open to work', // ← add here
	},
	es: {
		// ... existing keys
		'Open to work': 'Disponible para trabajar',
	},
	fr: {
		'Open to work': 'Disponible',
	},
	// ... repeat for pt, de, zh, ja, ko
} as const
  1. Use in template via translations[lang]['Open to work']

Never use the key string as literal UI text — always go through translations[lang]. Missing a language will cause a TypeScript type error, which is the intended safety net.

GitHub Actions Automation

.github/workflows/update-on-devsync-change.yml triggers on DEVSYNC.json pushes:

- run: bunx devsync build # Updates CV, README, LinkedIn, academics
- uses: git-auto-commit-action # Commits changes

Validation

  1. Test build: Run bunx devsync build to generate artifacts
  2. Verify outputs:
    • cv/{lang}.pdf - PDF CV
    • README.md - GitHub profile
    • linkedin/{lang}.md - LinkedIn copy
    • academics/README.md - Academic history

Validation Schema

Zod schema in src/devsync/devsync-validator.ts validates:

  • Required fields per section
  • Array structures (links, skills, list items)
  • Type safety for all DEVSYNC.json entries

Use parseDevsync(devsync) from @devsync/src/devsync/devsync.ts for validation.

Available Exports (devsync.ts)

import devsync, { languages, defaultLang, parseDevsync } from '@devsync/src/devsync/devsync'

Template Folder Structure

Required structure for a Devsync portfolio template:

your-template/
├── public/
│   ├── poster-light-mode.webp    # Light theme preview (600x315px)
│   ├── poster-dark-mode.webp     # Dark theme preview (600x315px)
│   └── icons/                    # Optional custom icons (linkedin.svg, github.svg, etc.)
├── src/
│   └── devsync/                  # Copy from @devsync/src/devsync/
│       ├── devsync.ts
│       ├── devsync-validator.ts
│       └── fields-translations.ts
├── .github/
│   └── workflows/
│       └── update-on-devsync-change.yml
├── DEVSYNC.json
└── package.json

Required files:

  • public/poster-*.webp - Preview images for template gallery
  • src/devsync/ - Core Devsync modules for translations and validation
  • .github/workflows/update-on-devsync-change.yml - Auto-update workflow
  • DEVSYNC.json - Configuration template
  • package.json - With devsync.pathToCompiledCV and devsync.poster config

Optional:

  • public/icons/ - Custom icon SVGs referenced in socialMedia[].icon and links[].icon

Publishing Templates

When publishing your Devsync template, include poster images for preview:

{
	"name": "@your-username/devsync-template",
	"devsync": {
		"pathToCompiledCV": "src/[lang]/cv.html"
	}
}

Poster images (required for template preview):

  • public/poster-light-mode.webp - Light theme preview (recommended: 600x315px)
  • public/poster-dark-mode.webp - Dark theme preview (recommended: 600x315px)

If posters are not provided, the default Devsync posters will be shown.

Best Practices

  1. Never hardcode - Always use translation keys
  2. Optional sections - Omit experience/projects/education if not needed
  3. Badge consistency - Use shields.io for consistent badge styling
  4. Icon paths - Use /icons/ for local, CDN URLs for external
  5. Date format - Use MM/YY - Present or MM/YY - MM/YY
  6. Skills reuse - Same skill can appear across experience, projects, certifications
  7. Template publishing - Include both poster images for gallery preview

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Audit and improve web accessibility following WCAG 2.2 guidelines. Use when asked to "improve accessibility", "a11y audit", "WCAG compliance", "screen reader support", "keyboard navigation", or "make accessible".

中文简介正在准备中。当前显示原文说明。

Jannael/Devsync132026年8月11日 更新

astro

免费

Skill for building with the Astro web framework. Helps create Astro components and pages, configure SSR adapters, set up content collections, deploy static sites, and manage project structure and CLI commands. Use when the user needs to work with Astro, mentions .astro files, asks about static site generation (SSG), islands architecture, content collections, or deploying an Astro project.

中文简介正在准备中。当前显示原文说明。

Jannael/Devsync132026年8月11日 更新

bun

免费

Use when building, testing, and deploying JavaScript/TypeScript applications. Reach for Bun when you need to run scripts, manage dependencies, bundle code, or test applications with a single unified tool.

中文简介正在准备中。当前显示原文说明。

Jannael/Devsync132026年8月11日 更新

caveman

免费

Ultra-compressed communication mode. Cuts token usage ~75% by speaking like caveman while keeping full technical accuracy. Supports intensity levels: lite, full (default), ultra, wenyan-lite, wenyan-full, wenyan-ultra. Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens", "be brief", or invokes /caveman. Also auto-triggers when token efficiency is requested.

中文简介正在准备中。当前显示原文说明。

Jannael/Devsync132026年8月11日 更新

Ultra-compressed commit message generator. Cuts noise from commit messages while preserving intent and reasoning. Conventional Commits format. Subject ≤50 chars, body only when "why" isn't obvious. Use when user says "write a commit", "commit message", "generate commit", "/commit", or invokes /caveman-commit. Auto-triggers when staging changes.

中文简介正在准备中。当前显示原文说明。

Jannael/Devsync132026年8月11日 更新

Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: /caveman:compress <filepath> or "compress memory file"

中文简介正在准备中。当前显示原文说明。

Jannael/Devsync132026年8月11日 更新

查看 Jannael 的全部技能

报告此技能的问题