[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80005":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":30,"discoverSource":31},80005,"LangHire","jaimaann\u002FLangHire","jaimaann","AI-powered automated job application system with a self-learning memory engine and native desktop UI.","https:\u002F\u002Fwww.langhire.org",null,"Python",74,24,1,17,0,2,3,5,6,50.19,"MIT License",false,"main",true,[],"2026-06-12 04:01:26","\u003Cp align=\"center\">\n  \u003Cimg src=\"src-tauri\u002Ficons\u002Ficon.png\" alt=\"LangHire\" width=\"120\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">LangHire\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>AI-powered job application automation with a native desktop UI\u003C\u002Fstrong>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Flanghire.org\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWebsite-langhire.org-FF385C?style=flat&logo=globe&logoColor=white\" alt=\"Website\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002Fdhg69gTSQ\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-Join%20Community-5865F2?style=flat&logo=discord&logoColor=white\" alt=\"Discord\" \u002F>\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-macOS%20%7C%20Windows%20%7C%20Linux-blue\" alt=\"Platform\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLanguages-11%20supported-teal\" alt=\"Languages\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTauri%20v2-React%20%2B%20TypeScript-purple\" alt=\"UI\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBackend-Python%20%2B%20FastAPI-green\" alt=\"Backend\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAI-OpenAI%20%7C%20Claude%20%7C%20Bedrock-orange\" alt=\"AI\" \u002F>\n  \u003Ca href=\"LICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-lightgrey\" alt=\"License\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"#readme\">\u003Cstrong>English\u003C\u002Fstrong>\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.hi.md\">हिन्दी\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.de.md\">Deutsch\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.fr.md\">Français\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.es.md\">Español\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.ar.md\">العربية\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.nl.md\">Nederlands\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.ja.md\">日本語\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.ko.md\">한국어\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.pt.md\">Português\u003C\u002Fa> &middot;\n  \u003Ca href=\"docs\u002FREADME.ms.md\">Bahasa Melayu\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002Fdhg69gTSQ\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%F0%9F%92%AC%20Join%20our%20Discord%20%E2%80%94%20get%20help%2C%20share%20plugins%2C%20discuss%20features-5865F2?style=for-the-badge&logo=discord&logoColor=white\" alt=\"Join Discord\" \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\nApplying to jobs is tedious. You find a listing, click through to the application, fill in the same fields you filled in yesterday, answer the same screening questions, upload your resume again — repeat fifty times. LangHire automates the entire loop.\n\nIt uses AI browser agents to search LinkedIn, collect matching jobs, fill out applications, upload your resume, and submit — while a **self-learning memory system** remembers how each applicant tracking system (ATS) works so it gets faster and more accurate over time. Everything runs locally on your machine. No data leaves your computer except LLM API calls.\n\n---\n\n## Download\n\n\u003Cdiv align=\"center\">\n\n| \u003Cimg src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fdevicons\u002Fdevicon\u002Ficons\u002Fapple\u002Fapple-original.svg\" width=\"16\" \u002F> macOS | \u003Cimg src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fdevicons\u002Fdevicon\u002Ficons\u002Fwindows11\u002Fwindows11-original.svg\" width=\"16\" \u002F> Windows | \u003Cimg src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fgh\u002Fdevicons\u002Fdevicon\u002Ficons\u002Flinux\u002Flinux-original.svg\" width=\"16\" \u002F> Linux |\n|:---:|:---:|:---:|\n| [**Apple Silicon (.dmg)**](https:\u002F\u002Fgithub.com\u002Fjaimaann\u002FLangHire\u002Freleases\u002Flatest\u002Fdownload\u002FLangHire_1.0.0_aarch64.dmg) | [**64-bit Installer (.exe)**](https:\u002F\u002Fgithub.com\u002Fjaimaann\u002FLangHire\u002Freleases\u002Flatest\u002Fdownload\u002FLangHire_1.0.0_x64-setup.exe) | [**AppImage (Universal)**](https:\u002F\u002Fgithub.com\u002Fjaimaann\u002FLangHire\u002Freleases\u002Flatest\u002Fdownload\u002FLangHire_1.0.0_amd64.AppImage) |\n| [Intel (.dmg)](https:\u002F\u002Fgithub.com\u002Fjaimaann\u002FLangHire\u002Freleases\u002Flatest\u002Fdownload\u002FLangHire_1.0.0_x64.dmg) | | [Debian \u002F Ubuntu x64 (.deb)](https:\u002F\u002Fgithub.com\u002Fjaimaann\u002FLangHire\u002Freleases\u002Flatest\u002Fdownload\u002FLangHire_1.0.0_amd64.deb) |\n| | | [Debian \u002F Ubuntu ARM64 (.deb)](https:\u002F\u002Fgithub.com\u002Fjaimaann\u002FLangHire\u002Freleases\u002Flatest\u002Fdownload\u002FLangHire_1.0.0_arm64.deb) |\n\n\u003C\u002Fdiv>\n\n\u003Cp align=\"center\">\u003Csub>Requires an LLM API key (OpenAI, Anthropic, or AWS). Chromium is installed automatically on first launch. See \u003Ca href=\"#quick-start\">Quick Start\u003C\u002Fa>.\u003C\u002Fsub>\u003C\u002Fp>\n\n> **Developers** -- See [Development Setup](#development-setup) to run from source.\n\n### Installation Notes\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>macOS\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nThe macOS release is **signed and notarized** by Apple. Just open the `.dmg`, drag LangHire to Applications, and double-click to launch. No extra steps needed.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Windows\u003C\u002Fstrong> -- \"Windows protected your PC\" (SmartScreen)\u003C\u002Fsummary>\n\nThe Windows installer is not code-signed. You may see a SmartScreen warning:\n\n1. Run the `.exe` installer\n2. If you see **\"Windows protected your PC\"**:\n   - Click **More info**\n   - Click **Run anyway**\n3. Complete the installer and launch LangHire\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Linux\u003C\u002Fstrong> -- AppImage or .deb\u003C\u002Fsummary>\n\n**AppImage:**\n```bash\nchmod +x LangHire_1.0.0_amd64.AppImage\n.\u002FLangHire_1.0.0_amd64.AppImage\n```\n\n**Debian \u002F Ubuntu:**\n```bash\n# Install uv package manager (required for browser management)\ncurl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh\n\n# Install the app\nsudo dpkg -i LangHire_1.0.0_arm64.deb\n```\n\n> [!TIP]\n> **If Chromium doesn't launch:** Some Linux distributions (like Ubuntu 24.04+) have sandbox restrictions. Run this to manually install browsers and dependencies:\n> ```bash\n> uvx playwright install --with-deps chromium\n> ```\n\u003C\u002Fdetails>\n\n---\n\n## Features\n\n- **Native desktop app** -- macOS, Windows, and Linux\n- **Plugin-based job sources** -- LinkedIn, Indeed, SEEK, Naukri, Reed, StepStone ship as built-in YAML plugins. Write your own plugin for any job site in minutes — no code required, just a YAML file with prompts. Import community plugins via the UI.\n- **Global ATS support** -- 30+ applicant tracking systems supported out of the box (Workday, Greenhouse, Lever, iCIMS, SmartRecruiters, Taleo, SuccessFactors, Personio, Teamtailor, Darwinbox, and more). The self-learning memory system transfers knowledge across all sites using the same ATS — apply on one Workday site, and every future Workday application benefits.\n- **18 countries, 11 languages** -- Country-aware profiles (date formats, currencies, work authorization, notice periods) with full UI translation. Auto-detects language from your country.\n- **Job collection** -- AI browser agent searches your selected platform for jobs matching your target titles and locations\n- **Automated applications** -- AI agent fills forms, uploads your resume, answers screening questions\n- **AI cover letter generation** -- One-click tailored cover letters using your LLM, customized per job description\n- **Tailored resumes** (beta) -- Auto-customizes your resume for each job description\n- **Self-learning memory** -- Stores per-ATS procedural knowledge (navigation patterns, form strategies, UI quirks). Lessons from one Workday site apply to all Workday sites globally.\n- **Smart Q&A reuse** -- Learns answers from previous applications and reuses them\n- **Multi-LLM support** -- OpenAI, Anthropic, AWS Bedrock, Ollama, or OpenRouter (100+ models)\n- **Dashboard** -- Real-time stats, success rates, per-domain performance, memory impact analysis\n- **CLI tools** -- Power-user scripts for collection, application, memory management, and analytics\n- **100% local** -- All data stored on your machine in your OS app data directory\n\n---\n\n## Screenshots\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\" width=\"33%\">\n\u003Cdetails>\n\u003Csummary>\u003Cimg src=\"screenshots\u002Fdashboard.png\" alt=\"Dashboard\" width=\"280\" \u002F>\u003Cbr\u002F>\u003Cstrong>Dashboard\u003C\u002Fstrong>\u003C\u002Fsummary>\n\u003Cimg src=\"screenshots\u002Fdashboard.png\" alt=\"Dashboard\" width=\"800\" \u002F>\n\u003C\u002Fdetails>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"33%\">\n\u003Cdetails>\n\u003Csummary>\u003Cimg src=\"screenshots\u002Fjobs.png\" alt=\"Jobs\" width=\"280\" \u002F>\u003Cbr\u002F>\u003Cstrong>Jobs\u003C\u002Fstrong>\u003C\u002Fsummary>\n\u003Cimg src=\"screenshots\u002Fjobs.png\" alt=\"Jobs\" width=\"800\" \u002F>\n\u003C\u002Fdetails>\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"33%\">\n\u003Cdetails>\n\u003Csummary>\u003Cimg src=\"screenshots\u002Fmemory.png\" alt=\"Memory\" width=\"280\" \u002F>\u003Cbr\u002F>\u003Cstrong>Memory\u003C\u002Fstrong>\u003C\u002Fsummary>\n\u003Cimg src=\"screenshots\u002Fmemory.png\" alt=\"Memory\" width=\"800\" \u002F>\n\u003C\u002Fdetails>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Cp align=\"center\">\u003Csub>Click any screenshot to expand\u003C\u002Fsub>\u003C\u002Fp>\n\n---\n\n## Quick Start\n\n1. **Download and install** from the [Download](#download) section above\n2. **Open the app** -- Chromium downloads automatically on first launch (~400 MB, one time)\n3. **Setup wizard** walks you through: **LLM provider** → **Resume upload** (auto-parses your profile) → **Review profile** → Ready\n4. **Collect jobs** -- go to **Jobs** → enter a job title → **Start Collecting**\n5. **Apply** -- go to **Apply** → **Start Applying** and watch the dashboard as applications roll in\n\n---\n\n## How It Works\n\nLangHire runs a three-stage loop: **Collect → Apply → Learn**.\n\n**Collect** -- An AI browser agent logs into LinkedIn, searches for jobs matching your target titles and locations, and saves each listing with its URL, company, title, and description.\n\n**Apply** -- For each pending job, the agent opens the application (Easy Apply or external ATS), fills every field using your profile, uploads your resume, answers screening questions from its Q&A bank, and submits. Multiple workers can run in parallel.\n\n**Learn** -- After each application, the system extracts procedural learnings: which buttons to click, how forms are structured, what fails and what works. These memories are stored per-ATS domain with confidence scores, so next time it encounters the same ATS, it already knows how to navigate it.\n\n### Architecture\n\n```\n┌──────────────────────────────────────────────────┐\n│              Tauri Desktop Shell (Rust)           │\n│     Lightweight native wrapper, ~10 MB           │\n└────────────────────┬─────────────────────────────┘\n                     │ spawns sidecar\n                     ▼\n┌──────────────────────────────────────────────────┐\n│  React Frontend          │  FastAPI Backend      │\n│  (TypeScript)            │  (Python sidecar)     │\n│                          │                       │\n│  - Dashboard             │  - browser-use agents │\n│  - Profile editor        │  - Playwright browser │\n│  - LLM settings          │  - Memory system      │\n│  - Job browser           │  - Multi-LLM factory  │\n│  - Apply controls        │  - 20+ REST endpoints │\n│  - Memory viewer         │                       │\n│          ◄── HTTP localhost:8742 ──►             │\n└──────────────────────────────────────────────────┘\n                     │\n                     ▼\n        SQLite + JSON (OS app data directory)\n```\n\nAll data is stored locally:\n\n| OS | Path |\n|----|------|\n| macOS | `~\u002FLibrary\u002FApplication Support\u002Flanghire\u002F` |\n| Windows | `%APPDATA%\u002Flanghire\u002F` |\n| Linux | `~\u002F.config\u002Flanghire\u002F` |\n\n---\n\n## Development Setup\n\n### Prerequisites\n\n| Tool | Version | Install |\n|------|---------|---------|\n| Node.js | 18+ | [nodejs.org](https:\u002F\u002Fnodejs.org) |\n| Rust | 1.77+ | `curl --proto '=https' --tlsv1.2 -sSf https:\u002F\u002Fsh.rustup.rs \\| sh` |\n| Python | 3.13+ | [python.org](https:\u002F\u002Fpython.org) |\n| uv | latest | `curl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh \\| sh` |\n\n### Clone and Install\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fjaimaann\u002FLangHire.git\ncd LangHire\n\nnpm install                                    # Node dependencies\nuv sync                                        # Python dependencies\nuv run python -m playwright install chromium   # Browser engine\n```\n\n### Run in Development\n\nTwo terminals:\n\n```bash\n# Terminal 1 -- Python backend\nuv run python backend\u002Fmain.py\n\n# Terminal 2 -- Frontend dev server\nnpm run dev\n```\n\nOpen http:\u002F\u002Flocalhost:1420, or run as a native desktop app instead:\n\n```bash\n# Terminal 2 (alternative) -- Native Tauri app\ncargo tauri dev\n```\n\n> The first `cargo tauri dev` compiles the Rust shell (~2 min). Subsequent runs are fast.\n\n### Build for Production\n\n```bash\ncargo tauri build\n```\n\nProduces platform-specific installers in `src-tauri\u002Ftarget\u002Frelease\u002Fbundle\u002F`.\n\n---\n\n## Project Structure\n\n```\nLangHire\u002F\n├── src\u002F                        # React frontend (TypeScript)\n│   ├── pages\u002F                  # Dashboard, Profile, Jobs, Apply, Memory, Settings, LLMSettings, Logs\n│   ├── components\u002F             # UI primitives, SetupWizard, Sidebar, LoginCards\n│   └── lib\u002F                    # API client, TypeScript types\n│\n├── backend\u002F                    # Python backend (FastAPI)\n│   ├── main.py                 # Server with 20+ endpoints\n│   ├── core\u002F                   # Config, LLM factory, shared utilities\n│   └── memory\u002F                 # SQLite store, post-run extractors, metrics\n│\n├── src-tauri\u002F                  # Tauri native shell (Rust)\n│   ├── src\u002Flib.rs              # App setup, sidecar launch\n│   └── tauri.conf.json         # Window config, permissions, bundling\n│\n├── cli\u002F                        # CLI automation scripts\n│   ├── collect_jobs.py         # Job collection\n│   ├── apply_jobs.py           # Job application (multi-worker)\n│   ├── apply_jobs_tailored.py  # Tailored resume variant\n│   ├── dashboard.py            # Terminal analytics dashboard\n│   └── memory_cli.py           # Memory management\n│\n└── scripts\u002F                    # Build helpers (macOS DMG, backend bundling)\n```\n\n---\n\n## CLI Usage\n\nThe CLI scripts work standalone alongside the desktop app:\n\n```bash\n# Collect jobs from LinkedIn\nuv run python cli\u002Fcollect_jobs.py\n\n# Apply to jobs (3 parallel workers)\nuv run python cli\u002Fapply_jobs.py --workers 3\n\n# Apply with per-job tailored resumes\nuv run python cli\u002Fapply_jobs_tailored.py --workers 2\n\n# Memory management\nuv run python cli\u002Fmemory_cli.py stats\nuv run python cli\u002Fmemory_cli.py domains\nuv run python cli\u002Fmemory_cli.py show linkedin.com\n\n# Terminal performance dashboard\nuv run python cli\u002Fdashboard.py\n```\n\n---\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for full guidelines.\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fjaimaann\u002FLangHire.git\ncd LangHire\nnpm install && uv sync\nuv run python backend\u002Fmain.py   # Terminal 1\nnpm run dev                     # Terminal 2\n```\n\n**Areas where help is needed:**\n\n- **More job platforms** -- Indeed, Glassdoor, and other job listing sites beyond LinkedIn\n- **Local LLM support** -- Ollama, llama.cpp, and other local inference options\n- **Multi-country support** -- Localized job sites, address formats, and work authorization flows\n- **Documentation** -- Tutorials, video walkthroughs, and guides\n- **Testing** -- Unit, integration, and E2E test coverage\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n## Disclaimer\n\nThis tool automates job applications on LinkedIn and other platforms. Use it responsibly:\n\n- Respect each platform's Terms of Service and rate limits\n- Don't spam employers with low-quality applications\n- Review your profile and settings before running automated applications\n- You are responsible for all applications submitted through this tool\n\n---\n\n\u003Cp align=\"center\">\n  Built with \u003Ca href=\"https:\u002F\u002Ftauri.app\">Tauri\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Freact.dev\">React\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fpython.org\">Python\u003C\u002Fa>, and \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbrowser-use\u002Fbrowser-use\">browser-use\u003C\u002Fa>\n\u003C\u002Fp>\n","LangHire 是一款基于AI的自动化求职申请系统，配备自我学习记忆引擎和原生桌面用户界面。它利用AI浏览器代理在LinkedIn上搜索并收集匹配的工作岗位，自动填写申请表、上传简历并提交，同时通过自我学习机制不断优化对不同应聘者跟踪系统的处理方式，从而提高效率与准确性。该软件支持多语言环境，采用Python及FastAPI构建后端服务，前端则使用Tauri框架结合React与TypeScript开发，并且集成了OpenAI等先进的AI技术来增强其功能。适用于需要频繁投递简历的职业人士或希望简化求职流程的用户。","2026-06-11 03:58:53","CREATED_QUERY"]