Rejoul is a full-stack scientific publishing platform built entirely on the Internet Computer. This project is designed to revolutionize the academic world by introducing transparency, immutability, and incentives powered by blockchain technology.
The platform automates the entire publication lifecycle, from an author's initial submission and automated peer-review matching, to on-chain rewards and permanent, decentralized publication.
Rejoul implements a complete, autonomous workflow with the following features:
- Decentralized Authentication: Full integration with Internet Identity for secure and anonymous user management.
- Permanent File Storage: Journal files are uploaded and permanently stored on IPFS (InterPlanetary File System) via the Pinata service.
- On-Chain User Profiles: Users can register profiles as authors or reviewers, complete with their name and field of expertise.
- Article Submission Workflow: Authors can submit articles with essential metadata, including a title and keywords for matchmaking.
- Automated Reviewer Assignment: A smart contract scoring algorithm automatically assigns the most relevant reviewers based on a combination of matching expertise and current workload.
- On-Chain Peer Review System: Assigned reviewers can submit their decisions (
Accept,Reject,Revise) along with comments. All reviews are recorded transparently. - Automated Decision & Publication: The system automatically finalizes an article's status to
AcceptedorRejectedbased on the collected peer reviews and allows the author to publish accepted articles. - Reputation & Notification System: Reviewers earn reputation points for each completed review, and all users receive on-chain notifications for important events.
- Personalized Dashboards: Separate dashboard views for Authors (to track their submissions) and Reviewers (to manage their review queue).
- Professional Multi-Page Architecture: The frontend is built with React and features a modern multi-page structure using
react-router-domand centralized state management withReact Context.
This project is built using a modern Web3 stack on the Internet Computer ecosystem.
| Category | Technology | Description |
|---|---|---|
| Blockchain | Internet Computer (ICP) | The primary platform for hosting smart contracts (canisters) and web assets. |
| Backend | Motoko | A robust and type-safe programming language designed specifically for ICP. |
| Tooling | dfx, mops |
The DFX SDK for development and Mops for Motoko package management. |
| Frontend | React.js, Vite | A modern UI library with a high-performance build tool. |
| Styling | Tailwind CSS | A utility-first CSS framework for rapid and responsive design. |
| Routing | react-router-dom |
The standard library for multi-page navigation in React. |
| Authentication | Internet Identity | DFINITY's secure and decentralized login system. |
| File Storage | IPFS & Pinata | A distributed file system for permanent content storage and pinning. |
Follow these steps to get the project running on your local development environment.
Ensure you have the following installed:
-
Clone the Repository
git clone https://github.com/feril23/Jurnal-DApp.git cd Jurnal-DApp -
Install Dependencies This project uses
npm workspaces. Install all dependencies from the root directory.npm install
-
Configure Environment Variables (API Keys) The IPFS file upload functionality requires an API Key from Pinata.
- Create a free account at pinata.cloud.
- Create a new API Key.
- Create a new file named
.env.localinside the frontend directory:src/jurnal_final_frontend/. - Fill the file with your keys:
VITE_PINATA_API_KEY=YOUR_PINATA_KEY_HERE VITE_PINATA_SECRET_API_KEY=YOUR_PINATA_SECRET_HERE
-
Run the Local Replica and Deploy
- Open a new terminal window, navigate to the project root, and start the local network:
dfx start --background --clean
- In your original terminal, deploy the canisters:
dfx deploy
- Open a new terminal window, navigate to the project root, and start the local network:
-
Access the Application After deployment, the terminal will output the URL for your frontend canister. Copy this URL and open it in your browser. It will look something like this:
http://127.0.0.1:4943/?canisterId=...Important: You must use the canister URL provided by
dfx(notlocalhost:3000) for the Internet Identity integration to function correctly.