A smart research tool with two powerful modes: Paper Finder for discovering and downloading research papers, and Gap Analysis for identifying unexplored research opportunities.
- Smart Search - AI-powered query generation using LLM to find relevant papers
- Multi-Source Downloads - Parallel downloads from OpenAlex, Unpaywall, Sci-Hub, and LibGen
- Bulk Processing - Upload DOI lists to process multiple papers at once
- Auto-Broadening - Automatically expands search when results are limited
- Rich Metadata - Captures authors, journals, years, and DOIs
- Research Gap Detection - AI identifies unexplored areas in your field
- Literature Comparison - Analyzes existing research to find opportunities
- Smart Recommendations - Suggests potential research directions
- Exportable Reports - Download comprehensive gap analysis reports
- Framework: Astro with SSR
- Runtime: Bun / Node.js
- Language: TypeScript
- APIs: OpenAlex (free), Scopus (optional), OpenRouter (LLM)
- Bun v1.0+ or Node.js
- OpenRouter API Key (required)
- Scopus API Key (optional - falls back to OpenAlex)
-
Clone the repository:
git clone https://github.com/doedja/jfinder.git cd jfinder -
Install dependencies:
bun install
-
Create environment file:
cp .env.example .env
-
Edit
.envand add your API keys:OPENROUTER_API_KEY=sk-or-v1-your_key # Optional: SCOPUS_API_KEY=your_scopus_key
-
Start development server:
bun run dev
bun run build
bun run start# Create .env file with your API keys
cp .env.example .env
# Build and run
docker-compose up -ddocker build -t jfinder .
docker run -d -p 3000:3000 \
-e OPENROUTER_API_KEY=your_key \
jfinder- Connect your GitHub repository to Coolify
- Select "Docker" as build method
- Add environment variables in Coolify UI:
OPENROUTER_API_KEY(required)SCOPUS_API_KEY(optional)- Other optional variables from
.env.example
- Configure persistent storage for
/app/downloads - Deploy
| Endpoint | Method | Description |
|---|---|---|
/api/search |
POST | Start a search task |
/api/progress/[taskId] |
GET | SSE stream for progress |
/api/download/[taskId]/[type] |
GET | Download results (zip/metadata) |
/api/metadata/[taskId] |
GET | Get search metadata |
| Endpoint | Method | Description |
|---|---|---|
/api/analyze-gaps |
POST | Start gap analysis |
/api/gap-progress/[taskId] |
GET | SSE stream for gap analysis |
/api/gap-results/[taskId] |
GET | Get gap analysis results |
/api/gap-report/[taskId] |
GET | Download gap analysis report |
| Variable | Required | Default | Description |
|---|---|---|---|
OPENROUTER_API_KEY |
Yes | - | OpenRouter API key for LLM |
OPENROUTER_MODEL |
No | qwen/qwen-2.5-72b-instruct |
LLM model to use |
SCOPUS_API_KEY |
No | - | Elsevier Scopus API key (falls back to OpenAlex) |
ANNAS_API_KEY |
No | - | Anna's Archive API key (adds extra download source) |
RAPIDAPI_KEY |
No | - | RapidAPI key for Anna's Archive |
PROXY_URL |
No | - | WebShare.io proxy list URL |
DOWNLOAD_DIR |
No | ./downloads |
Directory for downloads |
TASK_TTL_MS |
No | 3600000 |
Task cleanup time (1 hour) |
MAX_UPLOAD_SIZE |
No | 16777216 |
Max upload size (16MB) |
UMAMI_WEBSITE_ID |
No | - | Umami analytics website ID |
UMAMI_SRC |
No | - | Umami analytics script URL |
Papers are downloaded from multiple sources in parallel for speed and reliability:
- OpenAlex - Open Access URLs (free, no key)
- Unpaywall - Legal OA links (free, no key)
- Sci-Hub - Research papers (free, no key)
- LibGen - Library Genesis (free, no key)
- Anna's Archive - Optional, requires API key
MIT License - see LICENSE for details.
This tool is intended for legitimate academic research purposes. Users are responsible for complying with the terms of service of any sources used and applicable copyright laws in their jurisdiction.