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
47 changes: 33 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Sendook

![Sendook](https://www.sendook.com/sendook-logo.svg)

**[sendook.com](https://sendook.com)** | **[npm package](https://www.npmjs.com/package/@sendook/node)**

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
Expand All @@ -13,33 +15,47 @@ The easiest way to start sending AND **receiving** emails at scale.

## Why this?

- Setting up email sending at scale is still cumbersome—we had to do it at [Rupt](https://www.rupt.dev){:target="_blank"}
- Setting up email sending at scale is still cumbersome—we had to do it at <a href="https://www.rupt.dev" target="_blank">Rupt</a>
- The ability to configure and check custom domains is still harder than it should be
- We use this extensively at [Rupt](https://www.rupt.dev){:target="_blank"} to have our internal agents handle inbound emails, payments, prioritizations, etc.
- We use this extensively at <a href="https://www.rupt.dev" target="_blank">Rupt</a> to have our internal agents handle inbound emails, payments, prioritizations, etc.

## Quick Start

### Using the API

#### Using the API endpoints

```curl
curl -X POST https://api.sendook.com/v1/inboxes \
-H "Authorization: Bearer your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "rupt",
"email": "rupt@sendook.com"
}'
```

#### Using the TypeScript SDK

```typescript
import { Sendook } from '@sendook/node-sdk';
import { Sendook } from "@sendook/node-sdk";

// Initialize client with API key
const client = new Sendook({ apiKey: 'your_api_key' });
const client = new Sendook({ apiKey: "your_api_key" });

// Create an inbox
const inbox = await client.inboxes.create({
name: 'support',
email: 'support@sendook.com' // or use your custom domain
name: "rupt",
email: "rupt@sendook.com", // or use your custom domain
});

// Send an email
await client.messages.send({
inboxId: inbox.id,
from: 'support@sendook.com',
to: ['customer@example.com'],
subject: 'Welcome!',
body: 'Thanks for signing up.'
from: "rupt@sendook.com",
to: ["rupt@sendook.com"],
subject: "Welcome!",
body: "Thanks for signing up.",
});

// Receive emails via webhook
Expand All @@ -55,7 +71,7 @@ await client.messages.send({
- MX records (SES)
- CNAME records (DKIM)
- [Optional] SPF, DMARC
3. Start sending & receiving
3. Start sending **& receiving** emails

### Self-hosting & Running Locally

Expand All @@ -66,16 +82,18 @@ await client.messages.send({
docker build -t sendook-api ./api
docker run -p 8006:8006 \
-e MONGO_URI="your_mongodb_uri" \
# optional Rupt secret key for fake accounts & account takeover
-e RUPT_SECRET_KEY="your_secret_key" \
-e DEFAULT_EMAIL_DOMAIN="sendook.com" \
-e AWS_ACCESS_KEY_ID="your_aws_key" \
-e AWS_SECRET_ACCESS_KEY="your_aws_secret" \
sendook-api
```

**Required environment variables:**
**Environment variables:**

- `MONGO_URI`
- `RUPT_SECRET_KEY`
- `RUPT_SECRET_KEY` (optional for fake accounts & account takeover)
- `DEFAULT_EMAIL_DOMAIN`
- `AWS_ACCESS_KEY_ID`
- `AWS_SECRET_ACCESS_KEY`
Expand Down Expand Up @@ -105,6 +123,7 @@ bun build && bun start # Production
```

**Environment variable:**

- `API_URL` (default: `http://localhost:8006`)

#### Landing
Expand Down Expand Up @@ -186,4 +205,4 @@ Sendook is open source software licensed under the [MIT license](./LICENSE).

---

Built with ❤️, maintained by the [Rupt](https://www.rupt.dev){:target="_blank"} team.
Built with ❤️, maintained by the <a href="https://www.rupt.dev" target="_blank">Rupt</a> team.
2 changes: 1 addition & 1 deletion app/app/pages/login.vue
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@

<p class="auth-footer">
New to Sendook?
<NuxtLink to="/signup">Create an account</NuxtLink>
<NuxtLink to="https://app.sendook.com/signup">Create an account</NuxtLink>
</p>
</div>
</template>
Expand Down
17 changes: 17 additions & 0 deletions landing/app/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,23 @@ export default defineAppConfig({
colors: {
primary: 'primary',
neutral: 'gray'
},
// Design system overrides from design.json
button: {
rounded: 'full', // borderRadius: 9999px from design.json
padding: {
md: 'px-6 py-3' // 12px 24px from design.json
}
},
card: {
rounded: 'xl', // 16px border radius from design.json
shadow: 'md', // 0 4px 24px rgba(0, 0, 0, 0.05) from design.json
padding: {
body: 'p-8' // 32px from design.json
}
},
container: {
constrain: 'xl' // maxWidth: 1200px from design.json
}
}
})
Loading