chore: refactor and unify readmes
961e12d3
4 file(s) · +169 −109
| 6 | 6 | ||
| 7 | 7 | ## Apps |
|
| 8 | 8 | ||
| 9 | - | | App | Description | |
|
| 10 | - | |---|---| |
|
| 11 | - | | [**Sipp**](apps/sipp) | Minimal code sharing with web UI and TUI | |
|
| 12 | - | | [**Feeds**](apps/feeds) | Minimal RSS reader with FreshRSS and OPML support | |
|
| 13 | - | | [**Parcels**](apps/parcels) | Minimal package tracking (USPS) | |
|
| 14 | - | | [**Jotts**](apps/jotts) | Minimal markdown notes app | |
|
| 15 | - | | [**OG**](apps/og) | Open Graph tag inspector | |
|
| 16 | - | | [**Shrink**](apps/shrink) | Image compression and resizing | |
|
| 9 | + | | App | Description | Deploy | |
|
| 10 | + | |---|---|---| |
|
| 11 | + | | [**Sipp**](apps/sipp) | Minimal code sharing with web UI and TUI | [](https://railway.com/deploy/Axcf_D?referralCode=JGcIp6) | |
|
| 12 | + | | [**Feeds**](apps/feeds) | Minimal RSS reader with FreshRSS and OPML support | [](https://railway.com/deploy/Ezvmhx?referralCode=JGcIp6) | |
|
| 13 | + | | [**Parcels**](apps/parcels) | Minimal package tracking (USPS) | [](https://railway.com/deploy/HNQUs4?referralCode=JGcIp6) | |
|
| 14 | + | | [**Jotts**](apps/jotts) | Minimal markdown notes app | [](https://railway.com/deploy/DLhUhH?referralCode=JGcIp6) | |
|
| 15 | + | | [**OG**](apps/og) | Open Graph tag inspector | [](https://railway.com/deploy/OdXBt_?referralCode=JGcIp6) | |
|
| 16 | + | | [**Shrink**](apps/shrink) | Image compression and resizing | [](https://railway.com/deploy/enYUFb?referralCode=JGcIp6) | |
|
| 17 | 17 | ||
| 18 | 18 | ## Shared Crates |
|
| 19 | 19 |
| 4 | 4 | ||
| 5 | 5 | Minimal RSS Feeds |
|
| 6 | 6 | ||
| 7 | - | ## About |
|
| 7 | + | ## Quickstart |
|
| 8 | + | ||
| 9 | + | 1. Make sure [Rust](https://www.rust-lang.org/tools/install) is installed |
|
| 10 | + | ||
| 11 | + | ```bash |
|
| 12 | + | rustc --version |
|
| 13 | + | ``` |
|
| 14 | + | ||
| 15 | + | 2. Clone and build |
|
| 16 | + | ||
| 17 | + | ```bash |
|
| 18 | + | git clone https://github.com/stevedylandev/feeds |
|
| 19 | + | cd feeds |
|
| 20 | + | cargo build |
|
| 21 | + | ``` |
|
| 22 | + | ||
| 23 | + | 3. Run the dev server |
|
| 24 | + | ||
| 25 | + | ```bash |
|
| 26 | + | cargo run |
|
| 27 | + | # Server running on http://localhost:3000 |
|
| 28 | + | ``` |
|
| 29 | + | ||
| 30 | + | ### Environment Variables |
|
| 31 | + | ||
| 32 | + | | Variable | Description | Default | |
|
| 33 | + | |---|---|---| |
|
| 34 | + | | `FRESHRSS_URL` | URL of your FreshRSS instance | — | |
|
| 35 | + | | `FRESHRSS_USERNAME` | FreshRSS username | — | |
|
| 36 | + | | `FRESHRSS_PASSWORD` | FreshRSS password | — | |
|
| 37 | + | | `ADMIN_PASSWORD` | Password for the admin panel | — | |
|
| 38 | + | | `COOKIE_SECURE` | Enable HTTPS-only cookies | `false` | |
|
| 39 | + | ||
| 40 | + | ## Overview |
|
| 8 | 41 | ||
| 9 | - | Feeds is a minimal RSS reader that mimics the original experience of RSS. It's just a list of posts. No categories, no marking a post read or unread, and there is no in-app reading. With this approach you have to read the post on the authors personal website and experience it in it's original context. While this may not work well if you have loads of news feeds, I personally love it for [my approach to blogs](https://blogfeeds.net). |
|
| 42 | + | Feeds is a minimal RSS reader that mimics the original experience of RSS. It's just a list of posts. No categories, no marking a post read or unread, and there is no in-app reading. With this approach you have to read the post on the author's personal website and experience it in its original context. A few highlights: |
|
| 10 | 43 | ||
| 11 | - | This app is also MIT open sourced and designed to be self-hosted; fork the code and change it to your liking! |
|
| 44 | + | - Single Rust binary with embedded assets |
|
| 45 | + | - Multiple feed sources: URL params, OPML file, or FreshRSS API |
|
| 46 | + | - Password-protected admin panel for managing subscriptions |
|
| 47 | + | - Feeds API with JSON and OPML export |
|
| 48 | + | - Dark themed UI with Commit Mono font |
|
| 12 | 49 | ||
| 13 | 50 | ## Usage |
|
| 14 | 51 | ||
| 67 | 104 | /feeds?format=opml |
|
| 68 | 105 | ``` |
|
| 69 | 106 | ||
| 70 | - | ## Quickstart |
|
| 71 | - | ||
| 72 | - | 1. Make sure [Rust](https://www.rust-lang.org/tools/install) is installed |
|
| 107 | + | ## Structure |
|
| 73 | 108 | ||
| 74 | - | ```bash |
|
| 75 | - | rustc --version |
|
| 76 | 109 | ``` |
|
| 77 | - | ||
| 78 | - | 2. Clone and build |
|
| 79 | - | ||
| 80 | - | ```bash |
|
| 81 | - | git clone https://github.com/stevedylandev/feeds |
|
| 82 | - | cd feeds |
|
| 83 | - | cargo build |
|
| 84 | - | ``` |
|
| 85 | - | ||
| 86 | - | 3. Run the dev server |
|
| 87 | - | ||
| 88 | - | ```bash |
|
| 89 | - | cargo run |
|
| 90 | - | # Server running on http://localhost:3000 |
|
| 110 | + | feeds/ |
|
| 111 | + | ├── src/ |
|
| 112 | + | │ ├── main.rs # Axum server with routing, templates, and static asset serving |
|
| 113 | + | │ ├── feeds.rs # Feed fetching, OPML parsing, and FreshRSS API integration |
|
| 114 | + | │ ├── auth.rs # Session-based authentication with constant-time password verification |
|
| 115 | + | │ └── models.rs # Data structures for feeds and FreshRSS responses |
|
| 116 | + | ├── templates/ # Askama HTML templates |
|
| 117 | + | ├── assets/ # Static assets embedded at compile time via rust-embed |
|
| 118 | + | ├── Dockerfile |
|
| 119 | + | └── docker-compose.yml |
|
| 91 | 120 | ``` |
|
| 92 | 121 | ||
| 93 | - | ## Project Structure |
|
| 94 | - | ||
| 95 | - | The architecture is intentionally simple: |
|
| 96 | - | - **`src/main.rs`** - Axum server with routing, templates, and static asset serving |
|
| 97 | - | - **`src/feeds.rs`** - Feed fetching, OPML parsing, and FreshRSS API integration |
|
| 98 | - | - **`src/auth.rs`** - Session-based authentication with constant-time password verification |
|
| 99 | - | - **`src/models.rs`** - Data structures for feeds and FreshRSS responses |
|
| 100 | - | - **`src/templates/`** - Askama HTML templates |
|
| 101 | - | - **`assets/`** - Static assets embedded at compile time via `rust-embed` |
|
| 102 | - | ||
| 103 | - | ## Environment Variables |
|
| 104 | - | ||
| 105 | - | | Variable | Description | Required | |
|
| 106 | - | |---|---|---| |
|
| 107 | - | | `FRESHRSS_URL` | URL of your FreshRSS instance | For FreshRSS mode | |
|
| 108 | - | | `FRESHRSS_USERNAME` | FreshRSS username | For FreshRSS mode | |
|
| 109 | - | | `FRESHRSS_PASSWORD` | FreshRSS password | For FreshRSS mode | |
|
| 110 | - | | `ADMIN_PASSWORD` | Password for the admin panel | For admin access | |
|
| 111 | - | | `COOKIE_SECURE` | Set to `true` for HTTPS environments | No | |
|
| 112 | - | ||
| 113 | 122 | ## Deployment |
|
| 114 | 123 | ||
| 115 | 124 | Since Feeds compiles to a single binary, deployment is straightforward on any platform. |
|
| 118 | 127 | ||
| 119 | 128 | [](https://railway.com/deploy/Ezvmhx?referralCode=JGcIp6) |
|
| 120 | 129 | ||
| 121 | - | ### Docker |
|
| 122 | - | ||
| 123 | - | 1. Clone the repo |
|
| 130 | + | ### Docker (recommended) |
|
| 124 | 131 | ||
| 125 | 132 | ```bash |
|
| 126 | 133 | git clone https://github.com/stevedylandev/feeds |
|
| 127 | 134 | cd feeds |
|
| 135 | + | cp .env.sample .env |
|
| 136 | + | # Edit .env with your credentials |
|
| 137 | + | docker compose up -d |
|
| 128 | 138 | ``` |
|
| 129 | 139 | ||
| 130 | - | 2. Build and run the Docker image |
|
| 140 | + | ### Binary |
|
| 131 | 141 | ||
| 132 | 142 | ```bash |
|
| 133 | - | docker build -t feeds . |
|
| 134 | - | docker run -p 3000:3000 --env-file .env feeds |
|
| 143 | + | cargo build --release |
|
| 135 | 144 | ``` |
|
| 136 | 145 | ||
| 137 | - | Or use `docker-compose` |
|
| 146 | + | The resulting binary at `./target/release/feeds` is self-contained with all assets embedded. Copy it to your server with a configured `.env` file and run it directly. |
|
| 138 | 147 | ||
| 139 | - | ```bash |
|
| 140 | - | docker-compose up -d |
|
| 141 | - | ``` |
|
| 148 | + | ## License |
|
| 142 | 149 | ||
| 150 | + | [MIT](LICENSE) |
|
| 4 | 4 | ||
| 5 | 5 | A simple web tool for inspecting Open Graph tags on any URL. |
|
| 6 | 6 | ||
| 7 | - | ## Running Locally |
|
| 7 | + | ## Quickstart |
|
| 8 | 8 | ||
| 9 | 9 | ```bash |
|
| 10 | - | cargo run |
|
| 10 | + | git clone https://github.com/stevedylandev/og.git |
|
| 11 | + | cd og |
|
| 12 | + | cargo build --release |
|
| 13 | + | ./target/release/og |
|
| 11 | 14 | ``` |
|
| 12 | 15 | ||
| 13 | - | The server starts on `http://localhost:3000` by default. Set the `PORT` env var to change it. |
|
| 16 | + | ### Environment Variables |
|
| 17 | + | ||
| 18 | + | | Variable | Description | Default | |
|
| 19 | + | |---|---|---| |
|
| 20 | + | | `PORT` | Server port | `3000` | |
|
| 21 | + | ||
| 22 | + | ## Overview |
|
| 23 | + | ||
| 24 | + | A self-hosted Open Graph tag inspector built with Rust. Enter any URL and instantly see its OG metadata. A few highlights: |
|
| 25 | + | ||
| 26 | + | - Single Rust binary with embedded assets |
|
| 27 | + | - Inspects title, description, image, and other OG tags |
|
| 28 | + | - Dark themed UI with Commit Mono font |
|
| 29 | + | - No database needed — fully stateless |
|
| 30 | + | ||
| 31 | + | ## Structure |
|
| 32 | + | ||
| 33 | + | ``` |
|
| 34 | + | og/ |
|
| 35 | + | ├── src/ |
|
| 36 | + | │ ├── main.rs # Entry point and server startup |
|
| 37 | + | │ ├── server.rs # Axum routes and request handling |
|
| 38 | + | │ └── og.rs # Open Graph tag fetching and parsing |
|
| 39 | + | ├── templates/ # Askama HTML templates |
|
| 40 | + | │ ├── base.html # Base layout |
|
| 41 | + | │ ├── index.html # Search form |
|
| 42 | + | │ └── results.html # OG tag results display |
|
| 43 | + | ├── static/ # Fonts, favicons, and styles |
|
| 44 | + | ├── Dockerfile |
|
| 45 | + | └── docker-compose.yml |
|
| 46 | + | ``` |
|
| 14 | 47 | ||
| 15 | 48 | ## Deployment |
|
| 16 | 49 | ||
| 18 | 51 | ||
| 19 | 52 | [](https://railway.com/deploy/OdXBt_?referralCode=JGcIp6) |
|
| 20 | 53 | ||
| 21 | - | ### Docker |
|
| 54 | + | ### Docker (recommended) |
|
| 22 | 55 | ||
| 23 | 56 | ```bash |
|
| 24 | - | docker compose up --build |
|
| 57 | + | git clone https://github.com/stevedylandev/og.git |
|
| 58 | + | cd og |
|
| 59 | + | docker compose up -d |
|
| 60 | + | ``` |
|
| 61 | + | ||
| 62 | + | ### Binary |
|
| 63 | + | ||
| 64 | + | ```bash |
|
| 65 | + | cargo build --release |
|
| 25 | 66 | ``` |
|
| 67 | + | ||
| 68 | + | The resulting binary at `./target/release/og` is self-contained with all assets embedded. Copy it to your server and run it directly. |
|
| 26 | 69 | ||
| 27 | 70 | ## License |
|
| 28 | 71 | ||
| 4 | 4 | ||
| 5 | 5 | https://github.com/user-attachments/assets/cadafb70-f796-456d-bfd9-e88704e7132c |
|
| 6 | 6 | ||
| 7 | - | ## Features |
|
| 8 | - | ||
| 9 | - | - Single binary for web server and TUI |
|
| 10 | - | - Create snippets and share on the web |
|
| 11 | - | - Raw output for CLI tools — `curl`, `wget`, and `httpie` get plain text automatically |
|
| 12 | - | - Interactive TUI with authenticated access for snippet management |
|
| 13 | - | - Minimal, fast, and low memory consumption |
|
| 14 | - | ||
| 15 | 7 | ## Quickstart |
|
| 16 | 8 | ||
| 17 | - | **1. Install** |
|
| 18 | - | ||
| 19 | - | Install via the [releases](https://github.com/stevedylandev/sipp/releases) page, or directly with `cargo` |
|
| 20 | - | ||
| 21 | 9 | ```bash |
|
| 22 | 10 | cargo install sipp-so |
|
| 23 | - | ``` |
|
| 24 | - | ||
| 25 | - | To confirm it was installed correctly run the following |
|
| 26 | - | ||
| 27 | - | ```bash |
|
| 28 | 11 | sipp --help |
|
| 29 | 12 | ``` |
|
| 30 | 13 | ||
| 31 | - | **2. Start Server** |
|
| 32 | - | ||
| 33 | - | For demo purposes you can run this locally, but ideally this would be run in a deployment server with a proper ENV setup with your admin key. |
|
| 14 | + | Start a server and create a snippet: |
|
| 34 | 15 | ||
| 35 | 16 | ```bash |
|
| 36 | 17 | sipp server --port 3000 |
|
| 37 | 18 | ``` |
|
| 38 | - | ||
| 39 | - | **3. Create a Snippet** |
|
| 40 | - | ||
| 41 | - | You can either open up `http://localhost:3000` and create a snippet in a web browser, or use the TUI. In the same directory, open a new terminal window and use |
|
| 42 | 19 | ||
| 43 | 20 | ```bash |
|
| 44 | 21 | # Path to file |
|
| 45 | 22 | sipp path/to/file.rs |
|
| 46 | 23 | ||
| 47 | - | # Or use the interactive tui |
|
| 24 | + | # Or use the interactive TUI |
|
| 48 | 25 | sipp |
|
| 49 | 26 | ``` |
|
| 50 | 27 | ||
| 51 | - | ## Demo Instance |
|
| 28 | + | ## Overview |
|
| 52 | 29 | ||
| 53 | - | A small instance running at [sipp.so](https://sipp.so) that can be used for testing and demo purposes. |
|
| 30 | + | A single binary for code sharing with a web server and interactive TUI. A few highlights: |
|
| 54 | 31 | ||
| 55 | - | ```bash |
|
| 56 | - | sipp -r https://sipp.so |
|
| 57 | - | ``` |
|
| 32 | + | - Create snippets and share on the web |
|
| 33 | + | - Raw output for CLI tools — `curl`, `wget`, and `httpie` get plain text automatically |
|
| 34 | + | - Interactive TUI with authenticated access for snippet management |
|
| 35 | + | - Minimal, fast, and low memory consumption |
|
| 58 | 36 | ||
| 59 | - | >[!WARNING] |
|
| 60 | - | >All snippets created here are public and might be deleted at any time; host your own instance with your own API key for personal use! |
|
| 37 | + | > [!WARNING] |
|
| 38 | + | > A small demo instance runs at [sipp.so](https://sipp.so). All snippets created there are public and might be deleted at any time; host your own instance with your own API key for personal use! |
|
| 61 | 39 | ||
| 62 | - | ## Install |
|
| 40 | + | ## Usage |
|
| 63 | 41 | ||
| 64 | - | Sipp can be installed several ways |
|
| 42 | + | ### Install |
|
| 65 | 43 | ||
| 66 | - | ### Releases |
|
| 44 | + | Sipp can be installed several ways: |
|
| 45 | + | ||
| 46 | + | #### Releases |
|
| 67 | 47 | ||
| 68 | 48 | Visit the [releases](https://github.com/stevedylandev/sipp/releases) page and install through cURL script and other methods. |
|
| 69 | 49 | ||
| 70 | - | ### Homebrew |
|
| 50 | + | #### Homebrew |
|
| 71 | 51 | ||
| 72 | 52 | ``` |
|
| 73 | 53 | brew install stevedylandev/tap/sipp-so |
|
| 74 | 54 | ``` |
|
| 75 | 55 | ||
| 76 | - | ### Cargo |
|
| 56 | + | #### Cargo |
|
| 77 | 57 | ||
| 78 | 58 | ```bash |
|
| 79 | 59 | cargo install sipp-so |
|
| 80 | 60 | ``` |
|
| 81 | - | ||
| 82 | - | ## Usage |
|
| 83 | 61 | ||
| 84 | 62 | ### CLI |
|
| 85 | 63 | ||
| 164 | 142 | ||
| 165 | 143 | #### Local Access |
|
| 166 | 144 | ||
| 167 | - | If you are running `sipp` in the same directory as the `sipp.sqlite` file created by the server instance, the TUI will automatically access the datebase locally and you can edit it directly. |
|
| 145 | + | If you are running `sipp` in the same directory as the `sipp.sqlite` file created by the server instance, the TUI will automatically access the database locally and you can edit it directly. |
|
| 168 | 146 | ||
| 169 | 147 | #### Remote Access |
|
| 170 | 148 | ||
| 196 | 174 | | `q` | Quit | |
|
| 197 | 175 | | `?` | Toggle help | |
|
| 198 | 176 | ||
| 177 | + | ## Structure |
|
| 178 | + | ||
| 179 | + | ``` |
|
| 180 | + | sipp/ |
|
| 181 | + | ├── src/ |
|
| 182 | + | │ ├── main.rs # CLI argument parsing and entry point |
|
| 183 | + | │ ├── lib.rs # Library exports |
|
| 184 | + | │ ├── server.rs # Axum web server, routes, and templates |
|
| 185 | + | │ ├── tui.rs # Interactive terminal UI |
|
| 186 | + | │ ├── db.rs # SQLite database layer |
|
| 187 | + | │ ├── backend.rs # Local/remote backend abstraction |
|
| 188 | + | │ ├── config.rs # Config file management |
|
| 189 | + | │ └── highlight.rs # Syntax highlighting with custom themes |
|
| 190 | + | ├── templates/ # Askama HTML templates |
|
| 191 | + | │ ├── index.html # Snippet list |
|
| 192 | + | │ ├── snippet.html # Single snippet view |
|
| 193 | + | │ └── admin.html # Admin page |
|
| 194 | + | ├── static/ # Fonts, favicons, and styles |
|
| 195 | + | ├── Dockerfile |
|
| 196 | + | └── docker-compose.yml |
|
| 197 | + | ``` |
|
| 198 | + | ||
| 199 | 199 | ## Deployment |
|
| 200 | 200 | ||
| 201 | - | Since Sipp is a single binary it can be run in virtually any enviornment. |
|
| 201 | + | Since Sipp is a single binary it can be run in virtually any environment. |
|
| 202 | 202 | ||
| 203 | 203 | ### Railway |
|
| 204 | 204 | ||
| 205 | 205 | [](https://railway.com/deploy/Axcf_D?referralCode=JGcIp6) |
|
| 206 | 206 | ||
| 207 | - | ### Docker |
|
| 208 | - | ||
| 209 | - | A `Dockerfile` and `docker-compose.yml` are included in the repository. |
|
| 207 | + | ### Docker (recommended) |
|
| 210 | 208 | ||
| 211 | 209 | ```bash |
|
| 212 | 210 | # Using Docker Compose (recommended) |
|
| 217 | 215 | docker run -p 3000:3000 -e SIPP_API_KEY=your-secret-key -v sipp-data:/data sipp |
|
| 218 | 216 | ``` |
|
| 219 | 217 | ||
| 218 | + | ### Binary |
|
| 219 | + | ||
| 220 | + | ```bash |
|
| 221 | + | cargo build --release |
|
| 222 | + | ``` |
|
| 223 | + | ||
| 224 | + | The resulting binary at `./target/release/sipp` is self-contained with all assets embedded. Copy it to your server with your environment variables configured and run it directly. |
|
| 225 | + | ||
| 226 | + | ## License |
|
| 227 | + | ||
| 228 | + | [MIT](LICENSE) |
|