careermate 0.0.1

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 (137) hide show
  1. package/AGENTS.md +33 -0
  2. package/INSTALL.md +230 -0
  3. package/LICENSE +21 -0
  4. package/README.md +532 -0
  5. package/THIRD_PARTY_NOTICES.md +57 -0
  6. package/bin/careermate.mjs +77 -0
  7. package/dist/career-os/README.md +78 -0
  8. package/dist/career-os/eop/cover-letter.md +46 -0
  9. package/dist/career-os/eop/fit-analysis.md +48 -0
  10. package/dist/career-os/eop/interview-prep.md +39 -0
  11. package/dist/career-os/eop/job-analysis.md +42 -0
  12. package/dist/career-os/eop/profile-extraction.md +37 -0
  13. package/dist/career-os/knowledge/ats.md +131 -0
  14. package/dist/career-os/knowledge/company-research.md +137 -0
  15. package/dist/career-os/knowledge/cover-letter.md +135 -0
  16. package/dist/career-os/knowledge/fit-matching.md +121 -0
  17. package/dist/career-os/knowledge/human-writing.md +118 -0
  18. package/dist/career-os/knowledge/interview-behavioral.md +132 -0
  19. package/dist/career-os/knowledge/interview-technical.md +126 -0
  20. package/dist/career-os/knowledge/linkedin-profile.md +152 -0
  21. package/dist/career-os/knowledge/networking-referrals.md +166 -0
  22. package/dist/career-os/knowledge/offer-evaluation-decision.md +121 -0
  23. package/dist/career-os/knowledge/onboarding-first-90-days.md +126 -0
  24. package/dist/career-os/knowledge/portfolio.md +121 -0
  25. package/dist/career-os/knowledge/recruiter-screen.md +105 -0
  26. package/dist/career-os/knowledge/rejection-triage-iteration.md +115 -0
  27. package/dist/career-os/knowledge/resume.md +123 -0
  28. package/dist/career-os/knowledge/salary-negotiation.md +123 -0
  29. package/dist/career-os/knowledge/verifiers/ats-compat.md +64 -0
  30. package/dist/career-os/knowledge/verifiers/consistency.md +61 -0
  31. package/dist/career-os/knowledge/verifiers/human-voice.md +82 -0
  32. package/dist/career-os/knowledge/verifiers/recency-staleness.md +72 -0
  33. package/dist/career-os/knowledge/verifiers/responsiveness-on-target.md +82 -0
  34. package/dist/career-os/knowledge/verifiers/truthfulness.md +67 -0
  35. package/dist/doctor.mjs +79094 -0
  36. package/dist/mcp.mjs +96108 -0
  37. package/dist/migrate.mjs +4735 -0
  38. package/dist/pdf.worker.min.mjs +28 -0
  39. package/dist/public/app.js +150 -0
  40. package/dist/public/fonts/PretendardVariable.woff2 +0 -0
  41. package/dist/public/icon-180.png +0 -0
  42. package/dist/public/index.html +52 -0
  43. package/dist/public/lib.js +394 -0
  44. package/dist/public/pages/applications.js +107 -0
  45. package/dist/public/pages/documents.js +467 -0
  46. package/dist/public/pages/home.js +261 -0
  47. package/dist/public/pages/interview.js +227 -0
  48. package/dist/public/pages/jobs.js +493 -0
  49. package/dist/public/pages/profile.js +556 -0
  50. package/dist/public/pages/settings.js +240 -0
  51. package/dist/public/styles.css +498 -0
  52. package/dist/site/analytics.js +97 -0
  53. package/dist/site/favicon.svg +1 -0
  54. package/dist/site/fonts/PretendardVariable.woff2 +0 -0
  55. package/dist/site/icon-180.png +0 -0
  56. package/dist/site/icon-512.png +0 -0
  57. package/dist/site/index.html +598 -0
  58. package/dist/site/landing.js +54 -0
  59. package/dist/site/llms-install.txt +217 -0
  60. package/dist/site/robots.txt +4 -0
  61. package/dist/site/sitemap.xml +21 -0
  62. package/dist/site/start.html +326 -0
  63. package/dist/site/style.css +550 -0
  64. package/dist/site/vercel.json +20 -0
  65. package/dist/web.mjs +46852 -0
  66. package/docs/FAQ.md +101 -0
  67. package/docs/MCP_TOOLS.md +311 -0
  68. package/docs/README.md +28 -0
  69. package/docs/START_WORKFLOW.md +137 -0
  70. package/docs/SUPPORTED_AI_APPS.md +112 -0
  71. package/docs/WORKFLOWS.md +202 -0
  72. package/docs/career-os/README.md +78 -0
  73. package/docs/career-os/eop/cover-letter.md +46 -0
  74. package/docs/career-os/eop/fit-analysis.md +48 -0
  75. package/docs/career-os/eop/interview-prep.md +39 -0
  76. package/docs/career-os/eop/job-analysis.md +42 -0
  77. package/docs/career-os/eop/profile-extraction.md +37 -0
  78. package/docs/career-os/knowledge/ats.md +131 -0
  79. package/docs/career-os/knowledge/company-research.md +137 -0
  80. package/docs/career-os/knowledge/cover-letter.md +135 -0
  81. package/docs/career-os/knowledge/fit-matching.md +121 -0
  82. package/docs/career-os/knowledge/human-writing.md +118 -0
  83. package/docs/career-os/knowledge/interview-behavioral.md +132 -0
  84. package/docs/career-os/knowledge/interview-technical.md +126 -0
  85. package/docs/career-os/knowledge/linkedin-profile.md +152 -0
  86. package/docs/career-os/knowledge/networking-referrals.md +166 -0
  87. package/docs/career-os/knowledge/offer-evaluation-decision.md +121 -0
  88. package/docs/career-os/knowledge/onboarding-first-90-days.md +126 -0
  89. package/docs/career-os/knowledge/portfolio.md +121 -0
  90. package/docs/career-os/knowledge/recruiter-screen.md +105 -0
  91. package/docs/career-os/knowledge/rejection-triage-iteration.md +115 -0
  92. package/docs/career-os/knowledge/resume.md +123 -0
  93. package/docs/career-os/knowledge/salary-negotiation.md +123 -0
  94. package/docs/career-os/knowledge/verifiers/ats-compat.md +64 -0
  95. package/docs/career-os/knowledge/verifiers/consistency.md +61 -0
  96. package/docs/career-os/knowledge/verifiers/human-voice.md +82 -0
  97. package/docs/career-os/knowledge/verifiers/recency-staleness.md +72 -0
  98. package/docs/career-os/knowledge/verifiers/responsiveness-on-target.md +82 -0
  99. package/docs/career-os/knowledge/verifiers/truthfulness.md +67 -0
  100. package/package.json +89 -0
  101. package/packages/core/src/context.ts +74 -0
  102. package/packages/core/src/index.ts +8 -0
  103. package/packages/core/src/onboarding.ts +81 -0
  104. package/packages/core/src/services.ts +187 -0
  105. package/packages/core/src/summary.ts +104 -0
  106. package/packages/db/src/connection.ts +76 -0
  107. package/packages/db/src/index.ts +23 -0
  108. package/packages/db/src/paths.ts +52 -0
  109. package/packages/db/src/repositories.ts +891 -0
  110. package/packages/db/src/runtime.ts +58 -0
  111. package/packages/db/src/schema.ts +307 -0
  112. package/packages/exporters/src/html.ts +110 -0
  113. package/packages/exporters/src/index.ts +364 -0
  114. package/packages/exporters/src/markdown.ts +178 -0
  115. package/packages/knowledge/src/index.ts +168 -0
  116. package/packages/mcp-tools/src/bridge.ts +106 -0
  117. package/packages/mcp-tools/src/index.ts +17 -0
  118. package/packages/mcp-tools/src/result.ts +49 -0
  119. package/packages/mcp-tools/src/tools.ts +747 -0
  120. package/packages/mcp-tools/src/update.ts +330 -0
  121. package/packages/parsers/src/documents.ts +533 -0
  122. package/packages/parsers/src/html.ts +86 -0
  123. package/packages/parsers/src/index.ts +231 -0
  124. package/packages/parsers/src/keywords.ts +151 -0
  125. package/packages/prompts/src/humanize.ts +59 -0
  126. package/packages/prompts/src/index.ts +82 -0
  127. package/packages/prompts/src/install.ts +43 -0
  128. package/packages/prompts/src/onboarding.ts +35 -0
  129. package/packages/prompts/src/system.ts +57 -0
  130. package/packages/shared/src/build-info.ts +22 -0
  131. package/packages/shared/src/enums.ts +142 -0
  132. package/packages/shared/src/index.ts +19 -0
  133. package/packages/shared/src/schemas.ts +453 -0
  134. package/packages/workflows/src/definitions.ts +109 -0
  135. package/packages/workflows/src/index.ts +39 -0
  136. package/scripts/init.ts +371 -0
  137. package/tsconfig.json +32 -0
