|
1 | 1 | # BeeBuzz |
2 | 2 |
|
3 | | -Simple, private push notifications with real end-to-end encryption. |
4 | | -BeeBuzz delivers alerts over Web Push with a small, auditable stack. In E2E mode, the server stores ciphertext instead of plaintext. |
| 3 | +Simple, private push notifications for servers, scripts, apps, and webhooks. |
5 | 4 |
|
6 | | -## Start Here |
| 5 | +BeeBuzz is a focused Web Push delivery system for alerts that should reach your own |
| 6 | +paired devices without becoming another chat surface. It supports both fast |
| 7 | +server-trusted notifications and real end-to-end encrypted delivery, where message |
| 8 | +content is encrypted before it reaches BeeBuzz and the server stores ciphertext |
| 9 | +instead of plaintext. |
| 10 | + |
| 11 | +## Why BeeBuzz |
| 12 | + |
| 13 | +- **Private alerting**: send high-signal machine-to-person notifications to paired devices. |
| 14 | +- **Two delivery modes**: start quickly with trusted delivery, or use E2E mode when content privacy matters. |
| 15 | +- **Real E2E push flow**: in E2E mode, the CLI encrypts locally for paired device keys and Hive decrypts locally on the receiving device. |
| 16 | +- **Small auditable stack**: Go, SQLite, SvelteKit, Web Push, and a Hive PWA receiver. |
| 17 | +- **Focused scope**: BeeBuzz is not a team chat, inbox, or general messaging platform. |
| 18 | + |
| 19 | +## Architecture |
| 20 | + |
| 21 | +BeeBuzz is split into a few small pieces: |
| 22 | + |
| 23 | +- **Server**: Go + SQLite API for accounts, topics, API tokens, devices, attachments, and Web Push dispatch. |
| 24 | +- **Site**: SvelteKit web app for sign-in, device pairing, API tokens, webhook setup, and administration. |
| 25 | +- **Hive**: PWA receiver that handles Web Push, stores pairing state locally, and decrypts E2E notifications on-device. |
| 26 | +- **CLI**: sender for end-to-end encrypted notifications from terminals, scripts, and automation. |
| 27 | + |
| 28 | +## Delivery Modes |
| 29 | + |
| 30 | +### Server-trusted |
| 31 | + |
| 32 | +Use JSON or multipart requests when the sender trusts the BeeBuzz server with the |
| 33 | +notification payload. |
| 34 | + |
| 35 | +```text |
| 36 | +sender -> BeeBuzz API -> Web Push -> Hive |
| 37 | +``` |
| 38 | + |
| 39 | +BeeBuzz authenticates the API token, reads and validates the payload, optionally |
| 40 | +handles an attachment, then sends a Web Push notification to subscribed devices. |
| 41 | +This is the fastest path for tests, simple integrations, and webhooks. |
| 42 | + |
| 43 | +### End-to-end encrypted |
| 44 | + |
| 45 | +Use the CLI or an `application/octet-stream` request when notification content |
| 46 | +should stay opaque to BeeBuzz. |
| 47 | + |
| 48 | +```text |
| 49 | +CLI -> encrypt locally for paired devices -> BeeBuzz stores ciphertext -> Hive fetches and decrypts locally |
| 50 | +``` |
| 51 | + |
| 52 | +The CLI fetches paired device public keys, encrypts the notification locally with |
| 53 | +age/X25519, and sends only ciphertext to BeeBuzz. The server stores the opaque |
| 54 | +blob temporarily and pushes a small envelope containing the notification ID, |
| 55 | +attachment token, and server acceptance time. Hive receives the envelope, fetches |
| 56 | +the blob, and decrypts the final notification locally. |
| 57 | + |
| 58 | +## Try It |
7 | 59 |
|
8 | 60 | - Read the docs: <https://beebuzz.app/docs> |
9 | 61 | - Use the hosted BeeBuzz beta: <https://beebuzz.app/docs/quickstart> |
10 | 62 | - Run BeeBuzz locally for development: <https://beebuzz.app/docs/local-dev> |
11 | 63 |
|
12 | | -## Beta Focus |
| 64 | +Install the CLI from a [GitHub release](https://github.com/lucor/beebuzz/releases) (no Go required) or with Go: |
| 65 | + |
| 66 | +```bash |
| 67 | +go install lucor.dev/beebuzz/cmd/beebuzz@latest |
| 68 | +``` |
| 69 | + |
| 70 | +Send an encrypted notification after connecting the CLI: |
| 71 | + |
| 72 | +```bash |
| 73 | +beebuzz send "Hello from BeeBuzz" |
| 74 | +``` |
| 75 | + |
| 76 | +## Security Model |
| 77 | + |
| 78 | +In E2E mode: |
| 79 | + |
| 80 | +- BeeBuzz should not recover notification plaintext from stored blobs alone. |
| 81 | +- BeeBuzz stores paired device public recipients, not device private identities. |
| 82 | +- A database compromise alone should not reveal stored E2E message plaintext or device private keys. |
| 83 | + |
| 84 | +E2E protects message content, not metadata. BeeBuzz still sees operational metadata |
| 85 | +such as users, topics, device mappings, timestamps, delivery results, and whether |
| 86 | +E2E mode was used. It also does not protect against a compromised endpoint or an |
| 87 | +actively malicious server serving malicious client code or replacing recipient keys. |
| 88 | + |
| 89 | +See [docs/E2E_ENCRYPTION.md](docs/E2E_ENCRYPTION.md) and |
| 90 | +[docs/THREAT_MODEL.md](docs/THREAT_MODEL.md) for the full model. |
| 91 | + |
| 92 | +## Project Status |
13 | 93 |
|
14 | 94 | BeeBuzz is currently optimized for two workflows: |
15 | 95 |
|
16 | | -1. get approved for the beta and send your first notification in seconds |
| 96 | +1. get approved for the hosted beta and send your first notification in seconds |
17 | 97 | 2. run the stack locally with a fast development loop |
18 | 98 |
|
19 | 99 | Detailed production self-hosting docs will come later. |
20 | 100 |
|
21 | | -## Install The CLI |
22 | | - |
23 | | -```bash |
24 | | -go install lucor.dev/beebuzz/cmd/beebuzz@latest |
25 | | -``` |
| 101 | +Hosted access is free during beta. After beta, the hosted service will move to a |
| 102 | +single paid plan, priced to keep the project sustainable. Self-hosting remains |
| 103 | +free, open source, and available under the AGPL license. |
26 | 104 |
|
27 | 105 | ## License |
28 | 106 |
|
|
0 commit comments