npm package: @rivtor/notify
Description: Production-ready unified notification system for B2B SaaS
Author: Rivtor
Latest version: 1.0.1

# @rivtor/notify

[![npm version](https://badge.fury.io/js/%40rivtor%2Fnotify.svg)](https://www.npmjs.com/package/@rivtor/notify)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Production-ready unified notification system for B2B SaaS.

## Overview

`@rivtor/notify` is the "Pulse" module that unifies Email, In-App, and Push notifications into a single API. Stop juggling SendGrid, Courier, and database notifications—just call `notify.send()`.

**Key Features:**
- 📧 **Multi-Channel** - Email, in-app, and push notifications
- 🔔 **Pre-built Inbox** - Drop-in notification bell component
- 📬 **Template System** - Reusable notification templates
- ⚡ **Real-Time** - Supabase real-time for instant notifications
- 🎨 **Customizable** - Full control over templates and styling

## Installation

```bash
npm install @rivtor/notify
```

## Quick Start

### Server-Side

```typescript
import { notify } from '@rivtor/notify';

// Send multi-channel notification
export async function POST(request: Request) {
  await notify.send({
    userId: 'user_123',
    channel: ['email', 'in-app'],
    template: 'welcome-msg',
    data: {
      name: 'John Doe',
    },
  });
  
  return Response.json({ success: true });
}

// Send email only
await notify.sendEmail({
  to: 'user@example.com',
  subject: 'Welcome to Rivtor',
  template: 'welcome-email',
  data: { name: 'John' },
});

// Create in-app notification
await notify.sendInApp({
  userId: 'user_123',
  title: 'Project Deployed',
  message: 'Your project is live at example.com',
  link: '/projects/123',
});
```

### Client-Side (React)

```tsx
import { RivtorNotificationBell } from '@rivtor/notify/react';

// Add to navbar
export default function Navbar() {
  return (
    <nav>
      <RivtorNotificationBell />
    </nav>
  );
}
```

## API Reference

### Server Methods

- `send(options)` - Universal send (multi-channel)
- `sendEmail(options)` - Send email notification
- `sendInApp(options)` - Create in-app notification
- `markAsRead(notificationId)` - Mark notification as read
- `getNotifications(userId)` - Get user notifications

### React Components

- `<RivtorNotificationBell />` - Navbar notification bell with dropdown
- `<RivtorNotificationList />` - Notification list component

## Templates

```typescript
// Custom template
const templates = {
  'project-deployed': {
    email: {
      subject: 'Project Deployed',
      html: '<h1>Your project {{name}} is live!</h1>',
    },
    inApp: {
      title: 'Project Deployed',
      message: 'Your project {{name}} is live at {{url}}',
    },
  },
};
```

## Environment Variables

```bash
# Supabase (Required)
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key

# Email Provider (Optional)
SENDGRID_API_KEY=SG_...
```

## Database Schema

```sql
CREATE TABLE notifications (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
  title TEXT NOT NULL,
  message TEXT NOT NULL,
  link TEXT,
  read BOOLEAN DEFAULT FALSE,
  created_at TIMESTAMPTZ DEFAULT NOW()
);
```

## License

MIT © Rivtor

## Support

- Email: legal@rivtor.com
- Documentation: [GitHub Wiki](https://github.com/rivtor/rivtor-notify/wiki)

---

**Built with care by [Rivtor](https://rivtor.com)**