careermate 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/AGENTS.md +11 -7
  2. package/INSTALL.md +18 -16
  3. package/README.md +28 -26
  4. package/THIRD_PARTY_NOTICES.md +2 -3
  5. package/bin/careermate.mjs +8 -1
  6. package/dist/career-os/README.md +8 -3
  7. package/dist/career-os/eop/career-description.md +136 -0
  8. package/dist/career-os/eop/cover-letter.md +7 -5
  9. package/dist/career-os/eop/fit-analysis.md +15 -5
  10. package/dist/career-os/eop/interview-prep.md +209 -21
  11. package/dist/career-os/eop/job-analysis.md +5 -3
  12. package/dist/career-os/eop/profile-extraction.md +5 -4
  13. package/dist/career-os/knowledge/cover-letter.md +4 -4
  14. package/dist/career-os/knowledge/fit-matching.md +8 -8
  15. package/dist/career-os/knowledge/interview-behavioral.md +76 -8
  16. package/dist/career-os/knowledge/interview-technical.md +106 -4
  17. package/dist/career-os/knowledge/linkedin-profile.md +1 -1
  18. package/dist/career-os/knowledge/networking-referrals.md +1 -1
  19. package/dist/career-os/knowledge/offer-evaluation-decision.md +10 -10
  20. package/dist/career-os/knowledge/portfolio.md +3 -3
  21. package/dist/career-os/knowledge/verifiers/ats-compat.md +8 -4
  22. package/dist/career-os/knowledge/verifiers/human-voice.md +2 -2
  23. package/dist/career-os/knowledge/verifiers/recency-staleness.md +1 -1
  24. package/dist/career-os/knowledge/verifiers/responsiveness-on-target.md +2 -2
  25. package/dist/career-os/knowledge/verifiers/truthfulness.md +1 -1
  26. package/dist/doctor.mjs +1019 -127
  27. package/dist/mcp.mjs +1036 -126
  28. package/dist/migrate.mjs +52 -1
  29. package/dist/public/app.js +42 -16
  30. package/dist/public/i18n/en/applications.js +23 -0
  31. package/dist/public/i18n/en/common.js +22 -0
  32. package/dist/public/i18n/en/documents.js +133 -0
  33. package/dist/public/i18n/en/home.js +75 -0
  34. package/dist/public/i18n/en/interview.js +69 -0
  35. package/dist/public/i18n/en/jobs.js +152 -0
  36. package/dist/public/i18n/en/nav.js +18 -0
  37. package/dist/public/i18n/en/profile.js +201 -0
  38. package/dist/public/i18n/en/settings.js +127 -0
  39. package/dist/public/i18n/en/status.js +22 -0
  40. package/dist/public/i18n/en.js +17 -0
  41. package/dist/public/i18n/ko/applications.js +23 -0
  42. package/dist/public/i18n/ko/common.js +22 -0
  43. package/dist/public/i18n/ko/documents.js +133 -0
  44. package/dist/public/i18n/ko/home.js +63 -0
  45. package/dist/public/i18n/ko/interview.js +69 -0
  46. package/dist/public/i18n/ko/jobs.js +152 -0
  47. package/dist/public/i18n/ko/nav.js +18 -0
  48. package/dist/public/i18n/ko/profile.js +201 -0
  49. package/dist/public/i18n/ko/settings.js +127 -0
  50. package/dist/public/i18n/ko/status.js +23 -0
  51. package/dist/public/i18n/ko.js +18 -0
  52. package/dist/public/i18n.js +55 -0
  53. package/dist/public/index.html +1 -0
  54. package/dist/public/lib.js +25 -17
  55. package/dist/public/pages/applications.js +17 -21
  56. package/dist/public/pages/documents.js +153 -107
  57. package/dist/public/pages/home.js +88 -53
  58. package/dist/public/pages/interview.js +105 -51
  59. package/dist/public/pages/jobs.js +330 -106
  60. package/dist/public/pages/profile.js +157 -152
  61. package/dist/public/pages/settings.js +270 -72
  62. package/dist/public/styles.css +38 -3
  63. package/dist/web.mjs +859 -103
  64. package/docs/FAQ.md +26 -5
  65. package/docs/MCP_TOOLS.md +26 -12
  66. package/docs/START_WORKFLOW.md +2 -2
  67. package/docs/SUPPORTED_AI_APPS.md +13 -0
  68. package/docs/WORKFLOWS.md +80 -23
  69. package/docs/career-os/README.md +8 -3
  70. package/docs/career-os/eop/career-description.md +136 -0
  71. package/docs/career-os/eop/cover-letter.md +7 -5
  72. package/docs/career-os/eop/fit-analysis.md +15 -5
  73. package/docs/career-os/eop/interview-prep.md +209 -21
  74. package/docs/career-os/eop/job-analysis.md +5 -3
  75. package/docs/career-os/eop/profile-extraction.md +5 -4
  76. package/docs/career-os/knowledge/cover-letter.md +4 -4
  77. package/docs/career-os/knowledge/fit-matching.md +8 -8
  78. package/docs/career-os/knowledge/interview-behavioral.md +76 -8
  79. package/docs/career-os/knowledge/interview-technical.md +106 -4
  80. package/docs/career-os/knowledge/linkedin-profile.md +1 -1
  81. package/docs/career-os/knowledge/networking-referrals.md +1 -1
  82. package/docs/career-os/knowledge/offer-evaluation-decision.md +10 -10
  83. package/docs/career-os/knowledge/portfolio.md +3 -3
  84. package/docs/career-os/knowledge/verifiers/ats-compat.md +8 -4
  85. package/docs/career-os/knowledge/verifiers/human-voice.md +2 -2
  86. package/docs/career-os/knowledge/verifiers/recency-staleness.md +1 -1
  87. package/docs/career-os/knowledge/verifiers/responsiveness-on-target.md +2 -2
  88. package/docs/career-os/knowledge/verifiers/truthfulness.md +1 -1
  89. package/package.json +2 -2
  90. package/packages/core/src/onboarding.ts +2 -1
  91. package/packages/core/src/services.ts +138 -21
  92. package/packages/core/src/summary.ts +59 -1
  93. package/packages/core/src/verify/lint.ts +4 -0
  94. package/packages/db/src/index.ts +1 -0
  95. package/packages/db/src/repositories.ts +0 -0
  96. package/packages/db/src/schema.ts +17 -0
  97. package/packages/exporters/src/index.ts +28 -17
  98. package/packages/knowledge/src/index.ts +46 -7
  99. package/packages/mcp-tools/src/bridge.ts +194 -13
  100. package/packages/mcp-tools/src/tools.ts +390 -38
  101. package/packages/mcp-tools/src/update.ts +31 -16
  102. package/packages/parsers/src/documents.ts +12 -1
  103. package/packages/prompts/src/humanize.ts +46 -0
  104. package/packages/prompts/src/index.ts +5 -1
  105. package/packages/prompts/src/install.ts +4 -4
  106. package/packages/prompts/src/onboarding.ts +4 -4
  107. package/packages/prompts/src/system.ts +17 -8
  108. package/packages/shared/src/enums.ts +14 -4
  109. package/packages/shared/src/schemas.ts +41 -0
  110. package/packages/workflows/src/definitions.ts +47 -10
  111. package/scripts/init.ts +284 -13
  112. package/dist/site/analytics.js +0 -97
  113. package/dist/site/favicon.svg +0 -1
  114. package/dist/site/fonts/PretendardVariable.woff2 +0 -0
  115. package/dist/site/icon-180.png +0 -0
  116. package/dist/site/icon-512.png +0 -0
  117. package/dist/site/index.html +0 -565
  118. package/dist/site/landing.js +0 -54
  119. package/dist/site/llms-install.txt +0 -218
  120. package/dist/site/robots.txt +0 -4
  121. package/dist/site/sitemap.xml +0 -21
  122. package/dist/site/start.html +0 -353
  123. package/dist/site/style.css +0 -559
  124. package/dist/site/vercel.json +0 -20
