careermate 0.1.0

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/README.md +256 -0
  2. package/THIRD_PARTY_NOTICES.md +40 -0
  3. package/apps/mcp/src/index.ts +66 -0
  4. package/apps/web/DESIGN_GUIDE.md +105 -0
  5. package/apps/web/UI_CONTRACT.md +44 -0
  6. package/apps/web/public/app.js +118 -0
  7. package/apps/web/public/fonts/PretendardVariable.woff2 +0 -0
  8. package/apps/web/public/index.html +41 -0
  9. package/apps/web/public/lib.js +282 -0
  10. package/apps/web/public/pages/applications.js +98 -0
  11. package/apps/web/public/pages/documents.js +446 -0
  12. package/apps/web/public/pages/home.js +263 -0
  13. package/apps/web/public/pages/interview.js +230 -0
  14. package/apps/web/public/pages/jobs.js +494 -0
  15. package/apps/web/public/pages/profile.js +576 -0
  16. package/apps/web/public/pages/settings.js +233 -0
  17. package/apps/web/public/styles.css +426 -0
  18. package/apps/web/src/exports.ts +68 -0
  19. package/apps/web/src/http.ts +180 -0
  20. package/apps/web/src/index.ts +49 -0
  21. package/apps/web/src/info.ts +50 -0
  22. package/apps/web/src/routes.ts +350 -0
  23. package/apps/web/src/security.ts +102 -0
  24. package/apps/web/src/server.ts +141 -0
  25. package/apps/web/src/settings.ts +88 -0
  26. package/bin/careermate.mjs +74 -0
  27. package/dist/careermate.mcpb +0 -0
  28. package/dist/install-page/index.html +474 -0
  29. package/dist/install-page/style.css +391 -0
  30. package/dist/install-page/vercel.json +20 -0
  31. package/dist/mcp-smoke.err +3 -0
  32. package/dist/mcp.mjs +23704 -0
  33. package/dist/mcpb-stage/README.md +219 -0
  34. package/dist/mcpb-stage/dist/install-page/index.html +434 -0
  35. package/dist/mcpb-stage/dist/install-page/style.css +407 -0
  36. package/dist/mcpb-stage/dist/install-page/vercel.json +20 -0
  37. package/dist/mcpb-stage/dist/mcp.mjs +23704 -0
  38. package/dist/mcpb-stage/dist/public/app.js +118 -0
  39. package/dist/mcpb-stage/dist/public/fonts/PretendardVariable.woff2 +0 -0
  40. package/dist/mcpb-stage/dist/public/index.html +41 -0
  41. package/dist/mcpb-stage/dist/public/lib.js +282 -0
  42. package/dist/mcpb-stage/dist/public/pages/applications.js +98 -0
  43. package/dist/mcpb-stage/dist/public/pages/documents.js +446 -0
  44. package/dist/mcpb-stage/dist/public/pages/home.js +263 -0
  45. package/dist/mcpb-stage/dist/public/pages/interview.js +230 -0
  46. package/dist/mcpb-stage/dist/public/pages/jobs.js +494 -0
  47. package/dist/mcpb-stage/dist/public/pages/profile.js +576 -0
  48. package/dist/mcpb-stage/dist/public/pages/settings.js +233 -0
  49. package/dist/mcpb-stage/dist/public/styles.css +420 -0
  50. package/dist/mcpb-stage/dist/web.mjs +7240 -0
  51. package/dist/mcpb-stage/manifest.json +40 -0
  52. package/dist/public/app.js +118 -0
  53. package/dist/public/fonts/PretendardVariable.woff2 +0 -0
  54. package/dist/public/index.html +41 -0
  55. package/dist/public/lib.js +282 -0
  56. package/dist/public/pages/applications.js +98 -0
  57. package/dist/public/pages/documents.js +446 -0
  58. package/dist/public/pages/home.js +263 -0
  59. package/dist/public/pages/interview.js +230 -0
  60. package/dist/public/pages/jobs.js +494 -0
  61. package/dist/public/pages/profile.js +576 -0
  62. package/dist/public/pages/settings.js +233 -0
  63. package/dist/public/styles.css +426 -0
  64. package/dist/web.mjs +7240 -0
  65. package/docs/ARCHITECTURE.md +208 -0
  66. package/docs/CHANGES_V1.md +103 -0
  67. package/docs/DATA_MODEL.md +460 -0
  68. package/docs/DECISIONS.md +277 -0
  69. package/docs/DEMO.md +242 -0
  70. package/docs/INSTALL.md +148 -0
  71. package/docs/INSTALL_AND_USAGE.md +99 -0
  72. package/docs/MCP_TOOLS.md +233 -0
  73. package/docs/ROADMAP.md +134 -0
  74. package/docs/START_WORKFLOW.md +125 -0
  75. package/docs/SUPPORTED_AI_APPS.md +60 -0
  76. package/docs/TODO.md +57 -0
  77. package/docs/UX_NOTES.md +247 -0
  78. package/docs/WORKFLOWS.md +200 -0
  79. package/install-page/index.html +474 -0
  80. package/install-page/style.css +391 -0
  81. package/install-page/vercel.json +20 -0
  82. package/package.json +68 -0
  83. package/packages/core/src/context.ts +74 -0
  84. package/packages/core/src/index.ts +8 -0
  85. package/packages/core/src/onboarding.ts +81 -0
  86. package/packages/core/src/services.ts +146 -0
  87. package/packages/core/src/summary.ts +104 -0
  88. package/packages/db/src/connection.ts +46 -0
  89. package/packages/db/src/index.ts +22 -0
  90. package/packages/db/src/paths.ts +41 -0
  91. package/packages/db/src/repositories.ts +828 -0
  92. package/packages/db/src/runtime.ts +58 -0
  93. package/packages/db/src/schema.ts +189 -0
  94. package/packages/exporters/src/html.ts +113 -0
  95. package/packages/exporters/src/index.ts +364 -0
  96. package/packages/exporters/src/markdown.ts +178 -0
  97. package/packages/mcp-tools/src/bridge.ts +83 -0
  98. package/packages/mcp-tools/src/index.ts +8 -0
  99. package/packages/mcp-tools/src/result.ts +49 -0
  100. package/packages/mcp-tools/src/tools.ts +455 -0
  101. package/packages/parsers/src/html.ts +86 -0
  102. package/packages/parsers/src/index.ts +228 -0
  103. package/packages/parsers/src/keywords.ts +151 -0
  104. package/packages/prompts/src/humanize.ts +59 -0
  105. package/packages/prompts/src/index.ts +82 -0
  106. package/packages/prompts/src/install.ts +43 -0
  107. package/packages/prompts/src/onboarding.ts +35 -0
  108. package/packages/prompts/src/system.ts +53 -0
  109. package/packages/shared/src/enums.ts +103 -0
  110. package/packages/shared/src/index.ts +18 -0
  111. package/packages/shared/src/schemas.ts +398 -0
  112. package/packages/workflows/src/definitions.ts +107 -0
  113. package/packages/workflows/src/index.ts +39 -0
  114. package/scripts/build-dist.mjs +62 -0
  115. package/scripts/build-mcpb.mjs +70 -0
  116. package/scripts/doctor.ts +81 -0
  117. package/scripts/init.ts +342 -0
  118. package/scripts/mcp-probe.ts +55 -0
  119. package/scripts/migrate.ts +6 -0
  120. package/scripts/run.mjs +33 -0
  121. package/scripts/seed.ts +129 -0
  122. package/scripts/test.ts +117 -0
  123. package/scripts/ui-smoke.ts +73 -0
  124. package/tsconfig.json +29 -0
