🔄 PayLoop
Smart Subscription Management & Automated Reminder System
Never miss a subscription renewal again with intelligent automated reminders
✨ What is PayLoop?
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.
🎯 Core Value Proposition
- 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
🚀 Key Features
🔐 Security & Authentication
📊 Smart Management
|
🔔 Intelligent Reminders
💳 Payment Integration
|
🛠️ Tech Stack
| Backend | Database | Security | Workflow | Tools |
|---|---|---|---|---|
| Node.js + Express | MongoDB + Mongoose | Arcjet + JWT | Upstash Workflow | Day.js + Nodemailer |
⚡ Quick Start
Prerequisites
Node.js v16+ | MongoDB | Upstash Account | Arcjet Account
1️⃣ Clone & Install
git clone https://github.com/Yaser-123/PayLoop.git
cd PayLoop
npm install
2️⃣ Environment Configuration
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
3️⃣ Launch Application
# Development Mode
npm run dev
# Production Mode
npm start
📚 API Documentation
🔐 Authentication Endpoints
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"
}
📋 Subscription Management
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>
🏗️ Project Architecture
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
🔄 Intelligent Workflow System
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
Workflow Timeline Example
� 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
🔒 Enterprise Security
Authentication Layer
|
Protection Layer (Arcjet)
|
🚀 Deployment Guide
Production Environment Setup
-
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
�💻 About the Developer
🤝 Contributing
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
� License
This project is licensed under the MIT License - see the LICENSE file for details.
� PayLoop - Smart Subscription Management
Built with ❤️ by Mohamed Yaser
⭐ Star this repo if you find it helpful!