Public GitHub repository and GitHub Pages application for exploring DOAJ metadata for publishers, journals, and articles.
Live application URL:
https://ikhwan-arief.github.io/DOAJ_Metadata/
Repository URL:
https://github.com/ikhwan-arief/DOAJ_Metadata
Developed by Ikhwan Arief, ikhwan[at]unand.ac.id.
License: CC BY-SA 4.0
Disclaimer: This tool is not officially developed or maintained by DOAJ. Any results from this tool do not constitute an official DOAJ evaluation and must not be cited or represented as a DOAJ decision.
This project is a static web application that helps users explore metadata from the Directory of Open Access Journals (DOAJ).
It is an independent application and is not managed by DOAJ. DOAJ remains the sole authority for any inclusion or evaluation decision.
The application is designed for:
- searching journal titles,
- searching publisher names,
- searching article titles,
- opening KPI-first dashboards for publishers,
- opening KPI-first dashboards for journals,
- opening lighter interpretation-focused dashboards for articles.
- running a manual Inclusion Pre-check against DOAJ-facing website requirements and best practice guidance.
The project does not require a live backend server. It is designed to run entirely with:
- static files in
docs/, - browser calls to public DOAJ search endpoints,
- Python scripts for optional snapshot enrichment,
- GitHub Actions for automation,
- GitHub Pages for public hosting.
The public application is intended to be available at:
https://ikhwan-arief.github.io/DOAJ_Metadata/
If the page does not open yet, wait a few minutes after a push to main and check the latest Deploy GitHub Pages workflow run in the Actions tab.
- Live browser search against DOAJ public journal and article search endpoints.
- Grouped results for
Publishers,Journals, andArticles. - KPI-rich publisher dashboard with portfolio-level charts.
- KPI-rich journal dashboard with metadata and article-profile charts.
- Lightweight article dashboard with metadata, abstract summary, keywords, subjects, and author context.
- Manual Inclusion Pre-check with live Yes/No checklist scoring based on DOAJ guidance pages.
- Published static snapshots for selected entities.
- Optional DOAJ dump probing in GitHub Actions through repository secrets.
- Fully public repository and public static application deployment.
Primary live search endpoints:
https://doaj.org/api/search/journals/{query}https://doaj.org/api/search/articles/{query}
Optional authenticated sources for workflow-side enrichment only:
https://doaj.org/public-data-dump/journalhttps://doaj.org/public-data-dump/article
Important:
- the frontend never exposes private tokens,
- dump credentials are only intended for GitHub Actions secrets,
- the application still works without dump access.
The publisher dashboard is designed as a portfolio view.
It includes KPI cards such as:
- total journals,
- total related articles found,
- publisher countries represented,
- languages count,
- dominant license,
- APC share,
- preservation coverage,
- PID coverage,
- most recent update.
It includes chart groups such as:
- journals by country,
- journals by subject,
- related articles by journal,
- language distribution,
- license distribution,
- APC versus no APC,
- preservation service distribution,
- PID scheme distribution,
- journal/article recency timeline.
The journal dashboard is designed as a metadata profile plus article-pattern view.
It includes KPI cards such as:
- journal title and publisher,
- ISSN/EISSN presence,
- total related articles found,
- subject count,
- language set,
- license type,
- APC status,
- preservation status,
- PID status,
- review process,
- last updated.
It includes chart groups such as:
- articles by publication year,
- article subject distribution,
- article keyword and top-term view,
- article language distribution,
- author count distribution,
- top affiliations,
- status panel for license, APC, preservation, and PID,
- update recency timeline.
The article dashboard is intentionally lighter in version 1.
It shows:
- article title,
- journal context,
- publisher context,
- year,
- DOI when available,
- abstract,
- authors,
- affiliations,
- keyword emphasis,
- subject tags,
- affiliation summary.
docs/Static application files published to GitHub Pages.docs/index.htmlMain public application page.docs/app.jsClient-side application logic for live search, entity routing, and dashboard rendering.docs/styles.cssStyles for the public application.docs/data/Published static metadata and snapshot JSON.docs/data/meta.jsonSummary metadata about generated snapshot content.docs/data/snapshots/index.jsonPublished index of tracked snapshots.config/snapshot_targets.jsonTracked publishers, journals, or articles for snapshot generation.scripts/refresh_snapshots.pyPython script that builds static snapshot JSON files.scripts/validate_static_data.pyPython validator for published static JSON contracts.src/doaj_metadata_dashboard/Shared Python logic for DOAJ requests, normalization, summary generation, and snapshot assembly.tests/Unit tests for snapshot generation logic..github/workflows/GitHub Actions workflows for validation, snapshot refresh, and Pages deployment.
This section is written for users who are new to GitHub.
This repository is the main home for the project. It stores:
- the application source code,
- the public website files,
- the automation workflows,
- the documentation,
- the generated static snapshot data.
From the repository page on GitHub, you can:
- read the documentation in the
README, - open the public application from the website link,
- browse the source code,
- inspect the workflow runs in the
Actionstab, - download the repository as a ZIP file,
- clone the repository with Git,
- open issues or discussions later if you add them,
- fork the repository to build your own version.
The repository About section should contain:
- a short description of the project,
- the public application URL,
- relevant topics such as
doaj,metadata,dashboard,python, andgithub-pages.
For this repository, the public application URL should be:
https://ikhwan-arief.github.io/DOAJ_Metadata/
The default branch is main.
When changes are pushed to main, GitHub Actions can validate the project and deploy the static site.
The Actions tab is important because it shows:
- validation workflow runs,
- snapshot refresh workflow runs,
- deployment workflow runs.
If the public app does not update, the first place to check is the Actions tab.
The Code tab shows the actual files in the repository.
If you are new to GitHub, this is the tab where you can:
- browse files,
- read the README,
- copy file URLs,
- download the project.
If you only want to use the public application, you do not need Python. Just open:
https://ikhwan-arief.github.io/DOAJ_Metadata/
If you want to run the project locally, you need:
- Git, or the ability to download a ZIP from GitHub,
- Python 3.11 or newer,
- a terminal,
- a modern web browser,
- internet access, because live DOAJ search happens in the browser.
This section assumes the user is completely new to GitHub and Python projects.
Option A, clone with Git:
git clone https://github.com/ikhwan-arief/DOAJ_Metadata.git
cd DOAJ_MetadataOption B, download ZIP from GitHub:
- Open
https://github.com/ikhwan-arief/DOAJ_Metadata - Click the green
Codebutton - Choose
Download ZIP - Extract the ZIP file
- Open a terminal inside the extracted
DOAJ_Metadatafolder
Run:
python3 --versionYou should see Python 3.11 or newer.
If python3 is not found, install Python first from:
https://www.python.org/downloads/
This step is strongly recommended even for beginners.
On macOS or Linux:
python3 -m venv .venv
source .venv/bin/activateOn Windows PowerShell:
python -m venv .venv
.venv\Scripts\Activate.ps1After activation, your terminal usually shows (.venv) at the beginning.
Run:
python3 -m pip install --upgrade pip
python3 -m pip install -e .If you want the editable local development installation, the command above is enough for this project.
Run tests:
PYTHONPATH=src python3 -m unittest discover -s tests -p "test_*.py" -vValidate generated static contracts:
PYTHONPATH=src python3 scripts/validate_static_data.pyRefresh snapshots from tracked targets:
PYTHONPATH=src python3 scripts/refresh_snapshots.pyFrom the repository root, run:
python3 scripts/serve_local.pyOpen:
http://127.0.0.1:8000/
Important:
- do not open
docs/index.htmlby double-clicking it from the file manager, - always use a local web server,
- this local server intentionally disables directory browsing,
- the browser app expects relative JSON and JavaScript files to be served correctly.
Return to the terminal and press:
Ctrl+CThis is the easiest option for non-technical users.
- Open the public URL:
https://ikhwan-arief.github.io/DOAJ_Metadata/ - Type a journal title, publisher name, or article title into the search box.
- Click
Search live DOAJ. - Review grouped results for publishers, journals, and articles.
- Open the dashboard for the result you need.
- If available, open published tracked snapshots from the
Tracked Entitiessection.
- Search is live, so it depends on public DOAJ availability.
- Some dashboards may rely entirely on live API data.
- Some entities may also have precomputed snapshot enrichment.
- The application is static, so there is no user account, no login, and no server-side session.
This section is for maintainers or advanced users.
Workflow file:
/.github/workflows/validate-and-build.yml
Purpose:
- install Python,
- install the package,
- run unit tests,
- validate static JSON files.
It runs on:
- pushes to
main, - pull requests,
- manual dispatch.
Workflow file:
/.github/workflows/refresh-snapshots.yml
Purpose:
- read
config/snapshot_targets.json, - query DOAJ live endpoints,
- optionally probe authenticated DOAJ dump endpoints,
- build updated snapshot JSON,
- validate the generated outputs,
- commit and push
docs/data/**changes back tomain.
It runs on:
- a daily schedule,
- manual dispatch.
Workflow file:
/.github/workflows/deploy-pages.yml
Purpose:
- upload the
docs/folder as a Pages artifact, - deploy the public static site.
It runs on:
- pushes that affect
docs/**or workflow files, - manual dispatch,
- successful completion of the snapshot refresh workflow.
If you want the repository to publish precomputed dashboards for selected entities:
- Open
config/snapshot_targets.json - Add one or more targets to the
targetsarray - Commit and push the change
- Run
Refresh DOAJ snapshotsfrom the GitHubActionstab, or wait for the daily schedule
Example structure:
{
"version": 1,
"defaults": {
"journal_page_size": 50,
"journal_max_pages": 3,
"journal_max_articles": 250,
"publisher_page_size": 50,
"publisher_max_pages": 3,
"publisher_max_journals": 150,
"publisher_max_articles": 300,
"article_page_size": 25,
"article_max_pages": 2
},
"targets": [
{
"entity_type": "publisher",
"title": "Politeknik Pariwisata NHI Bandung",
"query": "Politeknik Pariwisata NHI Bandung"
},
{
"entity_type": "journal",
"title": "Jurnal Kepariwisataan",
"query": "Jurnal Kepariwisataan",
"match_title": "Jurnal Kepariwisataan"
},
{
"entity_type": "article",
"title": "Cultural Route Design for Heritage Tourism",
"query": "heritage tourism",
"match_title": "Cultural Route Design for Heritage Tourism"
}
]
}If you have a DOAJ premium API key, store it as:
DOAJ_API_KEY
How it is used in this project:
- only in GitHub Actions refresh jobs,
- only by Python server-side refresh scripts,
- only for DOAJ machine-to-machine requests,
- never in
docs/, browser JavaScript, or published GitHub Pages assets.
This means:
Main SearchandJournal Matchingstay public-browser features,- scheduled refresh workflows can use premium metadata access without exposing the key.
These secrets are optional. Do not configure them unless you actually have valid DOAJ dump access.
Supported secrets:
DOAJ_DUMP_TOKENDOAJ_DUMP_AUTH_HEADERDOAJ_DUMP_AUTH_SCHEMEDOAJ_DUMP_JOURNAL_URLDOAJ_DUMP_ARTICLE_URL
Important:
- these secrets are only used inside GitHub Actions,
- they must never be added to
docs/,config/, or client-side JavaScript, - the public site must remain safe even if dump access is not configured.
- Check whether GitHub Pages has finished deploying.
- Check the latest
Deploy GitHub Pagesworkflow run in theActionstab. - Confirm the repository homepage URL is correct.
- The app depends on live public DOAJ search endpoints.
- Temporary rate limits, network issues, or DOAJ-side issues may affect search.
- Reload the page and try again later.
Try:
python3 --versionIf it still fails, install Python from:
https://www.python.org/downloads/
Make sure you started a local web server from the repository root:
python3 scripts/serve_local.pyThen open:
http://127.0.0.1:8000/
Do not open the HTML file directly from the file system.
- Make sure
config/snapshot_targets.jsoncontains targets. - Check the
Refresh DOAJ snapshotsworkflow logs in GitHub Actions. - Confirm that DOAJ endpoints are reachable during the workflow run.
- This project is intentionally static-first.
- The browser performs live DOAJ search directly.
- Python is used for normalization, snapshot generation, and workflow-side enrichment.
- GitHub Actions is the execution environment for scheduled automation.
- GitHub Pages is the public hosting layer.
Useful local commands:
PYTHONPATH=src python3 -m unittest discover -s tests -p "test_*.py" -v
PYTHONPATH=src python3 scripts/validate_static_data.py
PYTHONPATH=src python3 scripts/refresh_snapshots.py
python3 scripts/serve_local.pyDeveloped by Ikhwan Arief, ikhwan[at]unand.ac.id.
If you reuse or adapt this project, please provide proper attribution and share derivative work under the same license terms.
This repository is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.
Human-readable summary:
https://creativecommons.org/licenses/by-sa/4.0/
Legal code:
https://creativecommons.org/licenses/by-sa/4.0/legalcode
See LICENSE for the repository license notice.