Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
210 changes: 209 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,209 @@
# Sendook
# Sendook

> Email infrastructure for AI agents

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
[![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?logo=mongodb&logoColor=white)](https://www.mongodb.com/)

Stop wrestling with Gmail APIs and AWS SES setup. Sendook provides simple, powerful email infrastructure designed specifically for AI agents.

## 🚀 Quick Start

```bash
# Install the SDK
npm install @sendook/node-sdk

# Create an inbox and start sending emails
import { Sendook } from '@sendook/node-sdk';

const client = new Sendook({ apiKey: process.env.SENDOOK_API_KEY });

// Create an inbox
const inbox = await client.inboxes.create({
name: 'My AI Agent'
});

// Send an email
await client.messages.send({
inboxId: inbox.id,
to: 'customer@example.com',
subject: 'Hello from my AI agent',
body: 'This is easy!'
});
```

## ✨ Why Sendook?

Traditional email setup for AI agents is painful:
- ❌ Days of DNS configuration (SPF, DKIM, DMARC)
- ❌ Complex Gmail OAuth flows or AWS SES setup
- ❌ Manual MIME parsing and attachment handling
- ❌ Polling for new emails
- ❌ Managing threads and conversations

Sendook eliminates all of this:
- ✅ Create inboxes via API in seconds
- ✅ Receive real-time webhooks for incoming emails
- ✅ Pre-decoded JSON responses, ready for consumption
- ✅ Automatic thread management
- ✅ Built-in search and storage
- ✅ Open source (MIT license)

## 🏗️ Repository Structure

This monorepo contains:

- **`api/`** - Backend API server (Node.js + MongoDB)
- **`landing/`** - Marketing website (Nuxt 3 + Nuxt UI)
- **`node-sdk/`** - Official Node.js SDK

## 🛠️ Development Setup

### Prerequisites

- Node.js 18+
- Bun or npm
- MongoDB 5.0+
- Docker (optional, for containerized development)

### Local Development

1. **Clone the repository**

```bash
git clone https://github.com/sendook/sendook.git
cd sendook
```

2. **Install dependencies**

```bash
# Install dependencies for all packages
npm install
```

3. **Set up environment variables**

```bash
# API
cd api
cp .env.example .env
# Edit .env with your MongoDB connection string and other settings

# Landing page
cd ../landing
cp .env.example .env
# Edit .env with your configuration
```

4. **Start MongoDB**

```bash
# Using Docker
docker run -d -p 27017:27017 --name sendook-mongo mongo:5.0

# Or use your local MongoDB installation
```

5. **Start the API server**

```bash
cd api
bun dev
# API runs on http://localhost:3000
```

6. **Start the landing page**

```bash
cd landing
bun dev
# Landing page runs on http://localhost:3001
```

## 🐳 Docker Setup

Run the entire stack with Docker Compose:

```bash
docker-compose up -d
```

This starts:
- API server on port 3000
- Landing page on port 3001
- MongoDB on port 27017

## 📖 Documentation

- **[Getting Started](./landing/content/1.docs/1.getting-started/1.index.md)** - Introduction and setup
- **[Installation](./landing/content/1.docs/1.getting-started/2.installation.md)** - Detailed installation guide
- **[Usage Guide](./landing/content/1.docs/1.getting-started/3.usage.md)** - Core workflows and examples
- **[API Documentation](./api/README.md)** - Complete API reference
- **[SDK Documentation](./node-sdk/README.md)** - Node.js SDK reference

## 🧪 Running Tests

```bash
# Run all tests
npm test

# Run API tests
cd api && bun test

# Run SDK tests
cd node-sdk && bun test
```

## 🚢 Deployment

### Cloud Hosting (Recommended for Production)

Deploy to your preferred platform:

- **Vercel/Netlify** - Landing page
- **Railway/Render/Fly.io** - API server
- **MongoDB Atlas** - Database

### Self-Hosting

See the [Installation Guide](./landing/content/1.docs/1.getting-started/2.installation.md#self-hosted-setup) for complete self-hosting instructions.

## 🤝 Contributing

We welcome contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for details.

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## 📝 License

Sendook is open source software licensed under the [MIT license](./LICENSE).

## 🌟 Support

- 📚 [Documentation](https://sendook.com/docs)
- 💬 [Discord Community](https://discord.gg/sendook)
- 🐛 [Issue Tracker](https://github.com/sendook/sendook/issues)
- 📧 [Email Support](mailto:support@sendook.com)

## 🗺️ Roadmap

- [x] Core email infrastructure
- [x] Webhook notifications
- [x] Multi-inbox support
- [x] Node.js SDK
- [ ] Python SDK
- [ ] Go SDK
- [ ] Advanced analytics
- [ ] Email templates
- [ ] A/B testing
- [ ] Email tracking (opens, clicks)

---

Built with ❤️ for AI agents that need to communicate
13 changes: 13 additions & 0 deletions landing/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# editorconfig.org
root = true

[*]
indent_size = 2
indent_style = space
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false
2 changes: 2 additions & 0 deletions landing/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Public URL, used for OG Image when running nuxt generate
NUXT_PUBLIC_SITE_URL=
34 changes: 34 additions & 0 deletions landing/.github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: ci

on: push
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Add pull_request trigger to catch issues during code review.

The workflow currently only runs on push, which means CI validation happens after code is merged. Add pull_request trigger to run checks before merge and provide early feedback during review.

- on: push
+ on:
+   - push
+   - pull_request
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
on: push
on:
- push
- pull_request
🤖 Prompt for AI Agents
In landing/.github/workflows/ci.yml around line 3, the workflow only triggers on
push so CI doesn't run for PRs; update the workflow triggers to include
pull_request alongside push (e.g., add a pull_request key with the same branches
or patterns as push) so checks run on PRs and provide early feedback during
review.


jobs:
ci:
runs-on: ${{ matrix.os }}

strategy:
matrix:
os: [ubuntu-latest]
node: [22]

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Install node
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node }}
cache: pnpm

- name: Install dependencies
run: pnpm install

- name: Lint
run: pnpm run lint

- name: Typecheck
run: pnpm run typecheck
27 changes: 27 additions & 0 deletions landing/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist

# Node dependencies
node_modules

# Logs
logs
*.log

# Misc
.DS_Store
.fleet
.idea

# Local env files
.env
.env.*
!.env.example

# VSC
.history
1 change: 1 addition & 0 deletions landing/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
shamefully-hoist=true
Loading