max / balanced_breakfast
4 files changed,
+9 insertions,
-7 deletions
| @@ -45,7 +45,7 @@ The project is a Cargo workspace with four library crates and one application cr | |||
| 45 | 45 | ||
| 46 | 46 | Dependency flow: `bb-interface` is leaf (no internal deps) -> `bb-core` and `bb-feed` depend on `bb-interface` -> `bb-db` depends on `bb-interface` -> `src-tauri` depends on all four. | |
| 47 | 47 | ||
| 48 | - | Shared libraries from `../MNW/shared/`: [theme-common](../MNW/shared/theme-common/) (theme loading), [tagtree](../MNW/shared/tagtree/) (tag validation), [synckit-client](../MNW/shared/synckit-client/) (cloud sync SDK). | |
| 48 | + | Shared libraries from `../../MNW/shared/`: [theme-common](../../MNW/shared/theme-common/) (theme loading), [tagtree](../../MNW/shared/tagtree/) (tag validation), [synckit-client](../../MNW/shared/synckit-client/) (cloud sync SDK). | |
| 49 | 49 | ||
| 50 | 50 | ## Features | |
| 51 | 51 |
| @@ -85,7 +85,7 @@ Plugins declare their configuration schema with these field types: `Text`, `Text | |||
| 85 | 85 | ||
| 86 | 86 | ### Bundled Plugins | |
| 87 | 87 | ||
| 88 | - | Three plugins ship with the app: `rss.rhai` (RSS/Atom/JSON Feed), `hackernews.rhai` (HN stories), `arxiv.rhai` (arXiv papers). A `reader.rhai` plugin extracts article content from URLs using the readability algorithm. | |
| 88 | + | Eleven plugins ship with the app (see the README for the full list), including `rss.rhai` (RSS/Atom/JSON Feed), `hackernews.rhai` (HN stories), and `arxiv.rhai` (arXiv papers). A `reader.rhai` plugin extracts article content from URLs using the readability algorithm. | |
| 89 | 89 | ||
| 90 | 90 | ## Feed Aggregation | |
| 91 | 91 | ||
| @@ -105,7 +105,7 @@ The `FeedGenerator` (`bb-feed::generator`) reads items from the database, applie | |||
| 105 | 105 | ||
| 106 | 106 | ## Database Layer | |
| 107 | 107 | ||
| 108 | - | SQLite via sqlx with compile-time migrations (10 migrations). The `Database` struct holds a connection pool (`max_connections: 16`) and provides typed repository accessors. | |
| 108 | + | SQLite via sqlx with compile-time migrations (12 migrations). The `Database` struct holds a connection pool (`max_connections: 16`) and provides typed repository accessors. | |
| 109 | 109 | ||
| 110 | 110 | ### Tables | |
| 111 | 111 |
| @@ -1,6 +1,6 @@ | |||
| 1 | 1 | # Balanced Breakfast Database Schema | |
| 2 | 2 | ||
| 3 | - | SQLite schema reference. 10 migrations. Migrations live in `migrations/sqlite/` as numbered SQL files, applied on boot via sqlx-sqlite. | |
| 3 | + | SQLite schema reference. 12 migrations. Migrations live in `migrations/sqlite/` as numbered SQL files, applied on boot via sqlx-sqlite. | |
| 4 | 4 | ||
| 5 | 5 | ## Domain Map | |
| 6 | 6 |
| @@ -1,13 +1,14 @@ | |||
| 1 | 1 | # Balanced Breakfast — Privacy Policy | |
| 2 | 2 | ||
| 3 | - | *Last updated: May 12, 2026* | |
| 3 | + | *Last updated: June 4, 2026* | |
| 4 | 4 | ||
| 5 | 5 | Balanced Breakfast is published by Make Creative, LLC. This policy explains what data the app handles. | |
| 6 | 6 | ||
| 7 | 7 | ## The Short Version | |
| 8 | 8 | ||
| 9 | 9 | - Balanced Breakfast is a local-first feed aggregator. Subscriptions, fetched articles, and read state live in a SQLite database on your own device. | |
| 10 | - | - We don't run a server for Balanced Breakfast. We don't see your data. | |
| 10 | + | - Balanced Breakfast works fully offline; nothing leaves your device unless you opt in to cloud sync. | |
| 11 | + | - If you enable sync, your data is end-to-end encrypted on your device before upload, so the sync server stores only ciphertext we cannot read. | |
| 11 | 12 | - The app fetches feed data directly from sources you configure (RSS feeds, public APIs); those operators see your IP, as with any web request. | |
| 12 | 13 | - No telemetry, analytics, ads, or tracking. | |
| 13 | 14 | ||
| @@ -26,6 +27,7 @@ The app makes outbound requests only to sources you've added: | |||
| 26 | 27 | - Public APIs (e.g. Hacker News, arXiv) that plugins are configured to query | |
| 27 | 28 | - Image hosts referenced by article content (loaded for preview rendering) | |
| 28 | 29 | - **Update server** — the app periodically checks for new versions. The check transmits your current app version and platform; no personal data. | |
| 30 | + | - **SyncKit sync** (optional, off by default) — if you enable it, the app replicates your data to a SyncKit server (makenot.work by default) using end-to-end encrypted payloads. The server stores only ciphertext; we cannot read your synced data. | |
| 29 | 31 | ||
| 30 | 32 | We don't proxy any of these requests. Each goes directly from your device to the source's own server, under that source's own privacy policy. | |
| 31 | 33 | ||
| @@ -34,7 +36,7 @@ We don't proxy any of these requests. Each goes directly from your device to the | |||
| 34 | 36 | - No analytics SDK, no crash reporter beacons, no usage tracking | |
| 35 | 37 | - No advertising, no third-party trackers | |
| 36 | 38 | - No data sold or shared with third parties | |
| 37 | - | - No cloud sync between devices (each device's database is independent) | |
| 39 | + | - No background sync or data upload unless you explicitly enable SyncKit (off by default) | |
| 38 | 40 | ||
| 39 | 41 | ## Children | |
| 40 | 42 |