Brutalist, monochrome research aggregator. Search OpenAlex, Semantic Scholar, arXiv, PubMed, Crossref, and Europe PMC in one interface — real APIs only, no mock data.
- Next.js 16 (App Router)
- TypeScript
- Tailwind CSS v4
- API routes (
/api/search,/api/sources)
cd paperfront
cp .env.example .env.local
# Edit CONTACT_EMAIL in .env.local (recommended)
npm install
npm run devOpen http://localhost:3000 → Start your research → /search.
| Variable | Required | Purpose |
|---|---|---|
CONTACT_EMAIL |
Recommended | OpenAlex mailto polite pool; User-Agent |
SEMANTIC_SCHOLAR_API_KEY |
No | Higher Semantic Scholar rate limits |
NCBI_API_KEY |
No | Higher PubMed E-utilities throughput |
| Source | API | Docs |
|---|---|---|
| OpenAlex | api.openalex.org |
https://docs.openalex.org/ |
| Semantic Scholar | api.semanticscholar.org |
https://api.semanticscholar.org/api-docs/ |
| arXiv | export.arxiv.org/api |
https://info.arxiv.org/help/api/ |
| PubMed | NCBI E-utilities | https://www.ncbi.nlm.nih.gov/home/develop/api/ |
| Crossref | api.crossref.org |
https://api.crossref.org/ |
| Europe PMC | ebi.ac.uk/europepmc |
https://europepmc.org/RestfulWebService |
Paid sources (Scopus, Web of Science, Google Scholar via SerpApi, BASE) are documented for future use when keys are added.
- Push to GitHub.
- Import project in Vercel.
- Set environment variables (
CONTACT_EMAILat minimum). - Deploy.
npm run build- Debounced live multi-source search
- Deduplication by DOI / title
- Adaptive filters per source
- Grid / list views, infinite scroll
- Paper detail modal, BibTeX export, local save (
localStorage) - Per-source error handling and timing stats
- In-memory response cache (60s) on the server
src/
app/
api/search/route.ts # Unified search endpoint
api/sources/route.ts # Source metadata
page.tsx # Landing
search/page.tsx # Search UI
components/ # UI components
lib/
sources/ # Per-API adapters
dedupe.ts
cache.ts
types.ts
MIT