SNDP-Design/ZeeApply

GitHub: SNDP-Design/ZeeApply

ZeeApply 是一个AI驱动的设计师求职助手,通过自动化职位聚合和评分来简化求职流程。

Stars: 0 | Forks: 0

# ZeeApply 你的私人、设计师专属、AI驱动的求职助手——以 [XGrowth](https://www.xgrowth.uno) 为蓝本构建:静态前端托管在 GitHub Pages,无服务器后端运行在 Cloudflare Workers,永久免费,始终在线,无需月度注册。 **架构** ``` ┌──────────────────────────┐ ┌──────────────────────────┐ │ GitHub Pages (static) │ │ Cloudflare Worker (JS) │ │ │ │ │ │ / landing │ │ /fetch-jobs sources │ │ /app/ the app │ ───▶ │ /score Gemini │ │ │ │ /cover-letter Gemini │ │ Firebase Auth + store │ │ │ └──────────────────────────┘ └──────────────────────────┘ │ │ ▼ ▼ Per-user Firestore Public job APIs + (your profile, jobs, Google Gemini cover letters) (with 4-model fallback) ``` **功能说明** 1. **聚合** 来自 8 个免费公开来源的设计师职位:Greenhouse(15+ 家公司)、Lever(Palantir, Mistral)、RemoteOK、Remotive、Arbeitnow、Jobicy、WeWorkRemotely(设计类 RSS)、Working Nomads。 2. 在信息触达你的存储之前,**过滤**出符合你目标职位头衔(如 `ui designer`, `product designer` 等)的结果。 3. 当你身处美国境外时,**自动排除**仅限美国的职位(涉及公民身份、安全许可、ITAR、无赞助说明等)。 4. 使用 Gemini **评分**每个职位(0-100分),并对照你的简历生成一句“原因”说明。 5. 为高分职位按需**起草**定制的180字求职信。 6. 通过你私有的 Firestore 数据库**追踪**每个职位的完整状态:`新建 → 感兴趣 → 已投递 / 已跳过`。 **隐私:** 你的简历和求职流水线存储在你 Google 账户下的 Firestore 中,不使用共享数据库。简历仅在触发评分调用时离开浏览器(通过 Worker 发送至 Gemini,且不存储)。 **成本:** 0美元/月。GitHub Pages + Cloudflare Workers + Firebase Spark + Gemini 免费层组合,足以应对每天数千个职位的处理量。 ## 本地开发 ``` # 后端(Cloudflare Worker)— 终端 1 cd worker npm install npx wrangler dev --port 8787 --local # 前端 — 终端 2 cd .. python3 -m http.server 8000 # 打开 http://localhost:8000 ``` 应用会自动检测 `localhost` 并指向本地 Worker(`http://127.0.0.1:8787`)。要使本地评分和求职信生成功能正常工作,请设置密钥: ``` cd worker npx wrangler secret put GEMINI_API_KEY # paste your AIza... key ``` 在 https://aistudio.google.com/apikey 获取免费的 Gemini 密钥。 ## 部署(一次性,约25分钟) ### 1. Firebase 项目(约10分钟) 1. 打开 https://console.firebase.google.com → **添加项目** → 命名为 `zeeapply`(或其他名称)。为简化操作,可禁用 Google Analytics。 2. 左侧边栏 → **Authentication** → **开始使用** → 启用 **Google** 作为登录提供方。 3. 左侧边栏 → **Firestore Database** → **创建数据库** → 选择 **生产模式** 开始 → 选择一个靠近你的区域。 4. Firestore → **规则** → 粘贴以下内容并 **发布**: ``` rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 父级用户文档(个人资料) match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; } // 所有子集合(职位等) match /users/{userId}/{document=**} { allow read, write: if request.auth != null && request.auth.uid == userId; } } } ``` 这确保每个用户的数据——包括父级个人资料文档及所有子集合文档——仅对自身可访问。 5. **项目设置**(齿轮图标)→ 滚动到 **你的应用** → 点击 `` 网页 → 注册应用(名称:`ZeeApply`)。 6. 复制 Firebase 显示的 `firebaseConfig` 对象。 7. 打开 `app/index.html`,在底部附近找到 `const firebaseConfig = { … }` 代码块,粘贴你的值。 8. 项目设置 → **授权域名** → 添加 `sndp-design.github.io`(或你的自定义域名),以便 Google 登录在生产环境中正常工作。 ### 2. Cloudflare Worker(约5分钟) ``` cd worker npx wrangler login # opens browser; sign in / sign up with Cloudflare (free) npx wrangler secret put GEMINI_API_KEY # paste your Gemini key npx wrangler deploy ``` Wrangler 会输出 Worker URL —— 格式类似 `https://zeeapply-api..workers.dev`。复制它。 ### 3. 将前端连接到生产 Worker 打开 `app/index.html`,找到: ``` const API_BASE = (location.hostname === 'localhost' || …) ? 'http://127.0.0.1:8787' : 'https://zeeapply-api.YOUR_SUBDOMAIN.workers.dev'; ``` 将 `YOUR_SUBDOMAIN` 替换为 Wrangler 提供的值。 同时打开 `worker/src/index.js`,找到 `ALLOWED_ORIGINS`,确认你的 GitHub Pages 域名(`https://sndp-design.github.io`)已在列表中。如果你指向了自定义域名,也请在此添加。编辑后重新部署:`npx wrangler deploy`。 ### 4. GitHub Pages(约5分钟) ``` git add -A && git commit -m "Wire prod Firebase + Worker URLs" && git push ``` 然后在 GitHub 上:**Settings → Pages → Source: `main` branch / `/` root → Save**。 约1分钟后,你的应用将上线: - 首页:`https://sndp-design.github.io/ZeeApply/` - 应用:`https://sndp-design.github.io/ZeeApply/app/` **(可选)自定义域名:** 在仓库根目录放置一个 `CNAME` 文件,写入你的域名(例如 `zeeapply.uno`),并将 DNS 配置指向 `sndp-design.github.io`。然后将相同域名添加到 Firebase 的授权域名和 Worker 的 `ALLOWED_ORIGINS` 中。 ## 文件布局 ``` ZeeApply/ ├── index.html ← landing page (GitHub Pages serves this at /) ├── app/index.html ← the actual webapp (auth + UI + Firestore + API calls) ├── worker/ │ ├── src/index.js ← Cloudflare Worker: job sources + Gemini proxy │ ├── wrangler.toml ← Cloudflare config │ └── package.json ├── assets/ ← logos / images (optional) ├── .nojekyll ← tells GitHub Pages "don't run Jekyll" └── README.md ``` 就是这样。无需构建步骤。编辑、推送、刷新即可。 ## Gemini 后备链 `worker/src/index.js` 按以下顺序尝试模型: ``` gemini-3-flash-preview → gemini-2.5-flash → gemini-2.5-flash-lite → gemini-2.0-flash ``` 如果模型返回 429(速率限制)、503(服务器过载)、404(可能因为 `gemini-3-flash-preview` 尚未发布)或 `RESOURCE_EXHAUSTED`,将自动尝试下一个模型。认证错误和格式错误的请求会立即报错。这意味着即使某个模型达到每日配额,评分功能仍可继续工作。
标签:AI评分系统, AI驱动, Firebase, GitHub Pages, 云函数, 人工智能, 免费工具, 后端开发, 工作聚合, 工作跟踪, 工作过滤, 数据可视化, 求职, 求职信生成, 求职平台, 用户模式Hook绕过, 程序员工具, 简历评分, 职业发展, 自动排除, 设计师, 设计师招聘, 远程工作, 静态网站