Skip to content
/ beebuzz Public

Commit 270a5e9

Browse files
authored
feat(site-docs): refresh beta docs, homepage CTA, and trusted mode guides (#9)
1 parent bf95079 commit 270a5e9

5 files changed

Lines changed: 312 additions & 55 deletions

File tree

README.md

Lines changed: 88 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,106 @@
11
# BeeBuzz
22

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.
54

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
759

860
- Read the docs: <https://beebuzz.app/docs>
961
- Use the hosted BeeBuzz beta: <https://beebuzz.app/docs/quickstart>
1062
- Run BeeBuzz locally for development: <https://beebuzz.app/docs/local-dev>
1163

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
1393

1494
BeeBuzz is currently optimized for two workflows:
1595

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
1797
2. run the stack locally with a fast development loop
1898

1999
Detailed production self-hosting docs will come later.
20100

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.
26104

27105
## License
28106

web/apps/site/src/routes/+page.svelte

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,20 @@
1111
ShieldCheck,
1212
Zap
1313
} from '@lucide/svelte';
14-
import { BeeBuzzLogo } from '@beebuzz/shared/components';
14+
import { BeeBuzzLogo, isLoggedIn } from '@beebuzz/shared';
15+
import { onMount } from 'svelte';
1516
1617
import { isSaasMode } from '$lib/config/deployment';
1718
import PublicFooter from '$lib/components/PublicFooter.svelte';
1819
20+
let loggedIn = $state(false);
21+
22+
onMount(() => {
23+
loggedIn = isLoggedIn();
24+
});
25+
1926
const GITHUB_REPO_URL = 'https://github.com/lucor/beebuzz';
20-
const STATUS_URL = 'https://status.beebuzz.app';
2127
const QUICKSTART_PATH = '/docs/quickstart';
22-
const CONTACT_PATH = '/contact';
2328
2429
type UseCase = {
2530
title: string;
@@ -102,17 +107,6 @@
102107
<a href={resolve(QUICKSTART_PATH)} class="transition-colors hover:text-base-content"
103108
>Quickstart</a
104109
>
105-
<a href={resolve(CONTACT_PATH)} class="transition-colors hover:text-base-content"
106-
>Contact</a
107-
>
108-
<a
109-
href={STATUS_URL}
110-
target="_blank"
111-
rel="noopener noreferrer"
112-
class="transition-colors hover:text-base-content"
113-
>
114-
Status
115-
</a>
116110
{/if}
117111
<a
118112
href={GITHUB_REPO_URL}
@@ -122,6 +116,14 @@
122116
>
123117
GitHub
124118
</a>
119+
{#if isSaasMode}
120+
<a
121+
href={resolve(loggedIn ? '/account/overview' : '/login')}
122+
class="transition-colors hover:text-base-content"
123+
>
124+
{loggedIn ? 'Dashboard' : 'Sign in'}
125+
</a>
126+
{/if}
125127
</nav>
126128
</div>
127129
</header>
@@ -150,7 +152,7 @@
150152
href={resolve('/login')}
151153
class="btn btn-primary btn-lg gap-2 text-base font-semibold"
152154
>
153-
Get Started
155+
Request beta access
154156
<ArrowRight class="h-5 w-5" />
155157
</a>
156158
<a href={resolve(QUICKSTART_PATH)} class="btn btn-outline btn-lg">
@@ -170,8 +172,13 @@
170172

171173
{#if isSaasMode}
172174
<p class="mt-4 text-sm leading-6 text-base-content/65">
173-
The hosted service is in beta. If your email is already approved, you can sign in now.
174-
Otherwise the same flow submits your access request.
175+
Hosted access is free during beta. After beta, the hosted service will move to a
176+
single paid plan, priced to keep the project sustainable. Self-hosting remains free
177+
and open source.
178+
</p>
179+
<p class="mt-2 text-sm leading-6 text-base-content/65">
180+
If your email is already approved, you can sign in now. Otherwise the same flow
181+
submits your access request.
175182
</p>
176183
{/if}
177184

web/apps/site/src/routes/docs/+layout.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
icon: Zap,
1818
items: [
1919
{ label: 'Quickstart', href: '/docs/quickstart' },
20+
{ label: 'Webhooks', href: '/docs/webhooks' },
2021
{ label: 'Local Dev', href: '/docs/local-dev' },
2122
{ label: 'Browser Support', href: '/docs/browser-support' }
2223
]

0 commit comments

Comments
 (0)