@@ -0,0 +1,133 @@
1
+ // 문서 페이지 — 자기소개서/경력기술서/이력서·포트폴리오.
2
+ export default {
3
+ // tabs
4
+ 'documents.tab.cover': '자기소개서',
5
+ 'documents.tab.career': '경력기술서',
6
+ 'documents.tab.docs': '이력서·포트폴리오',
7
+
8
+ // search / loading / empty
9
+ 'documents.search.cover': '자기소개서 검색',
10
+ 'documents.search.career': '경력기술서 검색',
11
+ 'documents.search.docs': '이력서·포트폴리오 검색',
12
+ 'documents.search.aria': '검색',
13
+ 'documents.search.empty': '‘{{query}}’에 맞는 항목이 없어요.',
14
+ 'documents.search.clear': '필터 초기화',
15
+ 'documents.loading': '불러오는 중…',
16
+
17
+ // create actions
18
+ 'documents.action.coverCreate': '자기소개서 추가',
19
+ 'documents.action.careerCreate': '경력기술서 추가',
20
+ 'documents.action.docCreate': '문서 추가',
21
+
22
+ // cover letters tab — empty state
23
+ 'documents.cover.empty.title': '아직 자기소개서가 없어요',
24
+ 'documents.cover.empty.body': '작성하거나 붙여넣어 버전과 함께 보관하세요.',
25
+
26
+ // cover row
27
+ 'documents.cover.versionCount': '버전 {{count}}개',
28
+ 'documents.cover.primary': '대표',
29
+ 'documents.cover.open': '열기',
30
+ 'documents.cover.copy': '복사',
31
+ 'documents.cover.exportMd': 'MD',
32
+ 'documents.cover.exportHtml': 'HTML',
33
+ 'documents.cover.exportMdTitle': 'Markdown 내보내기',
34
+ 'documents.cover.exportHtmlTitle': 'HTML 내보내기',
35
+ 'documents.cover.setPrimary': '대표 지정',
36
+ 'documents.cover.delete': '삭제',
37
+ 'documents.cover.noContent': '아직 내용이 없습니다.',
38
+
39
+ // cover toasts / confirm
40
+ 'documents.cover.setPrimaryToast': '대표 자기소개서로 지정했어요.',
41
+ 'documents.cover.deleteTitle': '자기소개서 삭제',
42
+ 'documents.cover.deleteConfirm': '"{{title}}"을(를) 삭제할까요? 모든 버전 기록이 함께 삭제됩니다.',
43
+ 'documents.cover.deleteConfirmLabel': '삭제',
44
+ 'documents.cover.deleteToast': '자기소개서를 삭제했어요.',
45
+
46
+ // cover create modal
47
+ 'documents.coverCreate.title': '새 자기소개서',
48
+ 'documents.coverCreate.titlePlaceholder': '예: 백엔드 개발자 자기소개서',
49
+ 'documents.coverCreate.contentPlaceholder': '내용을 붙여넣으세요. 비워 두면 빈 자기소개서가 만들어집니다.',
50
+ 'documents.coverCreate.jobNone': '연결 안 함',
51
+ 'documents.coverCreate.fieldTitle': '제목 (필수)',
52
+ 'documents.coverCreate.fieldContent': '내용 (선택)',
53
+ 'documents.coverCreate.fieldContentHint': '내용을 입력하면 첫 버전으로 저장됩니다.',
54
+ 'documents.coverCreate.fieldJob': '연결할 공고 (선택)',
55
+ 'documents.coverCreate.fieldJobHint': '특정 공고에 연결하면 그 공고 화면에서 함께 보여요.',
56
+ 'documents.coverCreate.fieldJobHintEmpty': '저장된 공고가 아직 없어요.',
57
+ 'documents.coverCreate.cancel': '취소',
58
+ 'documents.coverCreate.submit': '자기소개서 저장',
59
+ 'documents.coverCreate.titleRequired': '제목을 입력해 주세요.',
60
+ 'documents.coverCreate.toast': '자기소개서를 추가했어요.',
61
+
62
+ // cover detail body
63
+ 'documents.coverDetail.exportMd': 'MD 내보내기',
64
+ 'documents.coverDetail.exportHtml': 'HTML 내보내기',
65
+ 'documents.coverDetail.currentVersion': '현재 버전',
66
+ 'documents.coverDetail.copy': '복사',
67
+ 'documents.coverDetail.noContent': '내용이 없습니다.',
68
+ 'documents.coverDetail.history': '버전 기록',
69
+ 'documents.coverDetail.historyEmpty': '아직 버전 기록이 없습니다.',
70
+
71
+ // version item
72
+ 'documents.version.label': 'v{{n}}',
73
+ 'documents.version.current': '현재 버전',
74
+ 'documents.version.view': '이 버전 보기',
75
+ 'documents.version.viewLabel': 'v{{n}} 보기',
76
+ 'documents.version.makeCurrent': '현재 버전으로 지정',
77
+ 'documents.version.copy': '복사',
78
+ 'documents.version.makeCurrentToast': '현재 버전을 변경했어요.',
79
+
80
+ // edit new version
81
+ 'documents.editVersion.notePlaceholder': '예: 지원동기 보강, 문장 다듬기',
82
+ 'documents.editVersion.fieldContent': '내용',
83
+ 'documents.editVersion.fieldNote': '변경 메모 (선택)',
84
+ 'documents.editVersion.submit': '새 버전으로 저장',
85
+ 'documents.editVersion.contentRequired': '내용을 입력해 주세요.',
86
+ 'documents.editVersion.toast': '새 버전을 저장했어요.',
87
+ 'documents.editVersion.cancel': '취소',
88
+ 'documents.editVersion.toggle': '수정하여 새 버전 저장',
89
+
90
+ // career descriptions tab — empty state
91
+ 'documents.career.empty.title': '아직 경력기술서가 없어요',
92
+ 'documents.career.empty.body': 'AI에게 경력기술서 작성을 요청하면 여기에 저장돼요.',
93
+ 'documents.career.empty.action': '직접 추가',
94
+
95
+ // documents tab — empty state
96
+ 'documents.docs.empty.title': '저장된 문서가 없어요',
97
+ 'documents.docs.empty.body': '이력서·포트폴리오·기타 문서를 보관하세요.',
98
+ 'documents.docs.empty.action': '문서 추가',
99
+
100
+ // doc detail modal
101
+ 'documents.docDetail.updated': '수정 {{when}}',
102
+ 'documents.docDetail.noContent': '내용이 없습니다.',
103
+ 'documents.docDetail.copy': '복사',
104
+ 'documents.docDetail.export': 'MD',
105
+ 'documents.docDetail.exportTitle': 'Markdown 내보내기',
106
+ 'documents.docDetail.exportHtml': 'HTML',
107
+ 'documents.docDetail.exportHtmlTitle': 'HTML 내보내기',
108
+ 'documents.docDetail.delete': '삭제',
109
+ 'documents.docDetail.deleteTitle': '문서 삭제',
110
+ 'documents.docDetail.deleteConfirm': '"{{title}}"을(를) 삭제할까요?',
111
+ 'documents.docDetail.deleteConfirmLabel': '삭제',
112
+ 'documents.docDetail.deleteToast': '문서를 삭제했어요.',
113
+ 'documents.docDetail.edit': '수정',
114
+
115
+ // doc form
116
+ 'documents.docForm.defaultKind': '문서',
117
+ 'documents.docForm.editTitle': '문서 수정',
118
+ 'documents.docForm.createTitle': '{{kind}} 추가',
119
+ 'documents.docForm.titlePlaceholderCareer': '예: 마스터 경력기술서',
120
+ 'documents.docForm.titlePlaceholderDefault': '예: 2026 이력서',
121
+ 'documents.docForm.contentPlaceholderCareer': '경력기술서 본문을 붙여넣으세요.',
122
+ 'documents.docForm.contentPlaceholderDefault': '이력서·포트폴리오 본문을 붙여넣으세요.',
123
+ 'documents.docForm.fieldKind': '종류',
124
+ 'documents.docForm.fieldTitle': '제목 (필수)',
125
+ 'documents.docForm.fieldContent': '내용 (필수)',
126
+ 'documents.docForm.markPrimary': '대표 문서로 지정',
127
+ 'documents.docForm.cancel': '취소',
128
+ 'documents.docForm.submit': '문서 저장',
129
+ 'documents.docForm.titleRequired': '제목을 입력해 주세요.',
130
+ 'documents.docForm.contentRequired': '내용을 입력해 주세요.',
131
+ 'documents.docForm.editToast': '문서를 수정했어요.',
132
+ 'documents.docForm.createToast': '문서를 추가했어요.',
133
+ };
@@ -0,0 +1,63 @@
1
+ // 홈 페이지
2
+ export default {
3
+ // topbar primary action
4
+ 'home.action.addJob': '공고 추가',
5
+
6
+ // greeting band
7
+ 'home.greeting.title': '{{name}}님, 안녕하세요',
8
+ 'home.greeting.welcome': '환영합니다',
9
+ 'home.greeting.firstRun': '시작해 볼까요 — 먼저 기본 정보를 채워 주세요.',
10
+ 'home.greeting.interviewTodo': '면접 준비가 필요한 지원 {{count}}건이 있어요.',
11
+ 'home.greeting.inProgress': '진행 중인 지원 {{count}}건이 있어요.',
12
+ 'home.greeting.jobsSaved': '저장된 공고 {{count}}건 · 새 적합도 분석을 받아보세요.',
13
+ 'home.greeting.idle': '오늘도 한 걸음 나아가 볼까요.',
14
+
15
+ // getting started card
16
+ 'home.start.title': '시작하기',
17
+ 'home.start.completeness': '프로필 완성도 {{pct}}%',
18
+ 'home.start.calloutTitle': '두뇌는 당신의 AI, 보관은 CareerMate',
19
+ 'home.start.calloutBody': '공고 분석·자기소개서·경력기술서·면접 준비는 평소 쓰던 AI에게 말로 시키면, 결과가 이 대시보드에 쌓여요.',
20
+ 'home.start.note': '완성할수록 AI의 적합도 분석과 자기소개서 품질이 좋아져요.',
21
+ 'home.start.step.profile': '기본 프로필 작성',
22
+ 'home.start.step.resume': '경력기술서 또는 이력서 추가',
23
+ 'home.start.step.coverLetter': '기존 자기소개서 등록',
24
+ 'home.start.step.job': '관심 공고 저장',
25
+
26
+ // KPI tiles
27
+ 'home.stat.jobs': '저장 공고',
28
+ 'home.stat.activeApplications': '진행 중 지원',
29
+ 'home.stat.coverLetters': '자기소개서',
30
+ 'home.stat.interviewPending': '면접 준비',
31
+
32
+ // pipeline
33
+ 'home.pipeline.title': '지원 파이프라인',
34
+ 'home.pipeline.openBoard': '보드 열기',
35
+ 'home.pipeline.empty': '아직 지원 단계가 없어요. 공고에 지원 상태를 표시하면 여기에 파이프라인이 채워져요.',
36
+ 'home.pipeline.stage.applied': '지원',
37
+ 'home.pipeline.stage.documentPassed': '서류 합격',
38
+ 'home.pipeline.stage.interview': '면접',
39
+ 'home.pipeline.stage.finalPassed': '최종 합격',
40
+ 'home.pipeline.conv.total': '전체 {{count}}건',
41
+ 'home.pipeline.conv.vsApplied': '지원 대비 {{pct}}%',
42
+ 'home.pipeline.conv.vsInterview': '면접 대비 {{pct}}%',
43
+
44
+ // action lane
45
+ 'home.actionLane.title': '이번에 할 일',
46
+ 'home.actionLane.viewAll': '전체 보기',
47
+ 'home.actionLane.interviewPrep': '면접 준비',
48
+ 'home.actionLane.followup': '후속 필요 · {{n}}일',
49
+ 'home.actionLane.empty': '지금 처리할 일이 없어요. 새 공고를 분석해 보세요.',
50
+ 'home.placeholder.dash': '—',
51
+
52
+ // recent jobs
53
+ 'home.recentJobs.title': '최근 공고',
54
+ 'home.recentJobs.viewAll': '전체 보기',
55
+ 'home.recentJobs.empty': '저장된 공고가 아직 없어요. 새 공고를 추가해 보세요.',
56
+ 'home.recentJobs.score': '{{score}}점',
57
+
58
+ // activity feed
59
+ 'home.activity.title': '최근 활동',
60
+ 'home.activity.empty': '아직 활동 내역이 없어요. 공고를 저장하거나 분석하면 여기에 기록돼요.',
61
+ 'home.activity.today': '오늘',
62
+ 'home.activity.yesterday': '어제',
63
+ };
@@ -0,0 +1,69 @@
1
+ // 면접 준비 페이지
2
+ export default {
3
+ // empty state
4
+ 'interview.empty.title': '아직 면접 준비 자료가 없어요',
5
+ 'interview.empty.body': '공고 화면에서 AI에게 면접 준비를 요청하면 여기에 저장돼요.',
6
+ 'interview.empty.cta': '공고 보러 가기',
7
+
8
+ // question tabs (기술 1차 / 인성·컬처핏 2차)
9
+ 'interview.tab.technical': '기술',
10
+ 'interview.tab.behavioral': '인성·컬처핏',
11
+
12
+ // job card
13
+ 'interview.card.summary': '{{q}} · {{s}} · 1분 자기소개 {{intro}}',
14
+ 'interview.card.questionsCount': '예상 질문 {{count}}개',
15
+ 'interview.card.questionsSplit': '기술 {{tech}} · 인성·컬처핏 {{beh}}',
16
+ 'interview.card.starCount': 'STAR 가이드 {{count}}개',
17
+ 'interview.card.introYes': '있음',
18
+ 'interview.card.introNo': '없음',
19
+ 'interview.card.hint': '예상 질문과 1분 자기소개를 정리해 두면 한곳에서 연습할 수 있어요.',
20
+ 'interview.card.view': '자세히 보기',
21
+ 'interview.card.create': '직접 작성',
22
+
23
+ // prep modal
24
+ 'interview.modal.title': '{{company}} 면접 준비',
25
+ 'interview.modal.questionsTitle': '예상 질문 & 꼬리 질문',
26
+ 'interview.modal.questionsEmpty': '등록된 예상 질문이 없습니다.',
27
+ 'interview.modal.questionsEmptyTab': '이 갈래에 등록된 질문이 없습니다.',
28
+ 'interview.modal.starTitle': 'STAR 답변 가이드',
29
+ 'interview.modal.starEmpty': '등록된 STAR 가이드가 없습니다.',
30
+ 'interview.modal.introTitle': '1분 자기소개',
31
+ 'interview.modal.introCopy': '복사',
32
+ 'interview.modal.introEmpty': '작성된 자기소개가 없습니다.',
33
+ 'interview.modal.notesTitle': '메모',
34
+ 'interview.modal.exportMd': 'MD 내보내기',
35
+ 'interview.modal.exportHtml': 'HTML 내보내기',
36
+ 'interview.modal.edit': '수정',
37
+
38
+ // question block
39
+ 'interview.question.intent': '의도: {{intent}}',
40
+ 'interview.question.followups': '꼬리 질문',
41
+ 'interview.question.answerGuide': '답변 가이드',
42
+
43
+ // STAR block
44
+ 'interview.star.situation': '상황',
45
+ 'interview.star.task': '과제',
46
+ 'interview.star.action': '행동',
47
+ 'interview.star.result': '결과',
48
+ 'interview.star.empty': 'S/T/A/R 내용이 비어 있습니다.',
49
+
50
+ // edit modal
51
+ 'interview.edit.introPlaceholder': '1분 분량(약 300~400자)의 자기소개를 작성하세요.',
52
+ 'interview.edit.notesPlaceholder': '면접 준비 메모를 자유롭게 적어두세요.',
53
+ 'interview.edit.questionPlaceholder': '예상 질문',
54
+ 'interview.edit.answerPlaceholder': '답변 가이드 (선택)',
55
+ 'interview.edit.questionNum': '질문 {{n}}',
56
+ 'interview.edit.delete': '삭제',
57
+ 'interview.edit.fieldQuestion': '질문',
58
+ 'interview.edit.fieldCategory': '면접 갈래',
59
+ 'interview.edit.fieldAnswer': '답변 가이드',
60
+ 'interview.edit.introLabel': '1분 자기소개',
61
+ 'interview.edit.notesLabel': '메모',
62
+ 'interview.edit.questionsLabel': '예상 질문',
63
+ 'interview.edit.addQuestion': '질문 추가',
64
+ 'interview.edit.titleEdit': '{{company}} 면접 준비 수정',
65
+ 'interview.edit.titleCreate': '{{company}} 면접 준비 작성',
66
+ 'interview.edit.cancel': '취소',
67
+ 'interview.edit.save': '면접 준비 저장',
68
+ 'interview.edit.saved': '면접 준비를 저장했어요.',
69
+ };
@@ -0,0 +1,152 @@
1
+ // 공고(jobs) 페이지 — 목록 + 상세
2
+ export default {
3
+ // ---- list mode ----
4
+ 'jobs.list.empty.title': '저장된 공고가 없어요',
5
+ 'jobs.list.empty.body': '관심 있는 채용공고를 추가해 적합도와 진행 상태를 관리해 보세요.',
6
+ 'jobs.list.addJob': '공고 추가',
7
+ 'jobs.list.searchPlaceholder': '회사·직무 검색',
8
+ 'jobs.list.searchAria': '공고 검색',
9
+ 'jobs.list.locationUnset': '위치 미정',
10
+ 'jobs.list.deadline': '마감 {{date}}',
11
+ 'jobs.list.noDeadline': '마감일 없음',
12
+ 'jobs.list.score': '{{score}}점',
13
+ 'jobs.list.noResult': '검색 결과가 없어요.',
14
+ 'jobs.list.cardTitle': '저장된 공고',
15
+ 'jobs.list.cardSub': '{{count}}개',
16
+ 'jobs.list.col.companyRole': '회사 · 직무',
17
+ 'jobs.list.col.locationDeadline': '위치 · 마감일',
18
+ 'jobs.list.col.fit': '적합도',
19
+ 'jobs.list.col.status': '상태',
20
+
21
+ // ---- job form (create/edit modal) ----
22
+ 'jobs.form.companyPlaceholder': '회사명',
23
+ 'jobs.form.positionPlaceholder': '직무 / 포지션명',
24
+ 'jobs.form.urlPlaceholder': 'https://…',
25
+ 'jobs.form.locationPlaceholder': '서울 / 재택 등',
26
+ 'jobs.form.employmentPlaceholder': '정규직 / 계약직 / 인턴 등',
27
+ 'jobs.form.deadlinePlaceholder': 'YYYY-MM-DD',
28
+ 'jobs.form.sourcePlaceholder': '사람인 / 원티드 / 직접 입력 등',
29
+ 'jobs.form.descriptionPlaceholder': '공고 원문 또는 정리된 내용을 붙여넣으세요.',
30
+ 'jobs.form.keywordsPlaceholder': '핵심 키워드 (쉼표로 구분)',
31
+ 'jobs.form.requirementsPlaceholder': '자격요건/우대사항을 한 줄에 하나씩',
32
+ 'jobs.form.tidy': '붙여넣은 텍스트 정리',
33
+ 'jobs.form.tidyBusy': '정리 중…',
34
+ 'jobs.form.tidyNeedsText': '먼저 공고 원문을 붙여넣어 주세요.',
35
+ 'jobs.form.tidyDone': '붙여넣은 텍스트를 정리하고 일부 항목을 채웠어요.',
36
+ 'jobs.form.field.company': '회사 *',
37
+ 'jobs.form.field.position': '직무 *',
38
+ 'jobs.form.field.url': '공고 URL',
39
+ 'jobs.form.field.location': '위치',
40
+ 'jobs.form.field.employment': '고용형태',
41
+ 'jobs.form.field.deadline': '마감일',
42
+ 'jobs.form.field.deadlineHint': 'YYYY-MM-DD',
43
+ 'jobs.form.field.source': '출처',
44
+ 'jobs.form.field.description': '공고 원문',
45
+ 'jobs.form.field.descriptionHint': '원문을 붙여넣고 "정리"를 누르면 회사·직무·키워드·마감일을 자동으로 채워봅니다.',
46
+ 'jobs.form.field.keywords': '핵심 키워드',
47
+ 'jobs.form.field.keywordsHint': '쉼표로 구분',
48
+ 'jobs.form.field.requirements': '자격요건 · 우대사항',
49
+ 'jobs.form.field.requirementsHint': '한 줄에 하나씩',
50
+ 'jobs.form.validationRequired': '회사와 직무는 필수입니다.',
51
+ 'jobs.form.savedNew': '공고를 저장했어요.',
52
+ 'jobs.form.savedEdit': '공고를 수정했어요.',
53
+ 'jobs.form.save': '공고 저장',
54
+ 'jobs.form.cancel': '취소',
55
+ 'jobs.modal.addTitle': '공고 추가',
56
+ 'jobs.modal.editTitle': '공고 수정',
57
+
58
+ // ---- detail mode ----
59
+ 'jobs.detail.notFoundTitle': '공고를 찾을 수 없음',
60
+ 'jobs.detail.notFoundCardTitle': '공고를 찾을 수 없어요',
61
+ 'jobs.detail.notFoundBody': '요청한 공고가 삭제되었거나 존재하지 않습니다.',
62
+ 'jobs.detail.backToList': '공고 목록으로',
63
+ 'jobs.detail.title': '{{company}} · {{position}}',
64
+ 'jobs.detail.statusChanged': '상태를 변경했어요.',
65
+ 'jobs.detail.edit': '수정',
66
+ 'jobs.detail.delete': '삭제',
67
+ 'jobs.detail.deleteTitle': '공고 삭제',
68
+ 'jobs.detail.deleteMessage': "'{{company}} · {{position}}' 공고를 삭제할까요? 연결된 지원 기록도 함께 사라집니다.",
69
+ 'jobs.detail.deleteConfirm': '삭제',
70
+ 'jobs.detail.deleted': '공고를 삭제했어요.',
71
+ 'jobs.detail.list': '목록',
72
+ 'jobs.detail.statusLabel': '상태',
73
+ 'jobs.detail.openPosting': '공고 원문',
74
+
75
+ // ---- posting card ----
76
+ 'jobs.posting.title': '공고 정보',
77
+ 'jobs.posting.location': '위치',
78
+ 'jobs.posting.employment': '고용형태',
79
+ 'jobs.posting.deadline': '마감일',
80
+ 'jobs.posting.source': '출처',
81
+ 'jobs.posting.unset': '미정',
82
+ 'jobs.posting.none': '없음',
83
+ 'jobs.posting.sourceManual': '직접 입력',
84
+ 'jobs.posting.keywords': '핵심 키워드',
85
+ 'jobs.posting.requirements': '자격요건 · 우대사항',
86
+ 'jobs.posting.rawText': '공고 원문',
87
+
88
+ // ---- fit card ----
89
+ 'jobs.fit.title': '적합도 분석',
90
+ 'jobs.fit.emptyBody': '아직 분석 전이에요. 이 공고와 내 프로필을 비교한 결과가 여기에 표시됩니다.',
91
+ 'jobs.fit.overall': '종합 적합도 (100점 만점)',
92
+ 'jobs.fit.notScored': '점수 미산정',
93
+ 'jobs.fit.strengths': '강점',
94
+ 'jobs.fit.gaps': '보완할 부분',
95
+ 'jobs.fit.matchedKeywords': '일치하는 키워드',
96
+ 'jobs.fit.missingKeywords': '부족한 키워드',
97
+ 'jobs.fit.recommendations': '추천 전략',
98
+
99
+ // ---- cover letters card ----
100
+ 'jobs.cover.title': '자기소개서',
101
+ 'jobs.cover.empty': 'AI에게 작성을 요청하면 여기에 저장돼요.',
102
+ 'jobs.cover.cardSub': '{{count}}개',
103
+ 'jobs.cover.versions': '버전 {{count}}개',
104
+
105
+ // ---- interview card ----
106
+ 'jobs.interview.title': '면접 준비',
107
+ 'jobs.interview.viewPrep': '자세히',
108
+ 'jobs.interview.questions': '예상 질문 {{count}}개가 준비되어 있어요.',
109
+ 'jobs.interview.saved': '면접 준비 자료가 저장되어 있어요.',
110
+ 'jobs.interview.introSaved': '1분 자기소개 초안도 함께 저장되어 있습니다.',
111
+ 'jobs.interview.empty': 'AI에게 준비를 요청하면 여기에 저장돼요.',
112
+
113
+ // ---- applied modal ----
114
+ 'jobs.applied.title': '지원 완료 기록',
115
+ 'jobs.applied.channelPlaceholder': '예: 원티드, 사람인, 회사 채용페이지',
116
+ 'jobs.applied.notePlaceholder': '상태 변경 메모를 남길 수 있어요.',
117
+ 'jobs.applied.coverNone': '선택 안 함',
118
+ 'jobs.applied.coverNoneSub': '자기소개서를 제출 자료로 기록하지 않음',
119
+ 'jobs.applied.versions': '버전 {{count}}개',
120
+ 'jobs.applied.otherJob': '다른 공고 연결',
121
+ 'jobs.applied.primary': '대표',
122
+ 'jobs.applied.noCovers': '이 공고의 자기소개서가 아직 없어요.',
123
+ 'jobs.applied.noDocs': '문서함에 저장된 이력서·경력기술서·포트폴리오가 없어요.',
124
+ 'jobs.applied.toggleOther': '다른 자기소개서',
125
+ 'jobs.applied.toggleScoped': '이 공고 자기소개서만',
126
+ 'jobs.applied.fieldSubmittedAt': '제출일',
127
+ 'jobs.applied.fieldChannel': '제출 채널',
128
+ 'jobs.applied.fieldCover': '자기소개서',
129
+ 'jobs.applied.fieldDocs': '제출 문서',
130
+ 'jobs.applied.fieldNote': '메모',
131
+ 'jobs.applied.cancel': '취소',
132
+ 'jobs.applied.statusOnly': '상태만 변경',
133
+ 'jobs.applied.recordAndDone': '기록하고 완료',
134
+
135
+ // ---- timeline card ----
136
+ 'jobs.timeline.title': '타임라인',
137
+ 'jobs.timeline.cardSub': '{{count}}개',
138
+ 'jobs.timeline.coverLetter': '자기소개서',
139
+ 'jobs.timeline.deletedDoc': '삭제된 문서',
140
+ 'jobs.timeline.deleted': '삭제됨',
141
+ 'jobs.timeline.type.job_saved': '공고 등록',
142
+ 'jobs.timeline.type.fit_analysis_saved': '적합도 분석',
143
+ 'jobs.timeline.type.cover_letter_version_saved': '자기소개서 작성',
144
+ 'jobs.timeline.type.interview_prep_saved': '면접 준비',
145
+ 'jobs.timeline.fitScore': '종합 {{score}}점',
146
+ 'jobs.timeline.questionCount': '예상 질문 {{count}}개',
147
+
148
+ // ---- related card ----
149
+ 'jobs.related.title': '관련 기록',
150
+ 'jobs.related.sub': '같은 회사 · 직무',
151
+ 'jobs.related.deadline': '마감 {{date}}',
152
+ };
@@ -0,0 +1,18 @@
1
+ // 사이드바 내비게이션 + 라우팅/셸.
2
+ export default {
3
+ 'nav.home': '홈',
4
+ 'nav.profile': '프로필',
5
+ 'nav.jobs': '채용공고',
6
+ 'nav.applications': '지원 현황',
7
+ 'nav.documents': '문서',
8
+ 'nav.interview': '면접 준비',
9
+ 'nav.settings': '설정',
10
+ 'nav.section.workspace': '워크스페이스',
11
+ 'nav.section.system': '시스템',
12
+ 'nav.menu.open': '메뉴 열기',
13
+ 'nav.menu.close': '메뉴 닫기',
14
+ 'nav.subtitle': '내 커리어 흐름 관리',
15
+ 'nav.skip': '본문으로 건너뛰기',
16
+ 'nav.footStatus': '로컬에서 실행 중',
17
+ 'err.page.load': '페이지를 불러오지 못했습니다',
18
+ };
@@ -0,0 +1,201 @@
1
+ // 프로필 페이지.
2
+ export default {
3
+ 'profile.title': '프로필',
4
+
5
+ // period label
6
+ 'profile.period.present': '재직중',
7
+ 'profile.period.startToPresent': '{{start}} ~ 재직중',
8
+ 'profile.period.startToEnd': '{{start}} ~ {{end}}',
9
+
10
+ // completeness card
11
+ 'profile.completeness.title': '프로필 완성도',
12
+ 'profile.completeness.percent': '{{pct}}%',
13
+
14
+ // export profile as a resume
15
+ 'profile.export.md': 'MD',
16
+ 'profile.export.html': 'HTML',
17
+ 'profile.export.mdTitle': '이력서 Markdown 내보내기',
18
+ 'profile.export.htmlTitle': '이력서 HTML 내보내기',
19
+
20
+ // basic info card
21
+ 'profile.basic.title': '기본 정보',
22
+ 'profile.basic.kv.name': '이름',
23
+ 'profile.basic.kv.email': '이메일',
24
+ 'profile.basic.kv.phone': '연락처',
25
+ 'profile.basic.kv.location': '지역',
26
+ 'profile.basic.kv.headline': '한 줄 소개',
27
+ 'profile.basic.summaryLabel': '자기소개 요약',
28
+ 'profile.basic.empty.title': '기본 정보가 비어 있어요',
29
+ 'profile.basic.empty.body': '이름·연락처·한 줄 소개를 채워 두면 모든 문서의 기본 정보로 쓰입니다.',
30
+ 'profile.basic.empty.action': '정보 입력',
31
+ 'profile.basic.edit': '수정',
32
+ // basic info edit modal
33
+ 'profile.basic.modal.title': '기본 정보 수정',
34
+ 'profile.basic.ph.name': '홍길동',
35
+ 'profile.basic.ph.email': 'you@example.com',
36
+ 'profile.basic.ph.phone': '010-0000-0000',
37
+ 'profile.basic.ph.location': '서울',
38
+ 'profile.basic.ph.headline': '예: 5년차 백엔드 엔지니어',
39
+ 'profile.basic.ph.summary': '자기소개 요약',
40
+ 'profile.basic.ph.links': 'GitHub | https://github.com/...\n포트폴리오 | https://...',
41
+ 'profile.basic.field.name': '이름',
42
+ 'profile.basic.field.email': '이메일',
43
+ 'profile.basic.field.phone': '연락처',
44
+ 'profile.basic.field.location': '지역',
45
+ 'profile.basic.field.headline': '한 줄 소개',
46
+ 'profile.basic.field.headlineHint': '직무 타이틀이나 강점을 한 문장으로',
47
+ 'profile.basic.field.summary': '자기소개 요약',
48
+ 'profile.basic.field.links': '링크',
49
+ 'profile.basic.field.linksHint': '한 줄에 하나씩 "라벨 | URL" 형식으로 입력하세요.',
50
+ 'profile.basic.cancel': '취소',
51
+ 'profile.basic.save': '기본 정보 저장',
52
+ 'profile.basic.saved': '기본 정보를 저장했어요.',
53
+
54
+ // desired card
55
+ 'profile.desired.title': '희망 조건',
56
+ 'profile.desired.rolesLabel': '희망 직무',
57
+ 'profile.desired.conditionsLabel': '희망 조건',
58
+ 'profile.desired.empty.title': '희망 조건이 비어 있어요',
59
+ 'profile.desired.empty.body': '희망 직무와 근무 조건을 적어 두면 공고 매칭이 정확해집니다.',
60
+ 'profile.desired.empty.action': '희망 조건 입력',
61
+ 'profile.desired.edit': '수정',
62
+ 'profile.desired.modal.title': '희망 조건 수정',
63
+ 'profile.desired.ph.roles': '백엔드 엔지니어, 플랫폼 엔지니어',
64
+ 'profile.desired.ph.conditions': '예: 연봉 6,000 이상 / 서울·재택 / 정규직',
65
+ 'profile.desired.field.roles': '희망 직무',
66
+ 'profile.desired.field.rolesHint': '쉼표(,)로 구분해 여러 개 입력할 수 있어요.',
67
+ 'profile.desired.field.conditions': '희망 조건',
68
+ 'profile.desired.field.conditionsHint': '연봉·지역·근무형태 등 자유롭게',
69
+ 'profile.desired.cancel': '취소',
70
+ 'profile.desired.save': '희망 조건 저장',
71
+ 'profile.desired.saved': '희망 조건을 저장했어요.',
72
+
73
+ // writing card
74
+ 'profile.writing.title': '자기소개서 설정',
75
+ 'profile.writing.callout.title': 'AI 글쓰기 품질에 직접 반영돼요',
76
+ 'profile.writing.callout.body': '선호 문체와 강조 포인트를 적어 두면 자기소개서·면접 답변의 톤이 일관되게 맞춰집니다.',
77
+ 'profile.writing.toneLabel': '선호 문체',
78
+ 'profile.writing.emphasisLabel': '강조 포인트',
79
+ 'profile.writing.emptyHint': '아직 선호 문체·강조 포인트가 없어요.',
80
+ 'profile.writing.edit': '수정',
81
+ 'profile.writing.setup': '설정',
82
+ 'profile.writing.modal.title': '자기소개서 설정',
83
+ 'profile.writing.ph.tone': '예: 담백하고 구체적',
84
+ 'profile.writing.ph.emphasis': '문제 해결 능력\n주도적인 협업\n정량 성과',
85
+ 'profile.writing.field.tone': '선호 문체',
86
+ 'profile.writing.field.toneHint': '예: 담백하고 구체적 / 자신감 있게 / 진솔하게',
87
+ 'profile.writing.field.emphasis': '강조 포인트',
88
+ 'profile.writing.field.emphasisHint': '한 줄에 하나씩. AI가 글을 쓸 때 이 포인트를 우선 반영해요.',
89
+ 'profile.writing.cancel': '취소',
90
+ 'profile.writing.save': '설정 저장',
91
+ 'profile.writing.saved': '자기소개서 설정을 저장했어요.',
92
+
93
+ // experiences card
94
+ 'profile.exp.title': '경력',
95
+ 'profile.exp.add': '경력 추가',
96
+ 'profile.exp.count': '{{count}}건',
97
+ 'profile.exp.empty.title': '등록된 경력이 없어요',
98
+ 'profile.exp.empty.body': '주요 경력을 추가하면 적합도 분석과 자기소개서 품질이 올라갑니다.',
99
+ 'profile.exp.editTitle': '수정',
100
+ 'profile.exp.deleteTitle': '삭제',
101
+ 'profile.exp.delete.title': '경력 삭제',
102
+ 'profile.exp.delete.message': '"{{company}}" 경력을 삭제할까요?',
103
+ 'profile.exp.delete.confirm': '삭제',
104
+ 'profile.exp.deleted': '경력을 삭제했어요.',
105
+ 'profile.exp.modal.addTitle': '경력 추가',
106
+ 'profile.exp.modal.editTitle': '경력 수정',
107
+ 'profile.exp.ph.company': '회사명 (필수)',
108
+ 'profile.exp.ph.role': '직무 / 직책',
109
+ 'profile.exp.ph.empType': '정규직 / 계약직 / 인턴 / 프리랜서',
110
+ 'profile.exp.ph.month': 'YYYY-MM',
111
+ 'profile.exp.ph.desc': '담당 업무 / 역할',
112
+ 'profile.exp.ph.achievements': '결제 전환율 12% 개선\n월 배포 횟수 3배 증가',
113
+ 'profile.exp.ph.tech': 'TypeScript, Node.js, PostgreSQL',
114
+ 'profile.exp.field.company': '회사',
115
+ 'profile.exp.field.role': '직무',
116
+ 'profile.exp.field.empType': '고용형태',
117
+ 'profile.exp.field.start': '시작 (YYYY-MM)',
118
+ 'profile.exp.field.end': '종료 (YYYY-MM)',
119
+ 'profile.exp.field.isCurrent': '현재 재직 중',
120
+ 'profile.exp.field.desc': '업무 설명',
121
+ 'profile.exp.field.achievements': '주요 성과',
122
+ 'profile.exp.field.achievementsHint': '한 줄에 하나씩. 정량 지표를 함께 적으면 좋아요.',
123
+ 'profile.exp.field.tech': '사용 기술',
124
+ 'profile.exp.field.techHint': '쉼표(,)로 구분',
125
+ 'profile.exp.cancel': '취소',
126
+ 'profile.exp.saveNew': '경력 추가',
127
+ 'profile.exp.saveEdit': '경력 저장',
128
+ 'profile.exp.validation.company': '회사명을 입력해 주세요.',
129
+ 'profile.exp.added': '경력을 추가했어요.',
130
+ 'profile.exp.updated': '경력을 수정했어요.',
131
+
132
+ // projects card
133
+ 'profile.proj.title': '프로젝트',
134
+ 'profile.proj.add': '프로젝트 추가',
135
+ 'profile.proj.count': '{{count}}건',
136
+ 'profile.proj.empty.title': '등록된 프로젝트가 없어요',
137
+ 'profile.proj.empty.body': '대표 프로젝트를 정리해 두면 자기소개서·면접에서 구체적인 근거로 활용돼요.',
138
+ 'profile.proj.openLink': '링크 열기',
139
+ 'profile.proj.editTitle': '수정',
140
+ 'profile.proj.deleteTitle': '삭제',
141
+ 'profile.proj.delete.title': '프로젝트 삭제',
142
+ 'profile.proj.delete.message': '"{{name}}" 프로젝트를 삭제할까요?',
143
+ 'profile.proj.delete.confirm': '삭제',
144
+ 'profile.proj.deleted': '프로젝트를 삭제했어요.',
145
+ 'profile.proj.modal.addTitle': '프로젝트 추가',
146
+ 'profile.proj.modal.editTitle': '프로젝트 수정',
147
+ 'profile.proj.ph.name': '프로젝트명 (필수)',
148
+ 'profile.proj.ph.role': '맡은 역할',
149
+ 'profile.proj.ph.month': 'YYYY-MM',
150
+ 'profile.proj.ph.url': 'https://...',
151
+ 'profile.proj.ph.desc': '프로젝트 개요 / 목적',
152
+ 'profile.proj.ph.highlights': '핵심 성과를 한 줄에 하나씩',
153
+ 'profile.proj.ph.tech': 'React, AWS, GraphQL',
154
+ 'profile.proj.field.name': '프로젝트명',
155
+ 'profile.proj.field.role': '역할',
156
+ 'profile.proj.field.url': '링크',
157
+ 'profile.proj.field.start': '시작 (YYYY-MM)',
158
+ 'profile.proj.field.end': '종료 (YYYY-MM)',
159
+ 'profile.proj.field.desc': '설명',
160
+ 'profile.proj.field.highlights': '주요 내용',
161
+ 'profile.proj.field.highlightsHint': '한 줄에 하나씩',
162
+ 'profile.proj.field.tech': '사용 기술',
163
+ 'profile.proj.field.techHint': '쉼표(,)로 구분',
164
+ 'profile.proj.cancel': '취소',
165
+ 'profile.proj.saveNew': '프로젝트 추가',
166
+ 'profile.proj.saveEdit': '프로젝트 저장',
167
+ 'profile.proj.validation.name': '프로젝트명을 입력해 주세요.',
168
+ 'profile.proj.added': '프로젝트를 추가했어요.',
169
+ 'profile.proj.updated': '프로젝트를 수정했어요.',
170
+
171
+ // skills card
172
+ 'profile.skill.title': '기술',
173
+ 'profile.skill.add': '기술 추가',
174
+ 'profile.skill.count': '{{count}}개',
175
+ 'profile.skill.empty.title': '등록된 기술이 없어요',
176
+ 'profile.skill.empty.body': '보유 기술을 정리해 두면 공고 키워드 매칭이 정확해집니다.',
177
+ 'profile.skill.uncategorized': '기타',
178
+ 'profile.skill.years': '{{count}}년',
179
+ 'profile.skill.editTitle': '수정',
180
+ 'profile.skill.deleteTitle': '삭제',
181
+ 'profile.skill.delete.title': '기술 삭제',
182
+ 'profile.skill.delete.message': '"{{name}}"을(를) 삭제할까요?',
183
+ 'profile.skill.delete.confirm': '삭제',
184
+ 'profile.skill.deleted': '기술을 삭제했어요.',
185
+ 'profile.skill.modal.addTitle': '기술 추가',
186
+ 'profile.skill.modal.editTitle': '기술 수정',
187
+ 'profile.skill.ph.name': '기술명 (필수)',
188
+ 'profile.skill.ph.category': '언어 / 프레임워크 / 툴 / 소프트스킬',
189
+ 'profile.skill.ph.level': '상 / 중 / 하 또는 자유 서술',
190
+ 'profile.skill.ph.years': '연차',
191
+ 'profile.skill.field.name': '기술명',
192
+ 'profile.skill.field.category': '분류',
193
+ 'profile.skill.field.level': '숙련도',
194
+ 'profile.skill.field.years': '연차',
195
+ 'profile.skill.cancel': '취소',
196
+ 'profile.skill.saveNew': '기술 추가',
197
+ 'profile.skill.saveEdit': '기술 저장',
198
+ 'profile.skill.validation.name': '기술명을 입력해 주세요.',
199
+ 'profile.skill.added': '기술을 추가했어요.',
200
+ 'profile.skill.updated': '기술을 수정했어요.',
201
+ };