Skip to content

Journal-Trends/journal-trends

Repository files navigation

Journal Trends — frontend

Free, open-source tool to visualise publication patterns of any academic journal indexed in OpenAlex. Live at journaltrends.com.

Paste any journal's ISSN — or type its name — and the page renders interactive charts of country, institution, and author publication trends, plus Problematic Paper Screener integrity-flag rates and Scopus indexing status. All processing happens client-side in the browser; aggregated results are cached by the sibling backend so subsequent visits are instant.

A project of India Research Watch (IRW), built to help researchers compare journals before submitting and to surface integrity signals that often correlate with predatory practices.


Try it

Features

  • Country / institution / author trends with fractional counting + year-on-year breakdown
  • Problematic Paper Screener integration — flag rates over time, detector mix, country/institution concentration of flagged papers
  • Scopus indexing card showing current Active/Inactive status, coverage years, and any "delisted by Scopus" history (with an orange marker on the charts)
  • Pretty per-journal URLs (/journal/<slug>-<issn>) with SEO-optimised prerendered HTML, per-journal OG thumbnails (LinkedIn/X/Slack previews show the country chart), and JSON-LD Periodical + Dataset schemas
  • Journal-name autocomplete over a bundled index of 84K+ active journals
  • Per-chart share buttons (LinkedIn, X, native Web Share API, downloadable PNG)
  • Honest data-coverage handling — papers with no OpenAlex country attribution land in a labelled "Unknown" bucket rather than being silently dropped. See the blog post for the methodology + planned recovery via author-affiliation history.

Architecture

Static SPA on Netlify + Flask + SQLite backend on PythonAnywhere (sibling repo: journal-trends-backend).

┌─────────────────────────┐                            ┌──────────────────────────┐
│ Browser (Netlify)       │  GET /api/stats/<issn> ──→ │ journal-trends-backend   │
│  vanilla JS, Chart.js   │                            │  Flask + SQLite          │
│  no build step          │ ←── 200 cached agg ─────── │  on PythonAnywhere       │
│                         │     or 404                 │                          │
│  on 404:                │                            │  cached aggregations     │
│   fetch OpenAlex direct │  ─── api.openalex.org ──→  │  PPS dataset             │
│   aggregate in-browser  │                            │  Scopus extension list   │
│   render charts         │  POST /api/stats/<issn> ─→ │                          │
│                         │ ←── 201 stored ─────────── │                          │
└─────────────────────────┘                            └──────────────────────────┘

Netlify also proxies:
  /journal/<slug>-<issn>      → backend SEO-prerender route
  /journal/<slug>-<issn>.png  → backend OG-thumbnail route
  /sitemap.xml                → backend dynamic sitemap

Local development

Plain HTML/CSS/JS — no build step.

Option 1: Frontend-only (uncached journals fetch from OpenAlex directly):

python -m http.server 8000
# open http://localhost:8000

Option 2: Full stack (recommended) — start the backend, which also serves the frontend in dev mode:

cd ../journal-trends-backend
python app.py     # serves on http://localhost:5000
# open http://localhost:5000

ES modules require an HTTP origin — opening index.html via file:// may fail in some browsers.

Deploy

This repo includes netlify.toml with the redirect / proxy / cache-header rules. Either connect Netlify to the repo, or drag-and-drop the folder via app.netlify.com. Build command is empty; publish directory is ..

The bundled data/journal_index.json is refreshed monthly by running the sibling backend's scripts/build_journal_index.py and committing the result here.

Project layout

journal-trends/
  index.html               entry
  blog/                    long-form posts referenced from the UI
  data/journal_index.json  bundled name → ISSN index (~84K journals)
  src/
    main.js                bootstrap
    api/                   OpenAlex + backend clients
    storage/cache.js       IndexedDB cache for fetched works
    aggregate/             single-pass aggregation
    ui/                    search, autocomplete, share, tour, tabs, scopus card
    charts/                Chart.js renderers
    style/                 dark theme + layout
  netlify.toml
  CHANGELOG.md  VERSION  LICENSE

Contributing

Issues and pull requests welcome. The project uses:

  • Semantic versioning (v0.17.1, etc.) with per-release git tags
  • Conventional commits (feat:, fix:, chore:, docs:, …)
  • Keep-a-Changelog style in CHANGELOG.md

For larger changes, opening an issue first to discuss is appreciated.

License

MIT — see LICENSE.

Attribution

Publication data from OpenAlex:

Priem, J., Piwowar, H., & Orr, R. (2022). OpenAlex: A fully-open index of scholarly works, authors, venues, institutions, and concepts. arXiv. arxiv.org/abs/2205.01833

Problematic-paper flags from The Problematic Paper Screener:

Cabanac, G., Labbé, C., & Magazinov, A. (2022). The 'Problematic Paper Screener' automatically selects suspect publications for post-publication (re)assessment. arXiv. arxiv.org/abs/2210.04895

Journal indexing status and discontinuation history from the Scopus Source List (Elsevier, CC BY 4.0).

About

Frontend SPA — choose journals wisely.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors