I am a final-year student preparing to publish my research. Drafting a paper and then reshaping it to satisfy different publication formats easily eats up one to two hours every time—a painful loop of copy-paste, template tweaking, and manual LaTeX fixes. ScholarFlow is the solution I wanted for myself: a workspace where I can polish the draft once and jump between formats with a single click while still retaining the flexibility to edit the LaTeX when needed.
ScholarFlow is a full-stack platform that helps researchers draft, manage, and export academic papers. It offers guided paper creation, LaTeX previews, and one-click PDF exports in IEEE format, Springer. Backed by secure authentication and email-based verification.
🎥 Watch ScholarFlow on YouTube: https://youtu.be/QI8zSLf_HtQ
- User registration with OTP verification, secure login, and profile management.
- Guided paper editor with sections for introduction, literature review, methodology, and conclusions.
- Instant LaTeX preview and downloadable IEEE-formatted PDF exports compiled via
pdflatex. - Email notifications for account verification and password resets.
- Role-based API protection using JWT-authenticated routes.
| Layer | Technology |
|---|---|
| Frontend | React 18, React Router, Axios |
| Backend | Node.js, Express, MongoDB (Mongoose) |
| Auth & Mail | JSON Web Tokens, Nodemailer (Gmail SMTP) |
| LaTeX Tool | Python 3 helper around pdflatex |
backend/ Express API, business logic, and LaTeX compilation service
frontend/ React single-page application
latex/ Python CLI wrapper invoked by the backend (pdflatex helper)
- Node.js 18+ and npm
- MongoDB Atlas connection string (or local MongoDB instance)
- Gmail SMTP credentials (or alternative SMTP credentials wired into
config/emailConfig.js) - Python 3.9+ with
pdflatexavailable on the systemPATH(e.g., MiKTeX, TeX Live) - Windows users: ensure
pyorpythonlaunches the desired interpreter; optionally setLATEX_PYTHON.
Create the following .env files.
PORT=5000
NODE_ENV=development
MONGODB_URI=mongodb+srv://<user>:<password>@<cluster>/<database>?retryWrites=true&w=majority
JWT_SECRET=replace-with-strong-secret
JWT_EXPIRE=30d
FRONTEND_URL=http://localhost:3000
GMAIL_USER=your.account@gmail.com
GMAIL_PASS=app-specific-password
LATEX_PYTHON=py
LATEX_PYTHONis optional. Set it whenpythonon the PATH is not the interpreter you want to use.
REACT_APP_API_URL=http://localhost:5000/api
Restart the corresponding server whenever you update .env values.
cd backend
npm install
cd ..\frontend
npm install-
Backend:
cd backend npm run dev
The API listens on
http://localhost:5000and exposes routes under/api(e.g.,/api/auth/login). -
Frontend:
cd frontend npm start
The React app is served at
http://localhost:3000.
The backend invokes latex/app.py to compile generated LaTeX into PDFs. Confirm the following:
pdflatexis installed and reachable from the command line.- Python can execute
latex/app.py. If you have multiple interpreters, setLATEX_PYTHONinbackend/.env. - The first IEEE PDF download may take a few seconds while dependencies warm up; a spinner is shown in the UI.
| Command | Location | Description |
|---|---|---|
npm run dev |
backend/ |
Start API with Nodemon. |
npm start |
frontend/ |
Launch React development server. |
npm run build |
frontend/ |
Produce production build under build/. |
node latex/app.py --tex <file.tex> --out <output-dir> --cleanup |
repo root | Manually compile a LaTeX document for testing. |
POST /api/auth/register– Begin account registration (sends OTP email).POST /api/auth/verify-otp– Complete registration using the OTP.POST /api/auth/login– Obtain JWT.GET /api/papers– List authenticated user's papers.GET /api/latex/preview/ieee/:paperId– Return IEEE LaTeX content.GET /api/latex/ieee/pdf/:paperId– Download a compiled IEEE PDF.
All protected routes require the Authorization: Bearer <token> header.
Every PDF export writes temporary files into the OS temp directory and removes them after the download completes. Residual artifacts (e.g., .pdf, .log, .aux) inside the latex/ folder are also cleaned automatically per request.
Gmail requires either an application-specific password or OAuth2. Ensure "Less secure app access" is enabled for testing or configure emailConfig.js to use your SMTP provider. Consider using services like Mailtrap during development.
pdflatex failedor missing executable: Verify that LaTeX is installed and the executable is on the PATH used by the Node.js process.- Email delivery fails: Double-check
GMAIL_USER/GMAIL_PASSand allow the account to send SMTP messages. - MongoDB connection errors: Ensure your IP is whitelisted in Atlas or that a local MongoDB instance is running.
- CORS issues: Update
FRONTEND_URLinbackend/.envto match the origin hosting the React app.
- Fork the repository.
- Create a branch:
git checkout -b feature/awesome - Commit changes following conventional commit messages.
- Push and open a pull request.