- TypeScript 99.5%
- CSS 0.4%
|
|
||
|---|---|---|
| .agents/skills | ||
| .github/workflows | ||
| messages | ||
| prisma | ||
| public | ||
| src | ||
| third-party | ||
| .dockerignore | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| components.json | ||
| docker-compose.yml | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| LICENSE | ||
| next.config.ts | ||
| NOTICE | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.mjs | ||
| README.md | ||
| README.zh-CN.md | ||
| tsconfig.json | ||
| vercel.json | ||
| vitest.config.ts | ||
LuJie CareerKit
An AI-powered career workspace from resume editing to offer acceptance, covering resume editing, JD matching, application tracking, mock interviews, and review.
English · 简体中文
Overview
LuJie CareerKit is built for internships, campus recruiting, and career job searches. It brings resume editing, job-description matching, application tracking, interview preparation, mock practice, and AI review into one AI-powered career workspace. You can maintain different resume versions for different roles, use job descriptions to generate resume wording and role-specific interview prep guides that better match role requirements, track every application, and keep refining knowledge, answers, feedback, and review notes.
Online Preview
Try the live preview at https://lujie.chozzc.dev.
Preview
| Control Center | Resume Library |
|---|---|
![]() |
![]() |
| Resume Editor | JD Matching |
![]() |
![]() |
| JD-Optimized Resume | Interview Assistant |
![]() |
![]() |
| Mock Interview | AI Review |
![]() |
![]() |
| Application Tracking | Pipeline Status |
![]() |
![]() |
Highlights
- Structured resume editing: maintain multiple resume versions, create an independent copy of any resume for experimental edits, edit education, internship, project, skill, and custom sections, switch templates and themes, and export PDF, PNG, or editable DOCX files.
- AI resume analysis: diagnose action-result structure, evidence, clarity, and organization first; let the user choose which issues and directions to address; then create an independent optimized version while preserving the original.
- Cover letters and recruiter greetings: combine the current resume, a complete JD, and user-provided availability details to generate a formal cover letter or a concise recruiter-chat opener, then edit, copy, or regenerate the result.
- JD matching: paste a complete JD with the company, full role title, requirements, and responsibilities, then let AI diagnose evidence, reorder emphasis, improve wording, and save a role-specific version without inventing experience.
- Role-specific interview prep: combine a selected resume with a complete JD to generate and save a guide with an overview, capability profile, evidence gaps, core knowledge, experience deep dives, targeted questions, and a preparation plan, then export the complete guide as an editable Word document or print-ready PDF.
- Application tracking: record companies, roles, sources, stages, deadlines, follow-up dates, notes, JD text, and linked resume versions.
- Mock interviews and review: generate interview questions from a resume and JD, save answer drafts, and create an AI review report you can revisit.
- Reusable Agent Skills: use the included Chinese skills in Codex, Claude Code, and other Agent Skills-compatible tools for resume improvement, interview preparation, mock interviews, and job application writing.
- Data and privacy controls: resumes, jobs, applications, interview prep guides, mock sessions, and settings are stored in a local SQLite database for long-term personal use.
Agent Skills
The repository includes four Chinese, tool-independent Agent Skills under .agents/skills. Codex automatically discovers them when launched inside this repository.
| Skill | Purpose |
|---|---|
$resume-improvement |
Diagnose and improve a resume, with optional JD-specific tailoring |
$prepare-job-interview |
Research a company and role, then build a structured interview preparation guide |
$mock-interview-coach |
Run an interactive mock interview with adaptive follow-ups and evidence-based review |
$job-application-writer |
Write cover letters, recruiter greetings, emails, referrals, and follow-up messages |
To use the skills in every project, copy the four folders to the personal skills directory:
# Codex
mkdir -p ~/.agents/skills
cp -R .agents/skills/* ~/.agents/skills/
# Claude Code
mkdir -p ~/.claude/skills
cp -R .agents/skills/* ~/.claude/skills/
PowerShell:
# Codex
New-Item -ItemType Directory -Force "$HOME\.agents\skills"
Copy-Item -Path ".agents\skills\*" -Destination "$HOME\.agents\skills" -Recurse -Force
# Claude Code
New-Item -ItemType Directory -Force "$HOME\.claude\skills"
Copy-Item -Path ".agents\skills\*" -Destination "$HOME\.claude\skills" -Recurse -Force
Codex can invoke a skill with $skill-name; Claude Code can invoke it with /skill-name. When search tools are available and the user has not disabled web access, role-related skills actively research current official job and company information, keep sources and dates, and treat public interview reports as non-official leads. They never upload a resume, search personal contact information, or invent candidate facts.
Data and Privacy
- Resume content, resume versions, jobs, applications, interview prep guides, mock sessions, and settings are stored in
prisma/dev.db. - API keys are configured from the in-app Settings page. They are encrypted before being saved to SQLite.
LUJIE_SETTINGS_SECRETis the local encryption secret for saved AI keys. Use a long random value in.env.local.
Quick Start
Requirements
- Node.js 20.9 or later
- npm
- Chrome or Edge for the best browser speech experience
Docker Deployment (Recommended)
docker run -d --name lujie-careerkit \
-p 3000:3000 \
-v lujie-data:/data \
-e LUJIE_SETTINGS_SECRET="replace-with-a-long-random-string" \
ghcr.io/chozzc/lujie-careerkit:latest
Open http://localhost:3000. SQLite data is stored in the Docker volume lujie-data. API keys are configured from the in-app Settings page.
LUJIE_SETTINGS_SECRET encrypts locally saved settings secrets. Replace the example value with a long random string.
Use latest to follow the newest main build. After v0.2.5 is published, use v0.2.5 to pin that release.
Local Development
git clone https://github.com/Chozzc/Lujie-Careerkit.git
cd Lujie-Careerkit
npm ci
Create a local environment file and generate an encryption secret:
cp .env.example .env.local
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
On Windows PowerShell:
Copy-Item .env.example .env.local
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
Put the generated value into .env.local as LUJIE_SETTINGS_SECRET, then start the app:
npm run dev
Open http://localhost:3000. The app creates the local schema and demo workflow data on first use.
Environment Variables
DATABASE_URL="file:./dev.db"
LUJIE_SETTINGS_SECRET="change-me-to-a-long-random-string"
OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
OPENAI_MODEL="qwen3.6-flash"
OPENAI_BASE_URL and OPENAI_MODEL only set first-run defaults. Configure the actual API key from the in-app Settings page.
AI Provider Setup
- Open the Settings page in the app.
- Choose an OpenAI-compatible provider.
- Enter the Base URL, model name, and API key.
- Save and run the connection test.
AI features stay disabled until the settings are saved and the connection test succeeds.
Release Notes
v0.2.5
Public Agent Skills
- Published four reusable Chinese Agent Skills for resume improvement, interview preparation, mock interviews, and job application writing.
- Codex discovers the skills directly from
.agents/skills; the same folders can be copied to Claude Code or other Agent Skills-compatible tools. - Role-related skills actively research current company and job information when search is available, preserve source dates and confidence, and enforce privacy and no-fabrication boundaries.
- Removed the ignored draft location and an empty legacy skill folder, leaving only the four validated skills and their required references.
v0.2.4
Interview preparation export
- Added an “Export guide” action to generated interview preparation materials, with Word and PDF export options.
Review and selectively accept AI resume changes
- AI resume optimization now opens a step-by-step review screen. Changes are grouped by resume section and show the original text beside an editable AI suggestion.
- Each change can be accepted, rejected, or edited independently. The live preview follows the current choices, and only accepted content is saved to a new general-optimization version while the original resume remains unchanged.
- The resume library distinguishes general-optimization versions from JD-optimized versions. GPA, dates, missing facts, and other information that AI should not infer are directed back to the editor for confirmation or completion.
v0.2.3
AI resume analysis
- Renamed the resume-editor action from “AI Optimize Resume” to “Analyze resume.” AI first reads the sanitized current editor content and returns a diagnosis overview, existing strengths, and concrete issues without modifying or replacing the original resume.
- STAR is used only as a diagnostic aid to check whether actions, methods, and results are clear. The analysis does not produce a mechanical overall score or fake STAR completion rate, and returns at most 12 issues tied to a resume section and source evidence.
- Issues are grouped into collapsible “Address first,” “Recommended,” and “Optional improvement” sections. Important issues are selected by default, while users can inspect the reason and suggestion before changing the selection.
User-controlled optimization
- Users can choose clarity, impact, concision, or ATS readability and add optional instructions to correct the diagnosis, limit the scope, or specify the desired tone.
- AI changes only the selected issues and cannot expand the scope on its own, invent experience, skills, metrics, or results, or treat missing resume evidence as proof that the candidate lacks a capability.
- Confirmation creates an independent optimized version while preserving the original. Diagnosis controls are locked during generation, and both analysis and optimization validate request input, sanitized snapshots, and structured model output.
FAQ
1. Do I need an API key to use it?
No. Resume editing and application tracking work locally. AI features such as JD matching, interview prep guides, mock interviews, and AI review require an API key from an OpenAI-compatible provider.
2. Where is my data stored?
By default, data is stored on your machine in prisma/dev.db. This is local runtime data and should not be committed to GitHub.
3. How are Dashboard metrics calculated?
- Applications: roles that have entered the application tracking board, excluding JD matching drafts that have not been submitted.
- Active flows: roles still in progress, including applied, assessment, and interview stages.
- Due follow-ups: active flows only. LuJie first uses the manually set next follow-up date; applied roles without one use seven days after applying as the suggested follow-up date; assessment and interview roles use the current stage date.
- Offers: roles marked as Offer.
4. What is LUJIE_SETTINGS_SECRET?
It is the local encryption secret used to encrypt API keys saved in SQLite. If you change it, API keys already saved in the old database may no longer decrypt, so you may need to save the key again in Settings.
5. Can I use another model provider?
Yes. Any OpenAI-compatible provider can be configured by entering its Base URL, model name, and API key in Settings.
Project Structure
.github/workflows/ GitHub Actions workflows, including GHCR image publishing
Dockerfile Production container image definition
docker-compose.yml Local Docker startup with persistent SQLite volume
prisma/ Prisma schema and local SQLite runtime data
src/app/ Next.js pages and API routes
src/components/ Workspace, resume, interview, and shared UI
src/hooks/ Browser hooks such as speech recognition
src/lib/ Repository, AI, export, parsing, and domain logic
src/stores/ Resume editor state
src/types/ Shared TypeScript declarations
public/brand/ Brand mark and cover assets
public/images/ README screenshots
third-party/ Third-party license notices
Credits
The resume editor reuses and adapts design ideas and implementation concepts from JadeAI. JadeAI is licensed under Apache License 2.0; a copy is kept in third-party/JadeAI-LICENSE.txt.
License
LuJie CareerKit is released under the Apache License 2.0. Third-party notices are listed in NOTICE.









