JobGuard 是一个面向求职场景的交互式风险识别与情报共建平台。通过剧情闯关、AI 工具箱与社区情报三大模块,帮助用户在真实求职流程中识别常见的招聘欺诈、合同陷阱与入职套路。
为什么需要 JobGuard? 每年有大量求职者因信息不对称遭遇招聘骗局。JobGuard 将枯燥的法律条文转化为可交互的游戏体验,并借助 AI 与社区力量构建实时防骗情报网。
多关卡互动式训练,在模拟场景中学习识别招聘陷阱:
| 关卡 | 玩法 | 训练目标 |
|---|---|---|
| 黄金眼 | 快速识别文本中的违规话术 | 提升信息筛选速度 |
| 话术攻防 | 模拟 HR 对话,选择最佳应对 | 掌握谈判话术 |
| 合同迷宫 | 在合同条款中找出陷阱 | 熟悉劳动法核心条款 |
| 工具 | 说明 |
|---|---|
| 照妖镜 | 上传招聘截图或粘贴文本,AI 逐句分析风险点 |
| 合同审查 | 上传劳动合同图片(最多 10 页)或粘贴文本,AI 标注不合规条款 |
| 法律顾问 | 基于《劳动法》和《劳动合同法》的 RAG 问答,精准引用法条 |
- 匿名提交求职避坑经历,AI 自动脱敏、分类、审核
- 按地区 / 行业 / 标签浏览,地图可视化全国情报热力分布
- 投票机制,优质情报自然浮现
| 层 | 技术 |
|---|---|
| 框架 | Next.js 16 (App Router, Turbopack) |
| 前端 | React 19 · TypeScript 5.9 |
| 样式 | Tailwind CSS 4 |
| 动画 | Framer Motion · GSAP · PixiJS · Lottie |
| 地图 | MapLibre GL · React Map GL |
| AI | Vercel AI SDK · OpenAI 兼容 API |
| 数据库 | PostgreSQL |
| 状态管理 | Zustand |
- Node.js >= 18
- PostgreSQL >= 14
- OpenAI 兼容的 API Key(如 OpenAI、DeepSeek 等)
git clone https://github.com/Austin-Patrician/JobGuard.git
cd JobGuardnpm install复制 .env.example 模板并填入你的配置:
cp .env.example .env# App
APP_DOMAIN=jobguard.example.com
LETSENCRYPT_EMAIL=ops@example.com
NEXT_PUBLIC_APP_NAME=JobGuard
NEXT_PUBLIC_APP_URL=https://jobguard.example.com
# AI (OpenAI 兼容接口)
OPENAI_API_KEY=your-api-key
OPENAI_API_BASE_URL=https://api.openai.com/v1
AI_MODEL=gpt-4.1
# Database
DATABASE_URL=postgresql://jobguard:change-this-password@127.0.0.1:5432/jobguard
# PGSSLMODE=require # 仅云数据库或强制 SSL 时启用
# Security
IP_HASH_SALT=your-random-salt-stringCREATE TABLE IF NOT EXISTS community_reports (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
visitor_id uuid NOT NULL,
raw_content text NOT NULL,
sanitized_content text,
summary text,
tags text[],
region text,
city text,
industry text,
scam_type text,
status text NOT NULL DEFAULT 'pending',
reject_reason text,
ip_hash text,
upvotes integer NOT NULL DEFAULT 0,
view_count integer NOT NULL DEFAULT 0,
created_at timestamptz NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS community_votes (
report_id uuid NOT NULL REFERENCES community_reports(id) ON DELETE CASCADE,
visitor_id uuid NOT NULL,
created_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (report_id, visitor_id)
);npm run build:law-index# 开发环境
npm run dev
# 生产构建
npm run build && npm start适用于已经把域名解析到服务器公网 IP 的场景,例如:
jobguard.20250230.xyz -> 你的香港服务器公网 IP
部署前请确认:
- 服务器已开放
80和443 .env中已填写APP_DOMAIN、LETSENCRYPT_EMAIL、DATABASE_URL- 使用具备
sudo权限的账号执行脚本
执行部署:
bash deploy-linux.sh脚本会自动完成这些步骤:
- 检查并安装 Node.js / Nginx / Certbot(可用
--skip-deps跳过) - 执行
npm ci、法条索引构建与next build - 生成
jobguard.service并通过systemd启动 - 安装 Nginx 站点配置并反代到
127.0.0.1:3000 - 通过
certbot --nginx申请 HTTPS 证书 - 最后校验
https://你的域名/api/health
常用参数:
bash deploy-linux.sh --domain jobguard.20250230.xyz --email ops@example.com
bash deploy-linux.sh --skip-deps
bash deploy-linux.sh --skip-httpsJobGuard/
├── public/ # 静态资源
├── src/
│ ├── app/
│ │ ├── (auth)/ # 登录 / 注册页面
│ │ ├── (main)/ # 主功能页面
│ │ │ ├── community/ # 情报局
│ │ │ ├── dashboard/ # 首页仪表盘
│ │ │ ├── game/ # 剧情闯关
│ │ │ │ └── level/ # 各关卡实现
│ │ │ ├── law-chat/ # 法律顾问
│ │ │ └── toolkit/ # AI 工具箱
│ │ │ ├── mirror/ # 照妖镜
│ │ │ └── contract/# 合同审查
│ │ └── api/ # API Route Handlers
│ ├── components/ # 可复用组件
│ │ ├── ui/ # 基础 UI 组件
│ │ ├── layout/ # 布局组件
│ │ ├── community/ # 情报局组件
│ │ └── law/ # 法律模块组件
│ ├── data/ # 静态数据 / 脚本
│ │ ├── law/ # 法律法规原文与索引
│ │ └── scripts/ # 游戏脚本数据
│ ├── lib/ # 工具函数与服务
│ ├── stores/ # Zustand 状态管理
│ └── types/ # TypeScript 类型定义
├── next.config.ts
├── tailwind.config.ts
├── tsconfig.json
└── package.json
| 命令 | 说明 |
|---|---|
npm run dev |
启动开发环境 (Turbopack) |
npm run build |
生产构建 |
npm run start |
启动生产服务器 |
npm run lint |
ESLint 代码检查 |
npm run build:law-index |
构建法条向量索引 |
JobGuard 实施了多层安全防护:
- 速率限制 — 全局 60 请求/分钟/IP,AI 接口 5 请求/分钟/IP
- 请求体大小限制 — 各端点按需设置上限,防止超大 payload 攻击
- 安全响应头 — CSP、HSTS、X-Frame-Options 等
- Markdown XSS 防护 — 社区内容渲染使用 rehype-sanitize
- IP 哈希 — 社区模块仅存储 IP 的 SHA-256 哈希,不存储原始 IP
如果发现安全漏洞,请通过 Issue 私下报告,不要公开披露。
欢迎任何形式的贡献!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交变更 (
git commit -m 'feat: add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 创建 Pull Request
请确保:
- 代码通过
npm run lint - 新功能附带必要说明
- 不要提交密钥或敏感信息
本项目基于 MIT License 开源。
如果这个项目对你有帮助,请给一个 Star 支持一下!
本项目已经加入LINUX DO开源社区 : LINUX DO