@@ -0,0 +1,326 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko" data-theme="dark">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <script>
7
+ (function () {
8
+ try {
9
+ var t = window.localStorage.getItem('careermate-theme') || window.localStorage.getItem('cf-theme');
10
+ document.documentElement.setAttribute('data-theme', t === 'light' || t === 'dark' ? t : 'dark');
11
+ } catch (e) { document.documentElement.setAttribute('data-theme', 'dark'); }
12
+ })();
13
+ </script>
14
+ <title>처음이세요? — CareerMate 시작하기</title>
15
+ <meta name="description" content="터미널이 뭔지 몰라도 괜찮아요. 쓰는 AI와 컴퓨터만 고르면, 당신에게 맞는 설치 길 하나를 처음부터 알려드립니다." />
16
+ <meta name="robots" content="index,follow" />
17
+ <link rel="icon" href="favicon.svg" type="image/svg+xml" />
18
+ <meta name="theme-color" content="#faf8f4" media="(prefers-color-scheme: light)" />
19
+ <meta name="theme-color" content="#14130f" media="(prefers-color-scheme: dark)" />
20
+ <link rel="preload" href="fonts/PretendardVariable.woff2" as="font" type="font/woff2" crossorigin />
21
+ <link rel="stylesheet" href="style.css" />
22
+ <!-- Privacy-friendly analytics for the marketing site only (never the local 127.0.0.1 app). -->
23
+ <script src="/analytics.js" defer></script>
24
+ <style>
25
+ /* 선택형 위저드 — start.html 전용. style.css 토큰 재사용. */
26
+ .wizard { max-width: 760px; margin: 0 auto; }
27
+ .q { margin: 0 0 1.6rem; }
28
+ .q__label { font-weight: 650; margin: 0 0 .7rem; font-size: 1.02rem; }
29
+ .q__label .num { color: var(--accent); margin-right: .4rem; }
30
+ .choices { display: grid; gap: .6rem; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
31
+ .choice { position: relative; display: block; cursor: pointer; border: 1.5px solid var(--border-strong);
32
+ border-radius: var(--radius); background: var(--surface); padding: .85rem 1rem; transition: border-color .12s, background .12s; }
33
+ .choice:hover { background: var(--surface-hover); }
34
+ .choice input { position: absolute; opacity: 0; pointer-events: none; }
35
+ .choice.is-sel { border-color: var(--accent); background: var(--accent-soft); }
36
+ .choice__t { font-weight: 600; display: block; }
37
+ .choice__s { color: var(--text-tertiary); font-size: .85rem; display: block; margin-top: .15rem; }
38
+ .result { display: none; margin-top: 2rem; padding-top: 1.6rem; border-top: 1px solid var(--border); }
39
+ .result.show { display: block; }
40
+ .path { display: none; }
41
+ .path.show { display: block; }
42
+ .os-win, .os-mac { display: none; }
43
+ .result[data-os="win"] .os-win { display: revert; }
44
+ .result[data-os="mac"] .os-mac { display: revert; }
45
+ li.step.os-win, li.step.os-mac { display: none; }
46
+ .result[data-os="win"] li.step.os-win { display: flex; }
47
+ .result[data-os="mac"] li.step.os-mac { display: flex; }
48
+ .path__tag { display: inline-block; font-size: .78rem; font-weight: 650; color: var(--accent);
49
+ background: var(--accent-soft); border: 1px solid var(--accent-border); border-radius: 999px; padding: .15rem .6rem; margin-bottom: .5rem; }
50
+ .filenote { margin-top: .9rem; font-size: .9rem; color: var(--text-secondary);
51
+ background: var(--bg-subtle); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: .7rem .9rem; }
52
+ .subcard { border: 1px solid var(--border); border-radius: var(--radius); padding: 1.1rem 1.2rem; margin: 1rem 0; background: var(--bg-elev); }
53
+ .hint { color: var(--text-tertiary); font-size: .9rem; }
54
+ </style>
55
+ </head>
56
+ <body>
57
+ <nav class="nav">
58
+ <a class="nav__brand" href="index.html#top">
59
+ <span class="nav__logo" aria-hidden="true">C</span>
60
+ <span class="nav__name">CareerMate</span>
61
+ </a>
62
+ <div class="nav__links">
63
+ <a href="index.html#how">동작 방식</a>
64
+ <a href="index.html#install">설치 전체</a>
65
+ </div>
66
+ <div class="nav__actions">
67
+ <button class="theme-toggle" id="theme-toggle" type="button" aria-label="다크 모드 전환" title="다크 모드 전환">
68
+ <svg class="i-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg>
69
+ <svg class="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/></svg>
70
+ </button>
71
+ </div>
72
+ </nav>
73
+
74
+ <main id="top">
75
+ <header class="hero hero--solo">
76
+ <div class="hero__main">
77
+ <span class="pill-badge"><span class="pill-badge__dot" aria-hidden="true"></span> 처음이세요?</span>
78
+ <h1 class="hero__title">터미널이 뭔지 몰라도 괜찮아요</h1>
79
+ <p class="hero__lede">
80
+ <strong>쓰는 AI</strong>와 <strong>컴퓨터</strong>만 고르면, 당신에게 맞는 설치 길 <strong>하나</strong>를 처음부터 알려드립니다.
81
+ </p>
82
+ </div>
83
+ </header>
84
+
85
+ <section class="section" style="padding-top:0">
86
+ <div class="wizard">
87
+ <!-- Q1 -->
88
+ <div class="q">
89
+ <p class="q__label"><span class="num">1</span>어떤 AI를 쓰고 있나요?</p>
90
+ <div class="choices" id="q-sub" role="radiogroup" aria-label="쓰는 AI">
91
+ <label class="choice"><input type="radio" name="sub" value="claude" />
92
+ <span class="choice__t">Claude 유료</span><span class="choice__s">Pro·Max 구독</span></label>
93
+ <label class="choice"><input type="radio" name="sub" value="chatgpt" />
94
+ <span class="choice__t">ChatGPT 유료</span><span class="choice__s">Plus 이상 구독</span></label>
95
+ <label class="choice"><input type="radio" name="sub" value="free" />
96
+ <span class="choice__t">무료 / 잘 모름</span><span class="choice__s">유료 구독 없음</span></label>
97
+ </div>
98
+ </div>
99
+ <!-- Q2 -->
100
+ <div class="q">
101
+ <p class="q__label"><span class="num">2</span>컴퓨터는요?</p>
102
+ <div class="choices" id="q-os" role="radiogroup" aria-label="운영체제" style="grid-template-columns:repeat(auto-fit,minmax(140px,1fr))">
103
+ <label class="choice"><input type="radio" name="os" value="win" />
104
+ <span class="choice__t">Windows</span></label>
105
+ <label class="choice"><input type="radio" name="os" value="mac" />
106
+ <span class="choice__t">Mac</span></label>
107
+ </div>
108
+ </div>
109
+
110
+ <p class="hint" id="prompt-pick">위 두 가지를 고르면 아래에 당신에게 맞는 길이 나타납니다.</p>
111
+
112
+ <!-- ============ 결과 ============ -->
113
+ <div class="result" id="result" aria-live="polite">
114
+
115
+ <!-- ===== Claude 유료 → Code 탭 ===== -->
116
+ <div class="path" data-sub="claude">
117
+ <span class="path__tag">당신에겐 — Claude "Code" 탭</span>
118
+ <h2>Claude 데스크톱 앱의 Code 탭으로</h2>
119
+ <p>이미 Claude를 구독 중이라 추가 비용 없이 가장 매끄럽습니다.<br />앱 안에서 끝나 별도 터미널이 필요 없습니다.</p>
120
+ <ol class="steps">
121
+ <li class="step"><div class="step__no">1</div><div class="step__body">
122
+ <h3>Claude 데스크톱 설치 → 로그인</h3>
123
+ <p><a href="https://claude.ai/download" rel="noopener" target="_blank">claude.ai/download</a>에서 받아 설치하고 본인 계정으로 로그인하세요.</p>
124
+ </div></li>
125
+ <li class="step os-win"><div class="step__no">2</div><div class="step__body">
126
+ <h3>(Windows) Git 설치</h3>
127
+ <p>Code 탭을 처음 열면 앱이 <strong>"Git is required"</strong>라고 안내합니다.<br /><a href="https://git-scm.com/download/win" rel="noopener" target="_blank">git-scm.com/download/win</a>에서 설치하고 앱을 다시 켜면 됩니다. (Mac은 필요 없습니다.)</p>
128
+ </div></li>
129
+ <li class="step"><div class="step__no">3</div><div class="step__body">
130
+ <h3>Code 탭에서 빈 폴더 선택</h3>
131
+ <p>상단의 <strong>Code</strong> 탭을 누르고, 새 폴더 하나(예: 문서/CareerMate)를 작업 폴더로 고르세요.<br />이 폴더가 CareerMate 작업실이 됩니다.</p>
132
+ </div></li>
133
+ <li class="step"><div class="step__no">4</div><div class="step__body">
134
+ <h3>이 문장 한 번 붙여넣기</h3>
135
+ <p class="paste-note">💬 Code 탭의 <strong>대화창에</strong> 붙여넣으세요 — 터미널 명령이 아니에요. 이 문장은 공개 안내 페이지만 읽어 설치하며, <strong>당신의 이력서·개인정보는 외부로 올라가지 않아요.</strong></p>
136
+ <div class="code"><button class="copy-btn" type="button" data-copy-target="p-claude">복사</button>
137
+ <pre id="p-claude">https://careermate.life/llms-install.txt 를 읽고, 그 안내대로 CareerMate를 이 폴더에 설치하고 연결해줘. 데이터도 이 폴더의 .cm/data 안에 저장하고, Node 설치처럼 시스템에 바꿀 게 있으면 실행 전에 먼저 알려줘. 설치가 끝나면 앱 재시작 방법과 이력서를 주는 법, 대시보드 주소(http://127.0.0.1:4319)도 알려줘.</pre></div>
138
+ <p class="step__tip"><strong>Node가 없어도 됩니다.</strong> 필요하면 Claude가 먼저 확인하고 설치까지 도와줍니다.<br />직접 받으려면 아래 <strong>'필요한 프로그램 받기'</strong>의 Node.js를 보세요. 설치 중 뜨는 허용 창은 눌러 주세요.</p>
139
+ </div></li>
140
+ <li class="step"><div class="step__no">5</div><div class="step__body">
141
+ <h3>앱 재시작 → 확인</h3>
142
+ <p>Claude 앱을 완전히 껐다 켜고(처음 한 번 MCP 승인 허용), <strong>"커리어메이트 연결됐는지 확인해줘"</strong>라고 말하면 끝.</p>
143
+ <p class="recover"><strong>도구가 안 보이면?</strong> 앱을 트레이까지 <strong>완전히 종료</strong>했다 다시 켜고, 처음 뜬 승인 창을 허용했는지 확인하세요. 그래도 안 되면 <a href="index.html#install">파일로 설치(.mcpb)</a>나 설치 전체의 <a href="index.html#install">문제가 생겼을 때</a>를 보세요.</p>
144
+ </div></li>
145
+ </ol>
146
+ <div class="filenote">📎 <strong>이력서 넣는 법:</strong> 가장 쉬운 방법은 <strong>이력서 내용을 대화창에 붙여넣기</strong>입니다. 또는 작업 폴더에 파일을 넣고 <em>"이력서.pdf 읽어서 등록해줘"</em>라고 하거나 채팅에 직접 첨부하세요. (스캔본·보안 PDF는 안 읽힐 수 있습니다 → 그땐 텍스트로 붙여넣으세요.)</div>
147
+ <p class="hint" style="margin-top:.8rem">터미널이 부담되면 → <a href="index.html#install">파일 하나로 설치(.mcpb)</a>하는 방법도 있습니다(Claude 무료 기능).</p>
148
+ </div>
149
+
150
+ <!-- ===== ChatGPT 유료 → Codex CLI ===== -->
151
+ <div class="path" data-sub="chatgpt">
152
+ <span class="path__tag">당신에겐 — Codex CLI</span>
153
+ <h2>ChatGPT 구독으로 Codex에서</h2>
154
+ <p>ChatGPT는 <strong>Codex를 터미널(CLI)에서</strong> 씁니다 — 명령을 몇 줄 입력합니다.<br />Codex <strong>데스크톱 앱은 등록이 사라질 수 있어</strong> 권장하지 않습니다. 터미널이 부담되면 <a href="#" data-goto-free>터미널 없이 가능한 무료 길</a>도 있습니다.</p>
155
+ <ol class="steps">
156
+ <li class="step"><div class="step__no">1</div><div class="step__body">
157
+ <h3>Node.js 설치</h3>
158
+ <p class="os-win">Windows: PowerShell에 붙여넣기 →</p>
159
+ <div class="code os-win"><button class="copy-btn" type="button" data-copy-target="p-node-win">복사</button><pre id="p-node-win">winget install OpenJS.NodeJS.LTS</pre></div>
160
+ <p class="os-mac">Mac: 터미널에 붙여넣기(Homebrew 없으면 nodejs.org에서 LTS 설치) →</p>
161
+ <div class="code os-mac"><button class="copy-btn" type="button" data-copy-target="p-node-mac">복사</button><pre id="p-node-mac">brew install node</pre></div>
162
+ <p class="step__tip">명령이 어려우면 <a href="https://nodejs.org/" rel="noopener" target="_blank">nodejs.org</a>에서 <strong>설치 파일을 받아 더블클릭</strong>(계속 '다음')해도 됩니다.<br />설치 후 터미널을 새로 열고 <code>node --version</code>이 v22.5 이상인지 확인하세요. <strong>터미널 여는 법은 아래 도움말</strong>을 참고하세요.</p>
163
+ </div></li>
164
+ <li class="step"><div class="step__no">2</div><div class="step__body">
165
+ <h3>Codex CLI 설치 → ChatGPT 로그인</h3>
166
+ <div class="code"><button class="copy-btn" type="button" data-copy-target="p-codex-install">복사</button><pre id="p-codex-install">npm install -g @openai/codex</pre></div>
167
+ <p class="step__tip">설치 후 <code>codex</code>를 실행하면 ChatGPT 로그인 창이 열립니다(본인 구독 계정).</p>
168
+ </div></li>
169
+ <li class="step"><div class="step__no">3</div><div class="step__body">
170
+ <h3>빈 폴더에서 codex 실행 → 이 문장</h3>
171
+ <p class="paste-note">💬 실행한 <strong>codex 안에</strong> 붙여넣으세요 — AI에게 보내는 메시지예요(쉘 명령이 아님). 공개 안내만 읽어 설치하며, <strong>당신의 데이터는 외부로 올라가지 않아요.</strong></p>
172
+ <div class="code"><button class="copy-btn" type="button" data-copy-target="p-codex">복사</button>
173
+ <pre id="p-codex">https://careermate.life/llms-install.txt 를 읽고, 그 안내대로 CareerMate를 이 폴더에 설치하고 연결해줘. 데이터도 이 폴더의 .cm/data 안에 저장하고, Node 설치처럼 시스템에 바꿀 게 있으면 실행 전에 먼저 알려줘. 설치가 끝나면 앱 재시작 방법과 이력서를 주는 법, 대시보드 주소(http://127.0.0.1:4319)도 알려줘.</pre></div>
174
+ <p class="step__tip">설치 중 <strong>네트워크 허용</strong>을 물으면 한 번 허용하세요(npm 다운로드 때문).</p>
175
+ </div></li>
176
+ <li class="step"><div class="step__no">4</div><div class="step__body">
177
+ <h3>확인</h3>
178
+ <p>Codex 안에서 <code>/mcp</code>를 입력해 <code>careermate</code>가 보이면 연결 성공.</p>
179
+ <p class="recover"><strong>안 보이면?</strong> <code>node --version</code>이 v22.5 이상인지, Codex를 껐다 켰는지 확인하세요. 그래도 안 되면 설치 전체의 <a href="index.html#install">문제가 생겼을 때</a>를 참고하세요.</p>
180
+ </div></li>
181
+ </ol>
182
+ <div class="filenote">📎 <strong>이력서 넣는 법:</strong> 첨부 기능이 없으니, 작업 폴더에 파일을 넣고 <em>"./이력서.pdf 읽어서 등록해줘"</em>라고 하세요. PDF가 안 읽히면 내용을 <strong>텍스트로 붙여넣으세요.</strong></div>
183
+ </div>
184
+
185
+ <!-- ===== 무료/없음 → .mcpb 1순위, Antigravity 2순위 ===== -->
186
+ <div class="path" data-sub="free">
187
+ <span class="path__tag">당신에겐 — 무료로 시작</span>
188
+ <h2>유료 구독 없이 무료로</h2>
189
+ <p>유료 구독이 없어도 됩니다. 터미널이 필요 없는, 가장 쉬운 길부터 안내합니다.</p>
190
+
191
+ <div class="subcard">
192
+ <strong>① 1순위 — Claude 데스크톱 + 파일 설치(터미널 없이)</strong>
193
+ <p class="hint" style="margin:.3rem 0 .8rem">Claude 무료 계정이면 됩니다. 터미널·Node 없이 파일 하나로 끝.</p>
194
+ <ol class="steps">
195
+ <li class="step"><div class="step__no">1</div><div class="step__body">
196
+ <h3>Claude 데스크톱 설치 → 로그인(무료 OK)</h3>
197
+ <p><a href="https://claude.ai/download" rel="noopener" target="_blank">claude.ai/download</a>에서 받아 설치하고 로그인하세요.</p>
198
+ </div></li>
199
+ <li class="step"><div class="step__no">2</div><div class="step__body">
200
+ <h3>설치 파일 받기</h3>
201
+ <p><a class="btn btn--ghost" href="https://github.com/osntak/careermate/releases/latest/download/careermate.mcpb">careermate.mcpb 다운로드 (약 2&nbsp;MB)</a></p>
202
+ </div></li>
203
+ <li class="step"><div class="step__no">3</div><div class="step__body">
204
+ <h3>설정에서 추가</h3>
205
+ <p>Claude 데스크톱 → <strong>Settings → Extensions → Advanced settings → Install extension…</strong> 에서 받은 파일을 고르세요. <span class="hint">(Windows에서 더블클릭·드래그는 반응이 없을 수 있으니 이 메뉴를 쓰세요.)</span></p>
206
+ </div></li>
207
+ <li class="step"><div class="step__no">4</div><div class="step__body">
208
+ <h3>재시작 → 확인</h3>
209
+ <p>앱을 껐다 켜고 <strong>"커리어메이트 연결됐는지 확인해줘"</strong>. 도구가 보이면 끝.</p>
210
+ </div></li>
211
+ </ol>
212
+ <div class="filenote">📎 <strong>이력서 넣는 법:</strong> Claude 채팅창에 파일을 <strong>직접 첨부</strong>하면 됩니다(가장 쉬움).</div>
213
+ <p class="hint" style="margin-top:.7rem">⚠️ <strong>도구가 안 뜨면</strong>(Claude 내장 Node 버전 문제일 수 있습니다) → 아래 ②를 쓰세요.</p>
214
+ </div>
215
+
216
+ <div class="subcard">
217
+ <strong>② 안 되거나 더 안정적으로 — Antigravity(무료)</strong>
218
+ <p class="hint" style="margin:.3rem 0 .8rem">Google Antigravity는 <strong>개인 Gmail로 무료</strong>(신용카드 불필요). 앱을 쓰지만 더 안정적입니다.</p>
219
+ <ol class="steps">
220
+ <li class="step"><div class="step__no">1</div><div class="step__body">
221
+ <h3>Antigravity 설치 → Gmail 로그인</h3>
222
+ <p><a href="https://antigravity.google/download" rel="noopener" target="_blank">antigravity.google/download</a>에서 받아 설치하고 개인 Gmail로 로그인(무료 플랜).</p>
223
+ </div></li>
224
+ <li class="step"><div class="step__no">2</div><div class="step__body">
225
+ <h3>빈 폴더 열고 → 이 문장</h3>
226
+ <p class="paste-note">💬 Antigravity의 <strong>대화창에</strong> 붙여넣으세요 — 터미널 명령이 아니에요. 공개 안내만 읽어 설치하며, <strong>당신의 데이터는 외부로 올라가지 않아요.</strong></p>
227
+ <div class="code"><button class="copy-btn" type="button" data-copy-target="p-anti">복사</button>
228
+ <pre id="p-anti">https://careermate.life/llms-install.txt 를 읽고, 그 안내대로 CareerMate를 이 폴더에 설치하고 연결해줘. 데이터도 이 폴더의 .cm/data 안에 저장하고, Node 설치처럼 시스템에 바꿀 게 있으면 실행 전에 먼저 알려줘. 설치가 끝나면 앱 재시작 방법과 이력서를 주는 법, 대시보드 주소(http://127.0.0.1:4319)도 알려줘.</pre></div>
229
+ </div></li>
230
+ <li class="step"><div class="step__no">3</div><div class="step__body">
231
+ <h3>확인</h3>
232
+ <p>연결 상태를 확인하고(보통 <code>/mcp</code> 또는 "연결됐는지 확인해줘") 끝.</p>
233
+ <p class="recover"><strong>안 보이면?</strong> 앱을 완전히 껐다 켜고 다시 시도하세요. 막히면 설치 전체의 <a href="index.html#install">문제가 생겼을 때</a>를 보세요.</p>
234
+ </div></li>
235
+ </ol>
236
+ <div class="filenote">📎 <strong>이력서 넣는 법:</strong> 작업 폴더에 파일을 넣고 파일명으로 지시. 안 읽히면 텍스트로 붙여넣기.</div>
237
+ <p class="hint" style="margin-top:.7rem">참고: 예전 <strong>Gemini CLI는 2026-06-18부터 무료 종료</strong>되어 Antigravity로 옮겨졌습니다.</p>
238
+ </div>
239
+ </div>
240
+
241
+ </div><!-- /result -->
242
+
243
+ <!-- ===== 초보자 도움말 (항상 펼쳐볼 수 있음) ===== -->
244
+ <div class="help" style="margin-top:2.4rem">
245
+ <p class="q__label" style="margin-bottom:.6rem">도움이 더 필요하면</p>
246
+
247
+ <details class="acc">
248
+ <summary>터미널(명령창)이 처음이세요? — 여는 법 <span class="acc__hint">Codex 등 CLI를 쓸 때</span></summary>
249
+ <div class="acc__body">
250
+ <p><strong>터미널</strong>은 명령을 한 줄씩 입력해 실행하는 창입니다. 이렇게 엽니다:</p>
251
+ <ul>
252
+ <li><strong>Windows</strong> — 시작 버튼 → <code>PowerShell</code> 검색 → <strong>Windows PowerShell</strong> 실행. 붙여넣기는 <strong>마우스 우클릭</strong> 또는 <kbd>Ctrl</kbd>+<kbd>V</kbd>, 실행은 <kbd>Enter</kbd>.</li>
253
+ <li><strong>Mac</strong> — <kbd>⌘</kbd>+<kbd>Space</kbd>(스포트라이트) → <code>Terminal</code> 입력 → 실행. 붙여넣기는 <kbd>⌘</kbd>+<kbd>V</kbd>, 실행은 <kbd>Return</kbd>.</li>
254
+ </ul>
255
+ <p class="hint">순서는 항상 같아요: 명령의 <strong>[복사]</strong> 버튼 → 터미널에 <strong>붙여넣기</strong> → <strong>Enter</strong>.</p>
256
+ </div>
257
+ </details>
258
+
259
+ <details class="acc">
260
+ <summary>필요한 프로그램 받기 (링크 모음) <span class="acc__hint">Node · 앱 · 설치 파일</span></summary>
261
+ <div class="acc__body">
262
+ <ul>
263
+ <li><strong>Node.js (LTS)</strong> — <a href="https://nodejs.org/" rel="noopener" target="_blank">nodejs.org</a> · 설치 파일을 받아 더블클릭(계속 '다음'). 터미널·CLI 경로에 필요.</li>
264
+ <li><strong>Claude 데스크톱</strong> — <a href="https://claude.ai/download" rel="noopener" target="_blank">claude.ai/download</a> · Code 탭 / .mcpb에 사용.</li>
265
+ <li><strong>Git for Windows</strong> — <a href="https://git-scm.com/download/win" rel="noopener" target="_blank">git-scm.com/download/win</a> · <em>Windows에서 Claude Code 탭을 쓸 때만</em>(Mac은 불필요).</li>
266
+ <li><strong>Antigravity</strong>(Google·무료) — <a href="https://antigravity.google/download" rel="noopener" target="_blank">antigravity.google/download</a> · 개인 Gmail 로그인, 카드 불필요.</li>
267
+ <li><strong>CareerMate 설치 파일(.mcpb)</strong> — <a href="https://github.com/osntak/careermate/releases/latest/download/careermate.mcpb">careermate.mcpb</a> · Claude 데스크톱 "채팅" 앱용(약 2&nbsp;MB).</li>
268
+ </ul>
269
+ <p class="hint">받은 뒤 무엇을 하는지는 위에서 고른 "내게 맞는 길"의 단계를 따르면 됩니다.</p>
270
+ </div>
271
+ </details>
272
+ </div>
273
+
274
+ <p class="hint" style="margin-top:2rem">막히거나 다른 방법이 궁금하면 → <a href="index.html#install">설치 방법 전체 보기</a></p>
275
+ </div>
276
+ </section>
277
+ </main>
278
+
279
+ <footer class="foot">
280
+ <div class="foot__brand"><span class="nav__logo" aria-hidden="true">C</span> CareerMate</div>
281
+ <p>로컬에서 동작하는 MCP 기반 커리어 관리 도구. 모든 데이터는 이 컴퓨터에만 저장됩니다.</p>
282
+ <div class="foot__links"><a href="index.html#top">홈</a><a href="index.html#install">설치 전체</a></div>
283
+ </footer>
284
+
285
+ <div class="sr-only" role="status" aria-live="polite" id="copy-status"></div>
286
+
287
+ <script src="landing.js"></script>
288
+ <script>
289
+ (function () {
290
+ 'use strict';
291
+
292
+ // --- wizard ---
293
+ var result = document.getElementById('result');
294
+ var pickHint = document.getElementById('prompt-pick');
295
+ var sub = null, os = null;
296
+ function markSel(groupId) {
297
+ document.querySelectorAll('#' + groupId + ' .choice').forEach(function (c) {
298
+ c.classList.toggle('is-sel', !!c.querySelector('input').checked);
299
+ });
300
+ }
301
+ function render() {
302
+ if (!sub || !os) return;
303
+ if (pickHint) pickHint.style.display = 'none';
304
+ result.setAttribute('data-os', os);
305
+ result.querySelectorAll('.path').forEach(function (p) { p.classList.toggle('show', p.getAttribute('data-sub') === sub); });
306
+ result.classList.add('show');
307
+ }
308
+ document.querySelectorAll('input[name="sub"]').forEach(function (r) {
309
+ r.addEventListener('change', function () { sub = r.value; markSel('q-sub'); render(); });
310
+ });
311
+ document.querySelectorAll('input[name="os"]').forEach(function (r) {
312
+ r.addEventListener('change', function () { os = r.value; markSel('q-os'); render(); });
313
+ });
314
+ // "무료 길로" 점프(ChatGPT 경로에서)
315
+ document.querySelectorAll('[data-goto-free]').forEach(function (a) {
316
+ a.addEventListener('click', function (e) {
317
+ e.preventDefault();
318
+ var freeRadio = document.querySelector('input[name="sub"][value="free"]');
319
+ if (freeRadio) { freeRadio.checked = true; sub = 'free'; markSel('q-sub'); render(); }
320
+ result.scrollIntoView({ behavior: 'smooth', block: 'start' });
321
+ });
322
+ });
323
+ })();
324
+ </script>
325
+ </body>
326
+ </html>