미리디 미리캔버스는 2,000만 고객의 디자인·템플릿 사용 데이터를 가진 플랫폼이라, 의도에 맞는 템플릿·문구를 추천하는 이 도구는 미리캔버스의 실제 템플릿 사용 데이터가 있어야 추천을 검증한다.
'디자인 지식 없어도 템플릿·요소로 작품 제작'. 의도 기반 추천이 그 쉬움을 한 단계 더 높임.
'2,000만 고객'. 템플릿 사용 데이터로 추천 근거를 만들 수 있는 규모.
'AI 고도화·해외 현지화'. 다국어 카피 제안이 글로벌 확장의 1주 단위.
사용자 의도(키워드·용도·톤)를 받아 태그·사용 데이터로 맞는 템플릿을 추천하고, 문구 카피를 근거와 함께 제안하는 1주 포트폴리오.
미리디 PE. 사용자가 템플릿을 일일이 뒤지던 탐색을, 의도 기반 추천 + 카피 제안 도구로 옮기고 싶은 사람.
템플릿에 태그·사용 데이터를 붙이면, 도구가 (a) 사용자 의도에 맞는 템플릿을 근거와 함께 추천하고 (b) 용도에 맞는 카피를 제안한다.
사용자 의도를 받아 태그·사용 데이터로 맞는 템플릿을 추천하고 문구 카피를 근거와 함께 제안하는 동작하는 도구.
추천 템플릿의 클릭/사용 전환으로 적합도를 재고, 카피 품질을 보여주는 대시보드.
용도별 카피를 다국어로 확장해 글로벌 사용자에게 맞추는 단계.
의도를 넣으면 맞는 템플릿과 카피가 근거와 함께 몇 초 안에 나오는 걸 시연한다
추천 근거로 인용한 태그가 실제 템플릿에 존재하는 비율 100%
측정: 태그 일치 규칙, 표본: 추천 200건
일부러 만든 결측·미등록 템플릿 30종을 넣어도 추천이 멈추지 않고 처리되는 걸 시연한다
위 수치는 더미데이터 자가채점이며, 실제 추천 적합도는 미리디 실데이터 + 실 검수자가 있어야 측정 가능. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만든다.
이건 고객·실데이터 없이 혼자 만든 포트폴리오라 모든 수치는 합성 데이터 자가채점이다. 면접에서 '데모 동작 + 실검증 준비 상태'로 솔직히 설명하는 게 오히려 신뢰를 준다
정답을 내가 만들었으니 잘 맞는 게 당연. 그래서 결측·경계·미등록·표기 흔들림 케이스를 더미에 일부러 섞어 쉬운 문제만 푸는 게 아님을 보여준다
인기 편향: 사용 많은 템플릿이 과대 추천될 수 있어 use_count 보정·신규 노출 규칙을 둔다
실제 도입 시 달라지는 것: 실 템플릿 분포·언어가 더미와 다르므로 태그 체계·매칭을 실데이터로 맞춰야 한다(도입 단계 과제)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
디자인 템플릿 태그·사용 데이터를 묶어 의도 매칭 추천 입력으로 쓴다
| template_id | title_raw | template_key | tags | use_count | rating | lang |
|---|---|---|---|---|---|---|
| T900 | 세일포스터(구버전) | — | [] | 0 | — | ko |
| T901 | 템플릿0 | tpl_0 | ["청첩장"] | 0 | — | ko |
| T902 | 인기만점 | tpl_2 | ["포스터"] | 99,999 | 5 | en |
| T903 | 미등록템플릿 | — | ["배너"] | 50 | 2 | ja |
| T000 | 템플릿0 | tpl_0 | ["포스터"] | 100 | 3.5 | ko |
z.object({ template_id: z.string(), title_raw: z.string(), template_key: z.string().nullable(), tags: z.array(z.string()), use_count: z.number(), rating: z.number().nullable(), lang: z.string() }). 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: rating null/tags 빈 배열(미분류), use_count 0(신규)·극단, template_key null 미등록, title_raw 표기 흔들림(구버전/별칭), lang 비지원(ja). 형식 깨뜨리기 시도 3건도 별도로.z.object({ template_id: z.string(), title_raw: z.string(), template_key: z.string().nullable(), tags: z.array(z.string()), use_count: z.number(), rating: z.number().nullable(), lang: z.string() })| TypeScript | 추천 렌더 + Zod 런타임 검증 |
| React | 추천·카피 UI |
| Next.js | 추천 도구 앱 셸 |
| PostgreSQL | 템플릿 메타 단일 진실원 + 사용 집계 뷰 |
| Docker | 추천 서비스 컨테이너 배포 |
| LLM | 의도 매칭 설명 + 카피 생성 |
✓ pass → 그대로 멈춰도 완성품. 더 키우려면 2주차(추천 적합도 검증)로.
✓ pass → 여기서 멈춰도 완결. 더 키우려면 3주차(다국어 카피 확장)로.
템플릿 추천 + 카피
z.object({ template_id: z.string(), score: z.number(), matched_tags: z.array(z.string()), copy: z.string(), note: z.string() })[
{
"template_id": "T001",
"score": 0.83,
"matched_tags": [
"이벤트",
"심플"
],
"copy": "여름 세일, 지금 시작!",
"note": ""
},
{
"template_id": "T901",
"score": 0.4,
"matched_tags": [
"청첩장"
],
"copy": "두 사람의 시작을 알립니다",
"note": "신규. 사용 데이터 부족"
},
{
"template_id": "T900",
"score": 0.2,
"matched_tags": [],
"copy": "-",
"note": "태그 결측. 확인 필요"
}
]matched_tags 가 실제 템플릿에 존재하는지는 자동 검증, copy 품질은 사람/judge 검증.