How I Built and Published an Academic Journal Website with OJS and Custom Features

Publishing research in an academic journal takes more than just peer review and editing — there’s a lot of behind-the-scenes infrastructure required to make it accessible, professional, and citable.
As the developer for the Nigerian Journal of Social Health, I recently helped take the journal from drafts and emails to a fully functioning publication platform, complete with article submissions, editorial workflows, and DOI readiness.
Here’s what that journey looked like — and what I learned as a developer working in the academic space.
Why I Took On This Project
I was brought in by the editorial team to help launch the journal’s online presence and streamline their publishing process. Initially, they were working entirely through email and Microsoft Word, which made managing submissions, revisions, and final uploads chaotic.
The goal:
Launch the first issue of the journal
Enable future submissions to be handled online
Prepare the site for DOI assignment and indexing
Tech Stack Overview
The core of the platform is built on Open Journal Systems (OJS) — a PHP-based, open-source journal management software. Here's the stack I worked with:
🛠 OJS (v3.4.0.8) – for article submission and editorial workflow
🎨 Custom HTML/CSS + Smarty Templates – to style the theme
🌐 cPanel / Shared Hosting – for deployment and setup
📄 PDF + Metadata handling – for publication-ready articles
🔧 Manual config + MySQL tweaks – to tune the system performance
Getting Started with OJS
OJS is a powerful tool but has a steep learning curve. It’s not your typical CMS — it comes with baked-in roles like Author, Reviewer, Section Editor, and Journal Manager, and each has its own flow.
I had to:
Configure submission guidelines and journal sections
Set up user roles and access levels
Handle custom metadata fields for future DOI registration
It’s a solid system, but required careful setup to avoid confusing the editors (and authors).
Customizing the Platform
This is where most of my time went.
Key customizations:
Custom theme overrides using OJS’s Smarty templating engine
Adjusting article layout and homepage structure
Simplifying the submission UI for less technical users
Embedding external resources and customizing footers to match the journal’s branding
Ensuring the site was mobile responsive (surprisingly not standard in many OJS themes)
Publishing the First Issue
After months of setting things up, testing the submission/review workflow, and working closely with the editorial board, we launched Volume 2, Issue 1, containing 8 peer-reviewed articles.
Each article had:
A dedicated article page
Metadata for indexing
Downloadable PDF
Ready-to-be-assigned DOI metadata
You can check it out here: https://njsh.org.ng
Lessons Learned
OJS is powerful, but opinionated. Understanding its workflow is key before diving in.
Most academic teams aren’t technical. UI/UX decisions need to be extremely simple and clear.
Deployment matters. Hosting PHP apps like OJS often requires manual config and isn’t as smooth as modern Node/React setups.
Documentation is limited. Most of my fixes came from forums, trial and error, and digging through old GitHub threads.
What’s Next
Now that the first issue is live, we're:
Preparing for DOI assignment through Crossref
Working on SEO and indexing in scholarly databases
Automating parts of the editorial process (email reminders, deadlines)
Possibly integrating ORCID logins in the future
Closing Thoughts
This project was a shift from the usual startup-style dev work I do — and that’s what made it worth it. Building tools that support research, education, and open access is a whole different kind of impact.
If you’re a developer looking to contribute to academic publishing or working with NGOs, OJS and platforms like it are worth learning.
And if you're a journal team looking for help going digital, I’d be happy to chat.
Subscribe to my newsletter
Read articles from John Moyinoluwa directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
