A comprehensive platform for academic publishing that connects authors, reviewers, and editors in a streamlined digital workflow. This system supports the entire lifecycle of academic publishing from journal creation to article submission, peer review, and publication.
The Academic Journal Submission System consists of two main components:
- Client Application: A React-based web interface for users to interact with the system
- Server API: A Node.js/Express backend that handles data processing and business logic
This full-stack application is designed to modernize and streamline academic publishing workflows.
- Role-based access control (Admin, Editor, Author, Reviewer)
- User authentication and authorization
- Profile management for all stakeholders
- Create and manage academic journals with detailed metadata
- Categorize journals by field and relevant tags
- Assign editors to journals
- Track journal metrics (impact factor, review times, etc.)
- Define submission guidelines for authors
- Submit articles with title, abstract, and full manuscript
- Upload supporting documents (cover letters, supplementary files)
- Track submission status
- Collaborative authorship management
- Assign reviewers to articles
- Structured peer review workflow
- Manage the review process
- Track review metrics and timeline
- Advanced filtering and search capabilities for journals
- Tag-based journal categorization
- Journal pinning/bookmarking for quick access
- Automated email notifications for key events
- Editor assignment notifications
- Review request and submission confirmations
- Light and dark mode themes
- Responsive design for mobile and desktop views
- React (v19) with Vite
- React Router (v7)
- SCSS for styling
- React Icons
- Axios for API requests
- React Toastify for notifications
- CryptoJS for secure data handling
- Node.js with Express
- MongoDB with Mongoose ODM
- JWT for authentication
- Multer for file handling
- Nodemailer for email functionality
- Zod for input validation
- Winston for logging
- Helmet, Express Rate Limit, and CORS for security
journal_project/
├── client/ # Frontend React application
│ ├── public/ # Static assets
│ └── src/ # Source code
│ ├── assets/ # Images, styles, and other static resources
│ ├── components/# Reusable UI components
│ ├── config/ # Configuration files
│ ├── contexts/ # React context providers
│ ├── hooks/ # Custom React hooks
│ ├── pages/ # Page components
│ ├── services/ # API services
│ └── utils/ # Utility functions
│
├── server/ # Backend Node.js/Express API
│ ├── config/ # Configuration files
│ ├── controllers/ # Request controllers
│ ├── keys/ # JWT keys
│ ├── middleware/ # Express middleware
│ ├── models/ # Mongoose models
│ ├── public/ # Static files (uploads)
│ ├── routes/ # API routes
│ ├── utils/ # Utility functions
│ └── validators/ # Input validation
│
└── README.md # This file
- Node.js (v14 or higher)
- MongoDB (local or cloud-based)
- npm or yarn
git clone https://github.com/your-username/journal_project.git
cd journal_project
cd server
npm install
# Create .env file with your configuration
# Generate JWT keys
mkdir -p keys
openssl genrsa -out keys/private.key 2048
openssl rsa -in keys/private.key -pubout -out keys/public.key
# Start the server
npm run dev
Example .env
file for server:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/journal_db
JWT_PRIVATE_KEY_PATH=./keys/private.key
JWT_PUBLIC_KEY_PATH=./keys/public.key
JWT_EXPIRY=30d
NODE_ENV=development
EMAIL_SERVICE=smtp.yourservice.com
EMAIL_USER=your-email@example.com
EMAIL_PASS=your-email-password
CLIENT_URL=http://localhost:3000
cd ../client
npm install
npm run dev
The client application will be available at http://localhost:5173
POST /api/auth/register
- Register a new userPOST /api/auth/login
- User loginPOST /api/auth/logout
- User logoutPOST /api/auth/refresh-token
- Refresh JWT token
GET /api/journal
- Get list of journalsGET /api/journal/:journalId
- Get journal detailsPOST /api/journal
- Create a new journalPUT /api/journal/:journalId
- Update journal detailsDELETE /api/journal/:journalId
- Delete a journalGET /api/journal/categories
- Get list of journal categoriesGET /api/journal/tags
- Get list of journal tagsPOST /api/journal/editor
- Add an editor to a journalDELETE /api/journal/:journalId/editor
- Remove editor from a journal
POST /api/article
- Submit a new articleGET /api/article
- Get list of articlesGET /api/article/:articleId
- Get article detailsPUT /api/article/:articleId
- Update article detailsDELETE /api/article/:articleId
- Delete an article
POST /api/reviewer
- Add a new reviewerGET /api/reviewer
- Get list of reviewersGET /api/reviewer/:reviewerId
- Get reviewer detailsPUT /api/reviewer/:reviewerId
- Update reviewer detailsDELETE /api/reviewer/:reviewerId
- Delete a reviewer
The API uses a centralized error handling mechanism with custom ApiError class and middleware. This ensures consistent error responses across the application with appropriate HTTP status codes.
- Helmet for setting various HTTP headers
- Rate limiting to prevent brute force attacks
- JWT-based authentication
- Secure password storage with bcrypt
- Input validation with Zod
- CORS configuration
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License
Developed as a comprehensive solution for academic publishing workflows.