TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Personal job-hunt automation: scrapes YC for openings matched to a resume, finds founder/hiring-manager contacts, drafts outreach emails.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Upload a PDF résumé, review the extracted profile, and discover startup jobs ranked by role and skill fit. A visitor can optionally refine target roles, location, and work mode. The app also drafts an email (at most 1,000 characters) or LinkedIn message (at most 300 characters) for review and copying. It never sends messages automatically.檢視完整 README ↗
Turn a résumé into a focused startup job search—with visible match evidence and outreach drafts you control.
Live app · Deployment guide · Backend source · Frontend source
HireMeNow connects the steps that usually happen across several tabs: reading a résumé, finding relevant startup openings, checking fit, looking for a contact, and writing an introduction. Upload a PDF, review the extracted profile, and explore public Y Combinator job listings ranked against your experience.
It drafts messages; it never sends them automatically. Match scores are explainable heuristics, not hiring predictions or employer assessments. Review extracted information, job availability, contacts, and generated text before acting.
Uploading a replacement résumé resets that browser's previous profile, preferences, drafts, and saved job state only after the new PDF parses successfully. A failed upload keeps the previous profile.
flowchart TD
Browser[React + TypeScript frontend] -->|Anonymous bearer token| API[FastAPI]
API --> PDF[pypdf text extraction]
PDF --> Gemini[Gemini structured résumé parsing]
Gemini --> Profile[Validated profile]
API --> YC[Public YC job pages]
YC --> Jobs[Shared job catalogue]
Profile --> Matcher[Deterministic role and skill matching]
Jobs --> Matcher
Matcher --> Results[Ranked jobs + match evidence]
Results --> Browser
API --> Outreach[Gemini outreach + template fallback]
Outreach --> Draft[Visitor-owned draft]
Draft --> Browser
API --> DB[(SQLModel / SQLite or PostgreSQL)]
| Step | Implementation | Why |
|---|---|---|
| PDF text extraction | pypdf | Read text from the uploaded document before asking a model to interpret it. |
| Résumé parsing and role suggestions | Gemini through its OpenAI-compatible API, with Pydantic models | Convert varied résumé wording into a consistent profile. |
| Job collection | HTTP requests and HTML parsing | Collect public source data without asking a model to invent openings. |
| Job ranking | Deterministic Python scoring | Make the ranking inspectable and reproducible for the same inputs. |
| Outreach drafting | Gemini, with résumé-based template fallbacks | Help compose a short introduction while retaining a usable fallback. |
| Sending/applying | Visitor action | Keep the final decision with the person using the app. |
This is an AI-assisted application workflow, not an autonomous job-application agent.
The matcher builds a profile from extracted skills, previous job titles, and saved target roles. If no target roles were saved, it uses the résumé's suggested roles.
The displayed score is on a 0–10 scale:
| Signal | Contribution |
|---|---|
| Target role in job title | Up to 3.5 points; partial title overlap or description evidence receives less. |
| Skill coverage | Up to 5 points, based on matched versus detected missing skills. |
| Previous experience title in job title | 1 point. |
| Both a target-role title match and matching skills | 0.5 points. |
The service calculates a doubled internal score and converts it back to the displayed scale. Cards label scores of 7 or above as strong fit, 4 or above as medium fit, and lower scores as low fit. A separate relevance gate filters jobs using role, experience, and skill evidence before ranking.
Whole-term matching prevents examples such as Go matching Google. A small alias map handles variants such as Node.js/nodejs and PostgreSQL/postgres. The known-skill vocabulary helps identify missing skills; the résumé's own skills can also match.
Limits: wording, incomplete descriptions, and the skill vocabulary affect results. The score does not establish seniority suitability, visa eligibility, compensation fit, or likelihood of getting an interview. See matcher.py for the exact rules.
localStorage; the database stores its SHA-256 hash.Cache-Control: no-store. Production CORS is restricted to the configured frontend origin.The API also applies per-process limits to session creation, uploads, scraping, contact enrichment, and draft generation. These are lightweight guards for a single-worker deployment, not a distributed abuse-prevention system.
| Layer | Tools |
|---|---|
| Interface | React 18, TypeScript, React Router, Vite 6, Tailwind CSS 4 |
| API | Python 3.10+, FastAPI, Pydantic, Uvicorn |
| Persistence | SQLModel; SQLite locally, PostgreSQL for persistent hosting |
| AI | Gemini via the OpenAI-compatible endpoint; model configurable through environment variables |
| Collection | HTTPX, Beautiful Soup |
| PDF processing | pypdf |
| Verification | pytest, TypeScript build, ESLint |
| Deployment configuration | Netlify frontend, Render API; PostgreSQL supplied separately |
Use two terminals. The commands below use Windows PowerShell; on macOS/Linux, replace .venv\Scripts\python.exe with .venv/bin/python and use your installed Python 3.10+ executable.
git clone https://github.com/Aagamsheth0601/hiremenow.git
Set-Location hiremenow/backend
py -3.10 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e .
Copy-Item .env.example .env
Set GEMINI_API_KEY in backend/.env. Keep the other example values for a local SQLite database and frontend at http://127.0.0.1:5173. Run from backend/ so the relative .env and SQLite paths resolve correctly.
.\.venv\Scripts\python.exe -m uvicorn backend.main:app --reload --host 127.0.0.1 --port 8000
Check health for {"status":"ok"}. Interactive API documentation is available at /docs.
In the second terminal, from the repository root:
Set-Location frontend
npm ci
Copy-Item .env.example .env
npm run dev -- --host 127.0.0.1
Open the URL printed by Vite, normally http://127.0.0.1:5173. The frontend defaults to the local API on port 8000. Use the committed lockfile with npm ci to reproduce dependency resolution.
| Variable | Where | Purpose |
|---|---|---|
GEMINI_API_KEY | Backend only | Credential for résumé parsing and generated outreach. |
GEMINI_MODEL | Backend | Model identifier; the checked-in example uses gemini-3.1-flash-lite. |
GEMINI_BASE_URL | Backend | Defaults to Google's OpenAI-compatible endpoint. |
DATABASE_URL | Backend | Local SQLite URL or production PostgreSQL connection string. |
FRONTEND_URL | Backend | Allowed frontend origin for CORS. |
VITE_BACKEND_URL | Frontend | Public API origin; defaults to http://127.0.0.1:8000. |
Never put an API key or database credential in a VITE_* variable: those values are included in the browser build. .env files are gitignored; .env.example files document configuration without credentials.
Except for health and session creation, the routes below require Authorization: Bearer <visitor-token>. Obtain the token with POST /sessions.
| Route | Purpose |
|---|---|
GET /health | Basic API health response. |
POST /sessions | Create an anonymous browser session. |
POST /resumes | Upload and parse a PDF using multipart field file. |
GET /resumes | List the current visitor's résumé records. |
GET /resumes/latest/pdf | Retrieve that visitor's stored PDF. |
POST /resumes/latest/reparse | Parse the stored extracted text again. |
GET, PUT, DELETE /preferences | Read, replace, or clear match preferences. |
POST /jobs/scrape | Refresh public job data. |
GET /jobs | Retrieve jobs with filters and personalized match evidence. |
POST /jobs/{id}/enrich | Resolve available company/contact information. |
POST, GET /jobs/{id}/draft | Generate or retrieve a visitor-owned outreach draft. |
PATCH /jobs/{id}/star | Update shortlist state. |
PATCH /jobs/{id}/status | Update application status. |
GET /jobs/status-counts | Retrieve counts for the visitor's job-status filters. |
Use the running API's /docs page for complete request schemas, query parameters, and additional endpoints.
From backend/, install the test tools in your virtual environment and run:
.\.venv\Scripts\python.exe -m pip install pytest pytest-asyncio
.\.venv\Scripts\python.exe -m pytest tests -q
The checked-in tests cover:
From frontend/:
npm run build
npm run lint
The build runs TypeScript checking before Vite bundles the app. These checks do not prove live source availability, model accuracy, or job/contact freshness. For an end-to-end smoke test, verify PDF upload, discovery, refinement, draft creation, and isolation between two different browsers.
The repository contains configuration for:
netlify.toml builds and publishes frontend/dist, with an SPA fallback for client-side routes.render.yaml starts the FastAPI service with one worker and a /health check.DATABASE_URL. Avoid SQLite on an ephemeral hosting filesystem.Set VITE_BACKEND_URL before building the frontend, and set the API's FRONTEND_URL to the exact deployed frontend origin. Keep database and Gemini credentials on the backend only. Follow DEPLOYMENT.md for the deployment sequence and smoke checks.
backend/
src/backend/
main.py FastAPI setup, lifespan, CORS, cache policy
visitor.py Anonymous identities and expiry cleanup
rate_limit.py Per-process expensive-action limits
models/ Résumés, jobs, preferences, drafts, visitor state
routers/ HTTP endpoints and ownership checks
services/
resume_parser.py PDF text extraction and Gemini parsing
matcher.py Explainable scoring and relevance rules
yc_scraper.py Public jobs and company/contact enrichment
outreach.py Draft generation and template fallbacks
tests/ Focused backend regression tests
frontend/
src/pages/ Setup and job-discovery screens
src/components/ Navigation and match-focus controls
src/lib/api.ts Typed API models and browser-session handling
netlify.toml Frontend deployment configuration
render.yaml Backend deployment configuration
DEPLOYMENT.md Hosting runbook
AGENTS.md Project notes and bug history
Useful next improvements would be a labeled matching evaluation set, clearer draft-generation provenance, background collection with freshness indicators, and an explicit profile deletion/export flow. These are future work, not claims about the current app.