A modern full-stack e-signature platform that enables users to upload PDF documents, invite signers, collect signatures, track document progress, maintain audit trails, and generate downloadable signed PDFs.
Frontend: https://signetly.vercel.app
The frontend requires a running Signetly backend. Set
VITE_API_URLto that deployment's/apiURL before building.
https://drive.google.com/file/d/1_etSmZYtuEhXMvWOdqZMzhgWJrSZKWnP/view?usp=drivesdk
- User Registration & Login
- JWT Authentication
- Protected Routes
- Secure Password Hashing
- Document Ownership Validation
- Upload PDF Documents
- Dashboard-Based Document Tracking
- View Uploaded Documents
- Delete Documents
- Track Document Status
- Typed Signatures
- Drawn Signatures
- Drag-and-Drop Signature Placement
- Signature Position Persistence
- Edit Existing Signatures
- Delete Signatures
- Invite External Signers
- Secure Tokenized Signing Links
- Public Signing Workflow
- Signer Status Tracking
- Document Rejection Workflow
- Rejection Reason Tracking
Every important action is recorded:
- Document Uploads
- Signer Invitations
- Signature Placement
- Signature Updates
- Signature Deletion
- Document Signing
- Document Rejection
- Timestamp Tracking
- IP Address Tracking
- Pending
- Partially Signed
- Signed
- Rejected
- Pending
- Signed
Powered by PDF-Lib:
- Embed Signatures
- Generate Signed PDFs
- Preserve Original Documents
- Export Downloadable Signed Versions
Frontend (React + TypeScript)
β
REST API (Node.js + Express)
β
MongoDB Atlas
β
PDF Processing Layer (PDF-Lib)
β
Signed PDF Generation
- React
- TypeScript
- Vite
- Tailwind CSS
- React Router
- Axios
- React Hot Toast
- Node.js
- Express.js
- JWT Authentication
- Multer
- PDF-Lib
- MongoDB Atlas
- Mongoose
- Frontend: Vercel
- Backend: Railway
- Database: MongoDB Atlas
Signetly is split across two repositories:
- Frontend (this repository): React + Vite
- Backend: Keerti707/Signetly-backend
- Node.js 20 or newer
- npm
- MongoDB (local or Atlas)
git clone https://github.com/Keerti707/Signetly-backend.git
cd Signetly-backend
npm installCreate Signetly-backend/.env:
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=replace_with_a_long_random_secret
PORT=5000
FRONTEND_URL=http://localhost:5173
BACKEND_URL=http://localhost:5000Then start the API:
npm run devVerify it at http://localhost:5000. The response should say that the Signetly backend is running.
git clone https://github.com/Keerti707/Signetly.git
cd Signetly
npm install
cp .env.example .env.local
npm run devOpen the local URL printed by Vite. The example configuration connects to http://localhost:5000/api.
| Repository | Variable | Required | Description |
|---|---|---|---|
| Frontend | VITE_API_URL |
Production | Public backend base URL, including /api |
| Backend | MONGO_URI |
Yes | MongoDB connection string |
| Backend | JWT_SECRET |
Yes | Secret used to sign and verify JWTs |
| Backend | PORT |
No | API port; defaults to 5000 |
| Backend | FRONTEND_URL |
Production | Public frontend URL used to generate signer links |
| Backend | BACKEND_URL |
Production | Public backend origin used to generate uploaded-file URLs |
VITE_API_URL is bundled into client-side JavaScript and is therefore public. Never put secrets in a VITE_ variable.
- Deploy the backend and configure
MONGO_URI,JWT_SECRET,FRONTEND_URL, andBACKEND_URLin Railway. - Confirm the backend root URL returns a successful JSON response.
- In Vercel, set
VITE_API_URLfor Production, Preview, and Development tohttps://<your-backend-domain>/api. - Redeploy the frontend after changing
VITE_API_URL; Vite reads it at build time.
Application not found: the Railway service URL no longer points to an active deployment. Redeploy the backend and updateVITE_API_URLin Vercel.The API is not configured: create.env.locallocally or addVITE_API_URLin Vercel, then restart/redeploy.The server is unavailable: check the backend health URL, Railway logs, MongoDB access rules, and the value ofVITE_API_URL.Invalid or expired token: sign in again; the frontend clears expired sessions automatically.
Signetly (this repository)
βββ public
βββ screenshots
βββ src
βββ assets
βββ components
βββ pages
βββ services
Signetly-backend (separate repository)
βββ controllers
βββ middleware
βββ models
βββ routes
βββ uploads
- Register/Login
- Upload PDF
- Add Signature
- Invite Signers
- Share Signing Link
- Track Signing Progress
- Download Signed PDF
- Open Signing Link
- Verify Email
- Sign Document
- Submit Signature
- Full-Stack Development
- SaaS Product Design
- REST API Development
- JWT Authentication
- MongoDB Data Modeling
- PDF Processing
- Audit Logging
- Secure File Handling
- Document Lifecycle Management
- Responsive UI Design
- Cloud Deployment
- Email Delivery Integration
- Cloud Storage (AWS S3)
- OTP Verification
- Multi-Page Signing
- Real-Time Notifications
- Role-Based Permissions
- Signature Certificates
- Team Workspaces
Keerti Gupta
Built as a portfolio-grade SaaS application demonstrating secure document lifecycle management, digital signatures, audit logging, collaborative workflows, and PDF generation.





