AD

add-portfolio-entry

A utility for updating your portfolio website data, including projects, job experience, and associated images.

Install

mkdir -p .claude/skills/add-portfolio-entry && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/15858" && unzip -o skill.zip -d .claude/skills/add-portfolio-entry && rm skill.zip

Installs to .claude/skills/add-portfolio-entry

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Add new project experience or work experience with images to the portfolio website. Use when: adding a project to the Projects tab, adding a new job/company to the Experience tab, updating achievements for an existing role, or adding project screenshots/images. Triggers: "add project", "add experience", "새 프로젝트 추가", "경력 추가", "포트폴리오 업데이트".
340 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Intermediate

Key capabilities

  • Add a new project card to the Projects tab
  • Add a new company/role to the Experience tab
  • Add or replace project screenshot images
  • Update achievements or technologies for an existing experience
  • Register project image paths in `data/portfolio.ts`

How it works

This skill adds new project or work experience entries to a portfolio website by placing image files, registering image paths, adding localized text to dictionary files, and registering the entry in the display component. It ensures data consistency across multiple files.

Inputs & outputs

You give it
Project name or company name to add (e.g., 'Observability Platform')
You get back
An updated portfolio website with the new project or work experience entry

When to use add-portfolio-entry

  • Add a new project card
  • Add a new company role to experience
  • Update achievements for existing roles
  • Add new project screenshot images

About this skill

Add Portfolio Entry

When to Use

  • Adding a new project card to the Projects tab
  • Adding a new company/role to the Experience tab
  • Adding or replacing project screenshot images
  • Updating achievements or technologies for an existing experience

Key Files

PurposeFile
Skill & experience datadata/portfolio.ts
Project image pathsdata/portfolio.tsprojectImages object
Project text (KO)app/[locale]/dictionaries/ko.jsonprojects.<key>
Project text (EN)app/[locale]/dictionaries/en.jsonprojects.<key>
Project text (ZH)app/[locale]/dictionaries/zh.jsonprojects.<key>
Projects list componentcomponents/portfolio/projects-content.tsx
Image assetspublic/projects/<project-key>/

Procedure A — Add a New Project

1. Place image files

Copy screenshots to public/projects/<project-key>/ (e.g., public/projects/my-project/1.png).
Use lowercase-kebab-case for the folder name. Supported formats: .png, .jpg, .jpeg, .webp.

2. Register image paths in data/portfolio.ts

Add an entry to the projectImages object (keep as const):

projectImages = {
  // existing entries …
  myProject: ["/projects/my-project/1.png", "/projects/my-project/2.png"],
} as const;

3. Add Korean text to app/[locale]/dictionaries/ko.json

Insert under the "projects" object. content is a string array — each item renders as one bullet point:

"myProject": {
  "title": "프로젝트 제목",
  "subtitle": "한 줄 설명",
  "content": [
    "주요 성과 1",
    "주요 성과 2"
  ]
}

4. Add English text to en.json and Chinese to zh.json

Same structure. Keep the same key as step 3 (myProject).

5. Register project in components/portfolio/projects-content.tsx

Add an entry to the projects array inside useMemo:

{
  title: dict.projects.myProject.title,
  subtitle: dict.projects.myProject.subtitle,
  content: dict.projects.myProject.content,
  images: projectImages.myProject,
},

Insert at the desired display position (top = first, newer projects first).

6. Verify TypeScript & lint

Run in order:

pnpm typecheck   # catch missing dict keys or projectImages keys
pnpm lint        # ESLint auto-fix
pnpm build       # full Next.js build check

Procedure B — Add a New Work Experience

1. Add entry to experiences in data/portfolio.ts

The Experience interface requires company, position, period, description, achievements, and technologies. All text fields must have ko, en, zh locales:

{
  company: "회사명 (Company Name)",
  position: { ko: "직책", en: "Job Title", zh: "职位" },
  period: {
    ko: "YYYY년 MM월 – YYYY년 MM월 (N년 N개월)",
    en: "Mon YYYY – Mon YYYY (N years N months)",
    zh: "YYYY年M月 – YYYY年M月 (N年N个月)",
  },
  description: {
    ko: "한국어 회사/역할 설명 (2-3 문장)",
    en: "English company/role description (2-3 sentences)",
    zh: "中文公司/职位描述 (2-3句)",
  },
  achievements: {
    ko: ["성과 1", "성과 2"],
    en: ["Achievement 1", "Achievement 2"],
    zh: ["成就 1", "成就 2"],
  },
  technologies: ["Tech1", "Tech2", "Tech3"],
},

Insert at the top of the experiences array (most recent first).

2. Sync with dictionaries

Update all three language dictionaries for the new experience entry.

3. Verify

pnpm typecheck
pnpm lint
pnpm build

Checklist

  • Images placed under public/projects/<key>/
  • projectImages.<key> added to data/portfolio.ts
  • Dictionary entry added to all three locale JSON files (ko / en / zh)
  • Project registered in projects-content.tsx useMemo array
  • (Experience only) experiences array updated in data/portfolio.ts
  • pnpm typecheck passes
  • pnpm build passes

Common Pitfalls

  • Missing locale key: Adding to ko.json but forgetting en.json or zh.json causes a TypeScript error in getDictionary.
  • Image path typo: Paths are case-sensitive on Linux deployments. Match public/ folder name exactly.
  • as const removal: Removing as const from projectImages breaks readonly string[] types in ProjectImageSwiper.
  • Wrong array position: Experience entries are displayed in declaration order; newest role should be first.
  • onPress vs onClick: Any new HeroUI buttons in related components must use onPress, not onClick.

When not to use it

  • The task is to delete a project or experience entry
  • The task is to modify the portfolio website's layout or styling
  • The task is about database schema evolution without API surface impact

Limitations

  • Image paths are case-sensitive on Linux deployments
  • Removing `as const` from `projectImages` breaks `readonly string[]` types
  • Experience entries are displayed in declaration order; newest role should be first

How it compares

This workflow provides a structured procedure for updating portfolio content, including image management and multi-language text synchronization, which is more complete than manually editing individual files.

Compared to similar skills

add-portfolio-entry side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
add-portfolio-entry (this skill)04moReviewIntermediate
nextjs-developer3283moNo flagsAdvanced
shadcn-ui-setup378moReviewBeginner
landing-page-guide-v2489moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

Search skills

Search the agent skills registry