https://github.com/juansesdev/waitlist-mailer
A tool to manage waitlists and send confirmation emails.
https://github.com/juansesdev/waitlist-mailer
github nodejs npm-package open-source
Last synced: 4 months ago
JSON representation
A tool to manage waitlists and send confirmation emails.
- Host: GitHub
- URL: https://github.com/juansesdev/waitlist-mailer
- Owner: JuansesDev
- License: mit
- Created: 2025-02-12T23:37:05.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-06T00:47:09.000Z (over 1 year ago)
- Last Synced: 2025-04-09T21:10:32.772Z (about 1 year ago)
- Topics: github, nodejs, npm-package, open-source
- Language: TypeScript
- Homepage:
- Size: 18.8 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# WaitlistMailer v2.1.0
A **modern, modular, and lightweight** TypeScript library for managing email waitlists with **zero required dependencies** for basic usage. Built with clean architecture principles: **dependency injection**, **adapter pattern**, and **event-driven design**.
### ✨ Key Features
- ✅ **Modular Adapters**: Pluggable storage and mail providers
- ✅ **Zero Bloat**: No forced dependencies unless you use them
- ✅ **Dependency Injection**: Clean, testable architecture
- ✅ **TypeScript-First**: Full type safety with generic support
- ✅ **Event-Driven**: Rich event system for integrations
- ✅ **Production-Ready**: 44+ tests, comprehensive coverage
- ✅ **Smart Defaults**: Works out of the box with in-memory storage
- ✅ **Scalable**: Database-level search & streaming for large datasets (NEW in v2.1)
## 📦 Installation
```
npm install waitlist-mailer
```
### For Database Support
Choose the storage adapter you need:
```
# For MongoDB
npm install mongoose
# For PostgreSQL
npm install sequelize pg
# For MySQL
npm install sequelize mysql2
# For SQLite
npm install sequelize better-sqlite3
```
## 🚀 Quick Start
### Minimal Setup (Default)
By default, `WaitlistManager` uses in-memory storage, perfect for rapid prototyping.
```
import { WaitlistManager } from 'waitlist-mailer';
// Defaults to MemoryStorage automatically
const manager = new WaitlistManager({
companyName: 'My App'
});
// Add someone to the waitlist
const result = await manager.join('user@example.com', {
name: 'John Doe',
source: 'Twitter'
});
console.log(result);
// Output: { success: true, message: 'Successfully joined...', email: 'user@example.com' }
```
### With Email Sending
To send emails, simply provide a mailer adapter.
```
import { WaitlistManager, NodemailerProvider } from 'waitlist-mailer';
const manager = new WaitlistManager({
// Storage defaults to MemoryStorage if not provided
mailer: new NodemailerProvider({
host: 'smtp.gmail.com',
port: 587,
user: 'your-email@gmail.com',
pass: 'your-app-password'
}),
companyName: 'My Startup'
});
// When users join, they'll automatically receive a confirmation email
await manager.join('alice@example.com');
```
### With MongoDB
For persistent storage, inject the Mongoose adapter.
```
import { WaitlistManager, MongooseStorage } from 'waitlist-mailer';
import mongoose from 'mongoose';
// Connect to MongoDB
await mongoose.connect('mongodb://localhost:27017/waitlist');
// Define schema
const schema = new mongoose.Schema({
email: { type: String, required: true, unique: true },
metadata: { type: mongoose.Schema.Types.Mixed },
createdAt: { type: Date, default: Date.now }
});
const WaitlistModel = mongoose.model('Waitlist', schema);
// Initialize manager
const manager = new WaitlistManager({
storage: new MongooseStorage({ model: WaitlistModel }),
companyName: 'My App'
});
```
## 📖 Documentation
**→** [**Complete Documentation Map**](./DOCS.md) Quick Links:
- [**API Reference**](./API.md) — Complete method documentation, event system, and type definitions
- [**Customization Guide**](./CUSTOMIZATION.md) — Email templates, custom adapters, and advanced examples
- [**Practical Examples**](./EXAMPLES.md) — Real-world scenarios: MVP setup, production patterns, campaigns
- [**Architecture**](./ARCHITECTURE.md) — Design patterns and extensibility
- [**Migration Guide**](./MIGRATION.md) — Upgrading from v1.x to v2.0
## 📄 License
MIT License - see [LICENSE](./LICENSE) file for details.
## 🤝 Contributing
Contributions are welcome! Please open an issue or pull request on [GitHub](https://github.com/JuansesDev/waitlist-mailer).
## 📞 Support
- **Issues**: [GitHub Issues](https://github.com/JuansesDev/waitlist-mailer/issues)
- **Documentation**: See [DOCS.md](./DOCS.md) for complete reference
- **NPM**: [waitlist-mailer](https://www.npmjs.com/package/waitlist-mailer)
**Made with ❤️ by** [**JuansesDev**](https://github.com/JuansesDev)