Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
HireSignal is an AI-powered resume screening and candidate matching platform that bridges the gap between job seekers and recruiters. Candidates upload their resumes and receive automatically structured profiles — extracting skills, experience, education, projects, and certifications — then apply to open positions. Recruiters post job requirements and trigger a multi-dimensional AI matching engine that ranks all applicants by their fit score, with full score breakdowns, matched/missing skills, and natural-language AI reasoning.README 전문 보기 ↗HireSignal is an AI-powered resume screening and candidate matching platform that bridges the gap between job seekers and recruiters. Candidates upload their resumes and receive automatically structured profiles — extracting skills, experience, education, projects, and certifications — then apply to open positions. Recruiters post job requirements and trigger a multi-dimensional AI matching engine that ranks all applicants by their fit score, with full score breakdowns, matched/missing skills, and natural-language AI reasoning.
📁 GitHub Repository: github.com/SodiqAbdulwaris/AI-Resume-Screener
Built as a school project on the MERN stack with a Python/FastAPI AI microservice.
| Layer | Technology |
|---|---|
| Frontend | React 18 + Vite 5 |
| Backend | Node.js + Express 4 + MongoDB (Mongoose) |
| AI service | Python + FastAPI + Uvicorn |
| Embeddings | all-MiniLM-L6-v2 via sentence-transformers |
| Auth | JWT access token (15 min) + httpOnly refresh-token cookie (30 days) |
.
├── ai-service/
│ ├── app/
│ │ ├── config/ # Settings and central parser vocabulary
│ │ ├── core/ # Exceptions, logging, request middleware
│ │ ├── parsers/ # Contact, skills, education, experience, projects, certifications
│ │ ├── routers/ # POST /parse/ POST /match/
│ │ ├── schemas/ # Pydantic request and response shapes
│ │ ├── services/ # Parse, match, embedding, and explanation services
│ │ └── utils/ # Text extraction, section splitting, normalisation
│ ├── main.py
│ └── requirements.txt
├── backend/
│ └── src/
│ ├── config/ # Zod-validated environment loader
│ ├── controllers/ # Auth, resume, candidate, job, application
│ ├── mappers/ # Node ↔ FastAPI payload translation
│ ├── middlewares/ # Auth, error, upload (Multer), ObjectId validation
│ ├── models/ # User, Resume, CandidateProfile, JobRequirement, Application, MatchResult
│ ├── routes/ # /api/v1/ route registration
│ └── services/ # AI client (axios) and match orchestration
├── frontend/
│ └── src/
│ ├── components/ # Candidate, recruiter, layout, and UI primitives
│ ├── context/ # Auth state and localStorage session
│ ├── lib/ # API wrapper and utilities
│ ├── pages/ # AuthPage, CandidateDashboard, RecruiterDashboard
│ └── styles/ # Design system and global CSS
├── .gitignore
├── AGENTS.md
├── package.json # Root scripts — installs and runs all services
└── README.md
Create backend/.env.local (or select another slug with APP_ENV, for example .env.development or .env.production):
PORT=5000
MONGODB_URI=mongodb://localhost:27017/ai-resume-screener
JWT_SECRET=your-secret-here
AI_SERVICE_URL=http://localhost:8000
AI_SERVICE_TIMEOUT_MS=30000
MAX_FILE_SIZE_BYTES=5242880
FRONTEND_URL=https://app.example.com
CORS_ALLOWED_ORIGINS=https://app.example.com,http://192.168.1.25:5173
AUTH_COOKIE_SAME_SITE=none
AUTH_COOKIE_SECURE=true
Create ai-service/.env.local:
MONGO_URI=mongodb://localhost:27017/ai-resume-screener
AI_SERVICE_PORT=8000
EMBEDDING_MODEL=all-MiniLM-L6-v2
HF_TOKEN=
MODEL_CACHE_DIR=app/embedding-models
MAX_FILE_SIZE_MB=5
# Optional external AI-correction fallback for sparse resume parses — see "How It Works" below.
PARSER_AI_ENABLED=false
PARSER_AI_URL=
PARSER_AI_API_KEY=
PARSER_AI_TIMEOUT_SECONDS=20.0
HF_TOKEN is only needed if the configured EMBEDDING_MODEL requires authentication to download from Hugging Face. See backend/README.md for the full backend environment variable reference.
npm run install:all
cd ai-service
uv venv --python 3.12
uv pip install --index-strategy unsafe-best-match -r requirements.txt
cd ..
Start each service individually:
npm run dev --prefix backend
npm run dev --prefix frontend
python -m uvicorn main:app --reload --app-dir ai-service
APP_ENV selects slugged backend and AI-service files and defaults to local; Vite reads the matching mode file (.env.local, .env.development, or .env.production). Plain .env files are intentionally ignored.
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend | http://localhost:5000/health |
| AI service | http://localhost:8000/health |
The backend owns all persistence and business logic. The AI service exposes two narrow endpoints — POST /parse/ for resume parsing and POST /match/ for candidate ranking — and is never called directly by the frontend.
When a candidate uploads a resume, the backend forwards the file to /parse/, stores the structured result as a candidate profile in MongoDB, and keeps the cleaned resume text for later matching. When a recruiter triggers a match, the backend loads all applicants for that job, builds a payload, calls /match/, and persists the ranked results.
Matching scores each candidate across four dimensions: skills (40%), experience (30%), semantic similarity (20%), and education level (10%).
Resume parsing always runs a heuristic/regex parser first. If the result is too sparse (missing name, contact info, skills, experience, or education) and PARSER_AI_ENABLED=true with a PARSER_AI_URL configured, the ai-service calls out to an externally hosted AI-correction service — not implemented in this repo — to try to fill the gaps. The default (PARSER_AI_ENABLED=false) means parsing is always heuristic-only. Either way, a resume that's still too sparse afterward is flagged for the candidate to review rather than silently treated as a complete profile.
express-internal qs chain. Fixing them properly needs an Express 5 migration, a breaking change deliberately deferred rather than patched blind — see review/backend/2026-09-08-full-review/Concerns/dependency-vulnerabilities.md.ai-service installs need --index-strategy unsafe-best-match: the --extra-index-url for PyTorch CPU wheels can make uv lock onto a mismatched transitive-dependency version from the wrong index. See review/system/2026-09-19-ci-fix.md.SameSite=None; Secure=true behaviour is confirmed working end-to-end on http://localhost in a Chromium browser, but not yet re-tested against the real public origin in Chrome, Safari, and Firefox.PARSER_AI_ENABLED is a wired hook for an externally-hosted service that fills gaps in sparse heuristic parses, but that service isn't implemented in this repo. With the default PARSER_AI_ENABLED=false, parsing is heuristic-only in practice.| Person | Owns |
|---|---|
| S.A | Python/FastAPI AI service |
| Dan | Node.js/Express backend |
| Frontend dev | React/Vite frontend |