Finding a job in another country is more complicated than searching for a job title.
Candidates often need to understand:
Iβm building an open-source project called JobSearch to bring these activities into one workspace.
GitHub repository:
https://github.com/subraatakumar/job-search
The project is still in its early MVP stage, but the initial Docker setup, authentication, resume import, and profile workflow are working.
JobSearch is designed for people applying internationally.
For example, a user in India might want to search for:
The long-term workflow is:
Discover jobs
β
Evaluate role and sponsorship fit
β
Prepare a tailored application
β
Practice for the interview
β
Track the application
β
Improve based on outcomes
The goal is not to automatically apply to hundreds of jobs. The goal is to help candidates make better, more informed applications while keeping the user in control.
The first version focuses on building a trustworthy foundation.
Currently implemented:
Planned features include:
There are several reasons for making this project open source.
First, job-search data is personal and sensitive. Users should be able to understand where their data goes and how the application works.
Second, different users will want different AI providers. Some may prefer a hosted provider, while others may want to run a local model through Ollama.
Third, job sources vary by country. A community can help add lawful, documented integrations for different regions without tightly coupling the core application to a single provider.
The project is released under the MIT License.
The current architecture is intentionally simple:
Browser
β
Next.js application
β
PostgreSQL
β
AI provider adapter
The application will eventually include a background worker for scheduled searches:
Scheduler
β
Job source connectors
β
Normalization and deduplication
β
Job database
β
User notifications and matching
The planned technology stack is:
The project uses an existing central authentication service based on Better Auth.
The authentication service provides:
The JobSearch application does not directly share authentication cookies or the authentication database.
The flow is:
JobSearch
β
Redirect to central Auth service
β
User signs in
β
Auth redirects back with an authorization code
β
JobSearch exchanges the code using PKCE
β
JobSearch creates its own local session
This keeps the authentication boundary clear and allows other applications to reuse the same identity service without sharing application data.
The project is designed to be easy to run with Docker.
Requirements:
curl
Clone the repository:
git clone https://github.com/subraatakumar/job-search.git
cd job-search
Create the local environment file:
cp .env.example .env
Set a strong session secret in .env
, then run:
./re-run-local.sh
The local services are available at:
JobSearch: http://localhost:3020
Dashboard: http://localhost:3020/dashboard
Profile: http://localhost:3020/profile
PostgreSQL: localhost:5433
To stop the services:
docker compose down
The normal shutdown command does not delete the PostgreSQL volume.
The project also includes a separate production-like mode:
cp .env.prod.example .env.prod
Configure the production values and run:
./re-run-local.sh prod
This mode uses:
JobSearch: http://localhost:3021
PostgreSQL: localhost:5434
A Cloudflare Tunnel can route:
jobs.example.com β http://localhost:3021
Local and production-like modes use separate Compose projects and separate database volumes.
The first version supports text-based PDF resumes.
The workflow is:
Upload PDF
β
Extract text
β
Create draft profile
β
User reviews the information
β
Confirm the master profile
The application does not yet treat extracted text as confirmed truth.
This is important because resume parsing can produce errors. A parser might misunderstand:
The user must review the extracted information before it can be used to generate an application.
Scanned or image-only PDF files are not supported in the MVP. OCR is planned for a future version after evaluating:
The project is designed to support OpenAI-compatible endpoints.
The long-term goal is to let users configure:
This is important because users have different requirements around:
The application should never silently send a user's resume or profile data to an AI provider. Provider configuration and consent must be explicit.
The project handles sensitive information, including:
Important design principles include:
The project will not implement:
Job sources should use official APIs, permitted feeds, company career pages, user-provided URLs, or other lawful methods.
The landing page explains the product workflow and includes:
The profile page includes a drag-and-drop PDF upload area and extracted resume preview.
The UI is being polished screen by screen instead of waiting for a large redesign at the end. This allows the product to remain usable while the underlying features are developed.
I would especially welcome feedback on:
Contributions are welcome.
Before contributing, please read:
CONTRIBUTING.md
SECURITY.md
CODE_OF_CONDUCT.md
The project is still early, so useful contributions may include:
Please keep pull requests focused and include testing or verification steps.
International job searching is often fragmented across job boards, spreadsheets, documents, notes, and interview preparation tools.
JobSearch is an attempt to bring those activities together while keeping the user in control of their data and AI provider.
The project is early, but the foundation is now in place:
If this problem interests you, I would love feedback, ideas, issues, and contributions.
GitHub:
https://github.com/subraatakumar/job-search