SIGNify is a secure and elegant PDF document signing app built using the MERN stack (MongoDB, Express, React, Node.js). Users can register, upload documents, drag-and-drop signatures, preview signed PDFs, and download them.
- Frontend (Vercel): https://pdf-signature-app-pi.vercel.app/
- Backend (Render): https://signify-server-1clw.onrender.com
| Layer | Technology |
|---|---|
| Frontend | React, Tailwind CSS, Vite |
| Backend | Node.js, Express |
| Database | MongoDB (Mongoose ORM) |
| PDF Tools | pdf-lib, pdfjs-dist |
| Auth | JWT, bcrypt, Nodemailer |
| Deployment | Vercel (Frontend), Render (Backend) |
✅ Register & Login
✅ Email verification
✅ Forgot & reset password via email
✅ Upload PDF documents
✅ Type signatures with custom fonts & colors
✅ Drag-and-drop signature onto PDF
✅ Preview and download signed PDF
✅ View and delete uploaded documents
✅ Mobile-friendly responsive design
✅ Protected routes using JWT
├── client
│ ├── public
│ ├── src
│ │ ├── components
│ │ ├── pages
│ │ ├── App.jsx
│ │ ├── main.jsx
│ │ └── ...
├── server
│ ├── controllers
│ ├── models
│ ├── routes
│ ├── uploads
│ └── index.js
🔧 Prerequisites Node.js & npm
MongoDB
(Optional) Vite globally installed
git clone https://github.com/yourusername/signify-pdf-signer.git
cd signify-pdf-signer
cd server
npm install
touch .env # Add environment variables here
npm run dev # Runs on http://localhost:5000
cd client
npm install
touch .env # Add VITE_SERVER_URL
npm run dev # Runs on http://localhost:5173
✅ Register a new account (check email for verification)
✅ Upload a PDF
✅ Type and drag your signature
✅ Preview and download the signed PDF
✅ Delete any uploaded document
Push /client folder to GitHub
Connect to Vercel and import project
Set VITE_SERVER_URL in Vercel Environment Variables
Push /server folder to GitHub
Create a new Web Service on Render
Add Environment Variables (PORT, MONGO_URI, JWT_SECRET, etc.)
Manually create an uploads folder in the root directory
VITE_SERVER_URL=https://your-server-xxxxx.onrender.comMONGO_URI=your_mongo_connection_string
JWT_SECRET=your_jwt_secret
VITE_CLIENT_URL=https://your-client-url.vercel.app
EMAIL_USER=your_email@example.com
EMAIL_PASS=your_email_password_or_app_keyReach out at: pallaviiik11.11@gmail.com



