Never miss a subscription renewal again with intelligent automated reminders
PayLoop is a comprehensive subscription management ecosystem that transforms how you track and manage recurring payments. Built with enterprise-grade security and intelligent automation, it delivers personalized renewal reminders through sophisticated workflow orchestration.
- Zero Missed Renewals: Advanced 4-tier reminder system (7→5→2→1 days)
- Enterprise Security: Multi-layered protection with Arcjet integration
- Intelligent Workflows: Upstash-powered automation that adapts to your schedule
- Universal Compatibility: Support for all major payment methods and currencies
|
|
Backend | Database | Security | Workflow | Tools |
---|---|---|---|---|
Node.js + Express | MongoDB + Mongoose | Arcjet + JWT | Upstash Workflow | Day.js + Nodemailer |
Node.js v16+ | MongoDB | Upstash Account | Arcjet Account
git clone https://github.com/Yaser-123/PayLoop.git
cd PayLoop
npm install
Create .env.development.local
:
# Server Configuration
PORT=5500
SERVER_URL=http://localhost:5500
NODE_ENV=development
# Database
DB_URI=your_mongodb_connection_string
# Authentication
JWT_SECRET=your_super_secure_jwt_secret
JWT_EXPIRES_IN=1d
# Security (Arcjet)
ARCJET_KEY=your_arcjet_key
ARCJET_ENV=development
# Workflow Engine (Upstash)
QSTASH_URL=http://127.0.0.1:8080
QSTASH_TOKEN=your_qstash_token
# Email Service
EMAIL_PASSWORD=your_gmail_app_password
# Development Mode
npm run dev
# Production Mode
npm start
POST /api/v1/auth/sign-up
- Register New User
POST /api/v1/auth/sign-up
Content-Type: application/json
{
"name": "Mohamed Yaser",
"email": "[email protected]",
"password": "securePassword123"
}
Response:
{
"success": true,
"message": "User created successfully!",
"data": {
"userId": "64a7f8b2c1d2e3f4a5b6c7d8",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
POST /api/v1/auth/sign-in
- User Login
POST /api/v1/auth/sign-in
Content-Type: application/json
{
"email": "[email protected]",
"password": "securePassword123"
}
POST /api/v1/subscriptions
- Create Subscription
POST /api/v1/subscriptions
Authorization: Bearer <your_jwt_token>
Content-Type: application/json
{
"name": "Netflix Premium",
"price": 15.99,
"currency": "USD",
"frequency": "monthly",
"category": "premium",
"startDate": "2025-01-15T00:00:00.000Z",
"paymentMethod": "credit_card"
}
Supported Values:
- Categories:
basic
,premium
,enterprise
- Payment Methods:
credit_card
,paypal
,bank_transfer
- Frequencies:
daily
,weekly
,monthly
,yearly
- Currencies:
USD
,EUR
,GBP
,INR
GET /api/v1/subscriptions/user/:userId
- Get User Subscriptions
GET /api/v1/subscriptions/user/64a7f8b2c1d2e3f4a5b6c7d8
Authorization: Bearer <your_jwt_token>
PayLoop/
├── 🚀 app.js # Application entry point
├── ⚙️ config/
│ ├── arcjet.js # Security configuration
│ ├── env.js # Environment management
│ ├── nodemailer.js # Email service setup
│ └── upstash.js # Workflow client
├── 🎮 controllers/
│ ├── auth.controller.js # Authentication logic
│ ├── subscription.controller.js # Subscription operations
│ ├── user.controller.js # User management
│ └── workflow.controller.js # Automated workflows
├── 🗃️ database/
│ └── mongodb.js # Database connection
├── 🛡️ middlewares/
│ ├── arcjet.middleware.js # Security layer
│ ├── auth.middleware.js # JWT verification
│ └── error.middleware.js # Error handling
├── 📊 models/
│ ├── subscription.model.js # Subscription schema
│ └── user.model.js # User schema
├── 🛣️ routes/
│ ├── auth.routes.js # Authentication routes
│ ├── subscription.routes.js # Subscription routes
│ ├── user.routes.js # User routes
│ └── workflow.routes.js # Workflow routes
└── 🔧 utils/
├── email-template.js # Email templates
└── send-email.js # Email utilities
PayLoop's workflow engine automatically:
- 🎯 Workflow Creation: Triggers when new subscription is added
- 📅 Smart Scheduling: Calculates optimal reminder timing
- 🔔 Multi-Tier Alerts: 7→5→2→1 day reminder sequence
- ⚡ State Management: Handles active/inactive/pending states
- 🛑 Auto-Cleanup: Stops workflows for expired subscriptions
� Subscription Created → 🔄 Workflow Initiated
⏰ 7 Days Before → 📧 First Reminder
⏰ 5 Days Before → 📧 Second Reminder
⏰ 2 Days Before → 📧 Third Reminder
⏰ 1 Day Before → 📧 Final Reminder
💳 Renewal Date → 🔄 Workflow Complete
|
|
-
Environment Configuration
# Create production environment file touch .env.production.local # Set production variables NODE_ENV=production DB_URI=your_production_mongodb_uri
-
Platform Deployment (Render/Heroku/Vercel)
# Build command npm install # Start command npm start
-
Environment Variables (Set in your hosting platform)
DB_URI
- Production MongoDB connectionJWT_SECRET
- Production JWT secretARCJET_KEY
- Production Arcjet keyQSTASH_TOKEN
- Production Upstash token
We welcome contributions! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Commit your changes:
git commit -m 'Add amazing feature'
- Push to branch:
git push origin feature/amazing-feature
- Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.