An open API service indexing awesome lists of open source software.

https://github.com/silverbucket/inbox-rs


https://github.com/silverbucket/inbox-rs

Last synced: about 2 months ago
JSON representation

Awesome Lists containing this project

README

          

# Inbox RS

A universal inbox for saving URLs, notes, images, emails, and audio — backed by [remoteStorage](https://remotestorage.io). Your data stays on your own storage server, not someone else's cloud.

## What it does

**Web App** — A Svelte app that displays all your saved items in a card grid. Connect to any remoteStorage-compatible server to view, browse, and manage your inbox items. Click any card to view full details, edit, convert to a todo, or delete. The header also links to a Plugins page with downloadable browser and Thunderbird builds.

**Browser Extension** — A Chrome/Firefox extension for quickly saving things while browsing:

- **Save Page** — Saves the current page as a bookmark with title, og:image preview, favicon, and site name. For tweets, it captures the full tweet text and any attached images.
- **Quick Note** — Jot down a note with no page context needed.
- **Right-click: Save Link** — Save any link to your inbox.
- **Right-click: Save Image** — Downloads and saves the actual image binary (not just the URL).
- **Right-click: Save Selection** — Saves highlighted text as a note with a link back to the source page.

**Thunderbird Extension** — A Thunderbird MailExtension (128+) for saving emails to your inbox:

- Opens from the message toolbar when reading an email.
- Pre-fills subject, sender, and body from the current email.
- Includes an optional notes field for your own annotations.
- Saves a `mid:` URI link back to the original email in your mail client.

## Architecture

```
packages/
rs-module/ # Shared remoteStorage data module (types, schemas, CRUD)
web/ # Svelte web app (card grid, view modal, todos)
extension/ # Chrome MV3 + Firefox WebExtension (popup, context menus, content script)
thunderbird/ # Thunderbird MailExtension (message toolbar popup, email saving)
```

All four packages share the `@inbox-rs/rs-module` for consistent data types and storage layout.

### Storage layout

```
/inbox/items/{uuid} # JSON metadata for each item
/inbox/files/{uuid}.{ext} # Binary files (images, audio)
```

### Item types

| Type | Description |
|------|-------------|
| `bookmark` | URL with title, description, og:image, favicon. Optionally includes `body` (embedded content like tweet text) and `filePath` (downloaded image). |
| `note` | Freeform text with title and body. |
| `image` | Downloaded image binary with metadata and optional source URL. |
| `audio` | Audio recording with duration. |
| `document` | Uploaded file with metadata. |
| `code-snippet` | Code with syntax highlighting and language tag. |
| `email` | Email with subject, body, sender, optional notes, and `mid:` URI link. |
| `todo` | Task with title, completion status, and optional notes. Any item can be converted to a todo. |

## Quick start

See [DEVELOPMENT.md](DEVELOPMENT.md) for full setup instructions.

```bash
npm install
docker compose up -d # Start local remoteStorage server
npm run dev -w packages/web # Start web app on localhost:5173
npm run build # Build web app and package downloadable plugin artifacts into dist/
npm run build:extension # Build browser extension only
npm run build:thunderbird # Build Thunderbird extension only
```

After `npm run build`, the web app output in `packages/web/dist/` includes:

- `downloads/inbox-rs-chromium-.zip`
- `downloads/inbox-rs-firefox-.xpi`
- `downloads/inbox-rs-thunderbird-.xpi`

That makes the built `dist/` folder self-contained for static hosting.

## Versioning

The project currently uses the root `package.json` version as the release version for downloadable plugin artifacts. The packaging script reads that value and emits filenames like:

- `inbox-rs-chromium-0.1.0.zip`
- `inbox-rs-firefox-0.1.0.xpi`
- `inbox-rs-thunderbird-0.1.0.xpi`

In practice, that means a release bump should start by updating the root `version` field, then rebuilding so the generated downloads and metadata pick up the new versioned filenames.

## Tech stack

- **Svelte 5** with runes (`$state`, `$derived`, `$effect`, `$props`)
- **Vite 5** for both web app and extension builds
- **remotestorage.js** for data sync + **remotestorage-module-shares** for Sharesome integration
- **TypeScript** throughout
- **Chrome Manifest V3** / Firefox WebExtension APIs / **Thunderbird Manifest V2**
- **Armadietto** as the local dev remoteStorage server

## License

GPL-3.0