chore: refactor and unify readmes 961e12d3
Steve · 2026-04-02 22:26 4 file(s) · +169 −109
README.md +8 −8
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 | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/Axcf_D?referralCode=JGcIp6) |
12 +
| [**Feeds**](apps/feeds) | Minimal RSS reader with FreshRSS and OPML support | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/Ezvmhx?referralCode=JGcIp6) |
13 +
| [**Parcels**](apps/parcels) | Minimal package tracking (USPS) | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/HNQUs4?referralCode=JGcIp6) |
14 +
| [**Jotts**](apps/jotts) | Minimal markdown notes app | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/DLhUhH?referralCode=JGcIp6) |
15 +
| [**OG**](apps/og) | Open Graph tag inspector | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/OdXBt_?referralCode=JGcIp6) |
16 +
| [**Shrink**](apps/shrink) | Image compression and resizing | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/enYUFb?referralCode=JGcIp6) |
17 17
18 18
## Shared Crates
19 19
apps/feeds/README.md +60 −52
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
[![Deploy on Railway](https://railway.com/button.svg)](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)
apps/og/README.md +48 −5
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
[![Deploy on Railway](https://railway.com/button.svg)](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
apps/sipp/README.md +53 −44
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
[![Deploy on Railway](https://railway.com/button.svg)](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)