Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A shortlist tool for Arjun, built strictly to the case: it reads a CV, scores the
candidate against a rubric derived from Kargo's own 8 past hires (not just the
job spec), and drafts an interview brief and a candidate email (invite or
rejection). It never sends anything on its own. Every email waits for an
explicit, per-candidate confirmation.
Scores are persisted to Supabase (candidates table) and a local
dashboard.csv. CVs can be supplied from a local path or fetched directly from
a GitHub repository.README 전문 보기 ↗A shortlist tool for Arjun, built strictly to the case: it reads a CV, scores the candidate against a rubric derived from Kargo's own 8 past hires (not just the job spec), and drafts an interview brief and a candidate email (invite or rejection). It never sends anything on its own. Every email waits for an explicit, per-candidate confirmation.
Scores are persisted to Supabase (candidates table) and a local
dashboard.csv. CVs can be supplied from a local path or fetched directly from
a GitHub repository.
| Layer | Tech |
|---|---|
| AI scoring | Gemini 3.8 Flash (google-genai) |
| Database | Supabase — project tsgvfaiojilehdhpjrqj |
| Email dispatch | Resend (only on explicit send) |
| CV sources | Local file / folder, or GitHub repo path |
pip install -r requirements.txt
cp .env.example .env # fill in your keys
source .env # or export each variable
Key variables:
| Variable | Required | Purpose |
|---|---|---|
GEMINI_API_KEY | for real scores | AI scoring via Gemini 3.8 Flash |
SUPABASE_URL | no (default set) | Supabase project URL |
SUPABASE_KEY | no (default set) | Supabase publishable key |
RESEND_API_KEY | for send only | Email dispatch |
KARGO_FROM_EMAIL | for send only | Verified Resend sender address |
GITHUB_TOKEN | for private repos | GitHub PAT for score-from-github |
Without GEMINI_API_KEY, the pipeline runs in mock mode (keyword heuristic) so
you can verify the plumbing before wiring in a real key.
python3 src/pipeline.py score --cv path/to/candidate.pdf --role pm
# or --role spm
Writes:
output/<id>_brief.md — interview briefoutput/<id>_email.md — draft email (invite or rejection)dashboard.csvcandidates tablepython3 src/pipeline.py score-batch --dir path/to/applications/ --role pm
python3 src/pipeline.py score-from-github \
--repo owner/repo \
--path applications/pm \
--role pm \
--ref main # branch, tag, or commit (default: main)
Downloads all .pdf, .docx, .txt files under that repo path, scores each,
and writes the usual outputs. Needs GITHUB_TOKEN for private repos.
python3 src/pipeline.py list
python3 src/pipeline.py list --role pm
Prints a summary from Supabase (score, recommendation, email sent status).
python3 src/pipeline.py send --candidate-id <id>
The ONLY command that calls Resend. Prompts for confirmation, sends exactly the
draft already on disk, then flips email_sent=true in Supabase.
| File | What it does |
|---|---|
src/cv_parser.py | Reads .docx, .pdf, .txt into plain text |
src/redact.py | Strips name, email, phone, URLs before the AI sees anything |
src/scorer.py | Gemini 3.8 Flash call — returns scored JSON against the rubric |
src/db.py | Supabase writes: upsert_candidate, mark_email_sent, list_candidates |
src/github_source.py | Downloads CV files from a GitHub repo path |
src/emailer.py | Transmits a pre-written draft via Resend |
src/pipeline.py | CLI: score, score-batch, score-from-github, send, list |
prompts/scoring_rubric.md | Four-dimension rubric (ops 40%, ownership 25%, role-fit 20%, comms 15%) |
data/job_descriptions.json | PM and SPM job descriptions |
candidates (
id UUID PRIMARY KEY,
candidate_id TEXT UNIQUE, -- e.g. "cand-8f3a"
role TEXT, -- 'pm' | 'spm'
total_score NUMERIC,
recommendation TEXT, -- 'interview' | 'reject'
dim1_ops_exposure NUMERIC,
dim2_ownership NUMERIC,
dim3_role_fit NUMERIC,
dim4_communication NUMERIC,
dim1_evidence TEXT, dim2_evidence TEXT,
dim3_evidence TEXT, dim4_evidence TEXT,
interview_brief TEXT,
email_subject TEXT,
email_body TEXT,
source_file TEXT,
email_sent BOOLEAN DEFAULT FALSE,
scored_at TIMESTAMPTZ DEFAULT NOW()
)
send is run by hand.redact.py removes these before the model sees anything.