An open API service indexing awesome lists of open source software.

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.

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)