@@ -0,0 +1,219 @@
1
+ # CareerMate
2
+
3
+ **MCP 우선(MCP-first) 로컬 커리어 관리 도구.** ChatGPT·Claude·Gemini 같은 당신의 AI를 인터페이스로 쓰고, CareerMate는 당신의 커리어 데이터를 **이 컴퓨터에만** 저장한 뒤 MCP로 노출합니다.
4
+
5
+ ---
6
+
7
+ ## 핵심 철학
8
+
9
+ - **MCP 우선** — 새 앱 사용법을 익힐 필요가 없습니다. 평소 쓰던 AI(ChatGPT·Claude·Gemini)와 대화하면, 그 AI가 CareerMate의 로컬 MCP 도구를 호출해 당신의 커리어 DB를 읽고 씁니다.
10
+ - **로컬 우선** — 모든 데이터는 당신의 컴퓨터에만 저장됩니다(`~/.careermate`). 외부 서버로 전송하지 않습니다. 대시보드 웹 서버는 `127.0.0.1`(이 컴퓨터)에만 연결됩니다.
11
+ - **LLM 비내장** — CareerMate 안에는 AI가 들어 있지 않습니다. 분석·글쓰기 같은 “생각하는 일”은 **당신의 AI**가 하고, CareerMate는 데이터를 **안전하게 보관·조회**하는 역할만 합니다.
12
+
13
+ > 쉽게 말해: 당신의 AI가 “두뇌”, CareerMate는 그 두뇌가 꺼내 쓰는 “커리어 서랍장”입니다.
14
+
15
+ ---
16
+
17
+ ## 무엇을 하나요?
18
+
19
+ 프로필·이력서·자기소개서·채용공고·지원 현황·면접 준비를 로컬 SQLite에 구조화해 저장하고, AI 어시스턴트가 MCP 도구로 그 데이터를 읽고 씁니다. 전형적인 흐름은 이렇습니다.
20
+
21
+ 1. 프로필·이력서 등록 → 2. 채용공고 저장·파싱 → 3. 적합도(핏) 분석 → 4. 맞춤 자기소개서 작성·버전 관리 → 5. 지원 상태 관리 → 6. 면접 준비
22
+
23
+ 언제든 대시보드를 열어 저장된 데이터를 눈으로 확인할 수 있습니다. 자세한 단계별 런북은 [`docs/START_WORKFLOW.md`](docs/START_WORKFLOW.md)를 참고하세요.
24
+
25
+ ---
26
+
27
+ ## 주요 기능
28
+
29
+ - **AI와 대화로 모든 작업** — MCP 도구 23개로 온보딩·프로필·이력서·자소서·공고·핏 분석·지원 상태·면접 준비까지 처리.
30
+ - **지원 상태 8단계 관리** — `draft`(작성 중) · `planned`(지원 예정) · `applied`(지원 완료) · `document_passed`(서류 합격) · `interview`(면접 진행) · `final_passed`(최종 합격) · `rejected`(불합격) · `on_hold`(보류). `document_passed` 이상에서 면접 준비가 해금됩니다.
31
+ - **자기소개서 버전 관리** — 공고별로 자소서 버전을 쌓고 타임라인으로 비교, 파일로 내보내기.
32
+ - **채용공고 파싱** — 붙여넣은 공고 텍스트를 구조화해 저장.
33
+ - **로컬 대시보드** — 프레임워크·CDN 없는 바닐라 JS로 만든 7페이지 웹 화면(다크모드 지원).
34
+ - **데이터 내보내기/삭제** — Settings 페이지에서 직접.
35
+
36
+ ---
37
+
38
+ ## 구성
39
+
40
+ 두 개의 로컬 프로세스가 같은 데이터베이스를 공유합니다.
41
+
42
+ | 프로세스 | 실행 | 역할 |
43
+ | --- | --- | --- |
44
+ | **대시보드 웹 서버** | `npm start` | `http://127.0.0.1:4319` — 내 데이터를 눈으로 확인·관리. `127.0.0.1`에만 바인딩. |
45
+ | **MCP 서버** | `npm run mcp` | stdio 기반. 보통 AI 클라이언트가 자동 실행. 도구 23개 제공. |
46
+
47
+ ---
48
+
49
+ ## 빠른 시작
50
+
51
+ ### 요구사항
52
+
53
+ - **Node.js >= 22.5.0** — 내장 `node:sqlite`를 사용하므로 컴파일러나 네이티브 빌드가 **필요 없습니다**.
54
+ - 버전 확인:
55
+ ```bash
56
+ node --version
57
+ ```
58
+ `v22.5.0` 미만이거나 명령을 찾지 못하면 https://nodejs.org 에서 최신 LTS를 설치하세요.
59
+
60
+ ### 1) 설치
61
+
62
+ 빌드 단계가 없습니다. TypeScript는 `tsx`로 바로 실행됩니다.
63
+
64
+ ```bash
65
+ npm install
66
+ ```
67
+
68
+ ### 2) 대시보드 실행
69
+
70
+ ```bash
71
+ npm start
72
+ ```
73
+
74
+ - 기본 주소는 `http://127.0.0.1:4319` 이며 브라우저가 자동으로 열립니다.
75
+ - 포트가 사용 중이면 자동으로 다음 빈 포트로 폴백하니, 터미널에 출력된 실제 주소를 확인하세요.
76
+ - 종료는 터미널에서 `Ctrl+C`.
77
+
78
+ ### 3) 데모 데이터로 둘러보기(선택)
79
+
80
+ 빈 화면이 낯설다면 예시 데이터를 넣어 기능을 미리 체험할 수 있습니다.
81
+
82
+ ```bash
83
+ npm run seed
84
+ ```
85
+
86
+ ### 4) AI(MCP)에 연결
87
+
88
+ 당신의 AI가 CareerMate를 사용하려면 AI 클라이언트에 MCP 서버를 등록해야 합니다. Claude Desktop·ChatGPT·Cursor 등 클라이언트별 설정과 검증 방법은 **[`docs/INSTALL.md`](docs/INSTALL.md)** 를 따라가세요.
89
+
90
+ ---
91
+
92
+ ## 대시보드 7페이지
93
+
94
+ | 페이지 | 설명 |
95
+ | --- | --- |
96
+ | **Home** | 현재 상태·다음 할 일 한눈에. |
97
+ | **Profile** | 프로필, 경력(experiences), 프로젝트, 스킬 관리. |
98
+ | **Jobs** | 저장한 채용공고 목록과 상세(공고 내용·핏 분석). |
99
+ | **Applications** | 지원 현황을 8단계 상태로 보는 칸반 보드. |
100
+ | **Documents** | 자기소개서 버전 타임라인과 이력서. |
101
+ | **Interview** | 면접 준비 자료(`document_passed` 이상에서 해금). |
102
+ | **Settings** | 데이터 내보내기·삭제, 환경 정보. |
103
+
104
+ 다크모드를 지원합니다.
105
+
106
+ ---
107
+
108
+ ## MCP 도구 한눈에 (23개)
109
+
110
+ | 분류 | 도구 |
111
+ | --- | --- |
112
+ | 온보딩 | `get_onboarding_status` · `start_onboarding` |
113
+ | 프로필 | `save_profile` · `get_profile` · `update_profile` |
114
+ | 이력서 | `add_resume` · `get_resumes` |
115
+ | 자기소개서 | `add_cover_letter` · `get_cover_letters` · `save_cover_letter_version` · `export_cover_letter` |
116
+ | 채용공고 | `save_job_posting` · `get_job_posting` · `list_jobs` · `parse_job_posting` |
117
+ | 핵심 컨텍스트 | **`get_application_context`** (지원에 필요한 맥락을 한 번에 모아줌) |
118
+ | 핏 분석 | `save_fit_analysis` |
119
+ | 지원 상태 | `update_application_status` |
120
+ | 면접 준비 | `save_interview_prep` |
121
+ | 대시보드/활동 | `open_dashboard` · `open_application` · `list_recent_activity` · `get_workflow_guide` |
122
+
123
+ 이 도구들 위에 5종의 워크플로우(`onboarding`, `analyze_job`, `write_cover_letter`, `manage_application_status`, `prepare_interview`)가 정의되어 있어, AI가 단계별로 자연스럽게 안내합니다.
124
+
125
+ ---
126
+
127
+ ## 프로젝트 구조
128
+
129
+ ```
130
+ CareerMate/
131
+ ├─ apps/
132
+ │ ├─ web/ # 대시보드 + 로컬 API 서버 (npm start)
133
+ │ └─ mcp/ # MCP stdio 서버 (npm run mcp)
134
+ ├─ packages/
135
+ │ ├─ shared/ # 공용 타입·zod 스키마·유틸
136
+ │ ├─ db/ # node:sqlite DB 접근·스키마·마이그레이션
137
+ │ ├─ core/ # 도메인 유스케이스
138
+ │ ├─ mcp-tools/ # MCP 도구 23개 정의
139
+ │ ├─ exporters/ # 내보내기(자소서 등)
140
+ │ ├─ parsers/ # 채용공고 파싱
141
+ │ ├─ prompts/ # 프롬프트·안내 문구
142
+ │ └─ workflows/ # 워크플로우 5종
143
+ ├─ install-page/ # 설치 안내 페이지
144
+ ├─ docs/ # 문서
145
+ ├─ scripts/ # migrate / seed / doctor / test 등
146
+ └─ package.json
147
+ ```
148
+
149
+ - **스택**: TypeScript(ESM), 무빌드 실행(`tsx`), 내장 `node:sqlite`(네이티브 컴파일 없음), `zod`, `@modelcontextprotocol/sdk`. 대시보드는 프레임워크·CDN 없는 바닐라 JS + 자체 CSS 디자인 시스템.
150
+ - **데이터 저장소**: 12개 테이블(profile, experiences, projects, skills, documents, cover_letters, cover_letter_versions, jobs, fit_analyses, applications, interview_preps, activities). 두 프로세스(대시보드·MCP)가 **같은 SQLite DB**를 공유합니다.
151
+
152
+ ---
153
+
154
+ ## npm 스크립트
155
+
156
+ | 스크립트 | 설명 |
157
+ | --- | --- |
158
+ | `npm install` | 의존성 설치 (빌드 없음) |
159
+ | `npm start` | 대시보드 웹 서버 실행 |
160
+ | `npm run dev` | 대시보드 실행 (파일 변경 시 자동 재시작) |
161
+ | `npm run mcp` | MCP 서버 실행 (stdio) |
162
+ | `npm run migrate` | DB 생성/업그레이드 |
163
+ | `npm run doctor` | 설치/환경 점검 |
164
+ | `npm run seed` | 예시 데이터 삽입 |
165
+ | `npm test` | E2E 테스트 실행 |
166
+ | `npm run test:ui` | Playwright UI 스모크 테스트 |
167
+ | `npm run typecheck` | 타입 검사 (`tsc --noEmit`) |
168
+
169
+ ---
170
+
171
+ ## 데이터 위치 & 환경변수
172
+
173
+ - 기본 폴더: `~/.careermate` (Windows: `%USERPROFILE%\.careermate`).
174
+ - `careermate.sqlite` — 데이터베이스 파일
175
+ - `exports/` — 내보낸 파일
176
+ - `backups/` — 백업
177
+ - `uploads/` — 업로드 파일
178
+ - `server.json` — 실행 중 핸드셰이크 정보
179
+ - 환경변수로 동작을 바꿀 수 있습니다.
180
+ - `CAREERMATE_DATA_DIR` — 데이터 폴더 위치 변경
181
+ - `CAREERMATE_PORT` — 대시보드 포트 고정
182
+ - `CAREERMATE_NO_OPEN` — 시작 시 브라우저 자동 열기 끄기
183
+
184
+ ---
185
+
186
+ ## 보안 / 프라이버시
187
+
188
+ - **로컬 전용 바인딩** — 대시보드 서버는 `127.0.0.1`(loopback)에만 바인딩되어 외부에서 접근할 수 없습니다.
189
+ - **DNS 리바인딩 차단** — Host 허용목록으로 검증.
190
+ - **변경 요청 보호** — CSRF 세션 토큰(HTML `meta`로 주입), 외부 Origin 차단.
191
+ - **정적 파일 보호** — 경로 traversal(상위 폴더 탈출) 차단.
192
+ - **본문 크기 제한** — 요청 본문 8MB 제한.
193
+ - **민감 정보 비노출** — 이력서·자기소개서 본문은 로그나 에러 응답에 노출되지 않습니다.
194
+ - **외부 전송 없음** — MCP 서버는 네트워크 호출을 하지 않으며, 모든 데이터는 당신의 컴퓨터에만 남습니다. 내보내기·삭제는 대시보드 **Settings**에서 직접 할 수 있습니다.
195
+
196
+ ---
197
+
198
+ ## 문서
199
+
200
+ - [`docs/INSTALL.md`](docs/INSTALL.md) — 설치 및 AI 클라이언트(MCP) 연결 가이드.
201
+ - [`docs/START_WORKFLOW.md`](docs/START_WORKFLOW.md) — 등록부터 면접 준비까지 단계별 작업 런북.
202
+
203
+ ---
204
+
205
+ ## 테스트
206
+
207
+ ```bash
208
+ npm test # E2E 테스트 (보안·업무흐름·MCP stdio·대시보드↔MCP 동일 DB 양방향)
209
+ npm run test:ui # 대시보드 페이지 렌더 스모크 (Playwright)
210
+ npm run typecheck
211
+ ```
212
+
213
+ 기타 유용한 스크립트: `npm run migrate`(DB 생성/업그레이드), `npm run seed`(예시 데이터), `npm run doctor`(설치·환경 점검).
214
+
215
+ ---
216
+
217
+ ## 라이선스
218
+
219
+ MIT.