Merge pull request #2 from stevedylandev/chore/update-readme-meta 0ad7c3d7
Update READMEs across repos
Steve Simkins · 2026-04-02 22:27 7 file(s) · +190 −142
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 +63 −60
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
107 +
## Structure
71 108
72 -
1. Make sure [Rust](https://www.rust-lang.org/tools/install) is installed
73 -
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
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
84 120
```
85 -
86 -
3. Run the dev server
87 -
88 -
```bash
89 -
cargo run
90 -
# Server running on http://localhost:3000
91 -
```
92 -
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 121
113 122
## Deployment
114 123
115 124
Since Feeds compiles to a single binary, deployment is straightforward on any platform.
116 125
117 -
### Docker
126 +
### Railway
118 127
119 -
1. Clone the repo
128 +
[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/Ezvmhx?referralCode=JGcIp6)
129 +
130 +
### Docker (recommended)
120 131
121 132
```bash
122 133
git clone https://github.com/stevedylandev/feeds
123 134
cd feeds
124 -
```
125 -
126 -
2. Build and run the Docker image
127 -
128 -
```bash
129 -
docker build -t feeds .
130 -
docker run -p 3000:3000 --env-file .env feeds
135 +
cp .env.sample .env
136 +
# Edit .env with your credentials
137 +
docker compose up -d
131 138
```
132 139
133 -
Or use `docker-compose`
140 +
### Binary
134 141
135 142
```bash
136 -
docker-compose up -d
143 +
cargo build --release
137 144
```
138 145
139 -
### Railway
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.
140 147
141 -
1. Fork the repo from GitHub to your own account
148 +
## License
142 149
143 -
2. Login to [Railway](https://railway.com) and create a new project
144 -
145 -
3. Select Feeds from your repos
146 -
147 -
4. Railway will auto-detect the Rust project and build it
150 +
[MIT](LICENSE)
apps/jotts/README.md +4 −0
59 59
60 60
## Deployment
61 61
62 +
### Railway
63 +
64 +
[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/DLhUhH?referralCode=JGcIp6)
65 +
62 66
### Docker (recommended)
63 67
64 68
```bash
apps/og/README.md +54 −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
14 +
```
15 +
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
11 46
```
12 47
13 -
The server starts on `http://localhost:3000` by default. Set the `PORT` env var to change it.
48 +
## Deployment
49 +
50 +
### Railway
51 +
52 +
[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/OdXBt_?referralCode=JGcIp6)
53 +
54 +
### Docker (recommended)
14 55
15 -
## Docker
56 +
```bash
57 +
git clone https://github.com/stevedylandev/og.git
58 +
cd og
59 +
docker compose up -d
60 +
```
61 +
62 +
### Binary
16 63
17 64
```bash
18 -
docker compose up --build
65 +
cargo build --release
19 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.
20 69
21 70
## License
22 71
apps/parcels/README.md +4 −0
62 62
63 63
## Deployment
64 64
65 +
### Railway
66 +
67 +
[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/HNQUs4?referralCode=JGcIp6)
68 +
65 69
### Docker (recommended)
66 70
67 71
```bash
apps/shrink/README.md +4 −0
45 45
46 46
## Deployment
47 47
48 +
### Railway
49 +
50 +
[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/enYUFb?referralCode=JGcIp6)
51 +
48 52
### Docker (recommended)
49 53
50 54
```bash
apps/sipp/README.md +53 −69
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 19
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 -
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
29 +
30 +
A single binary for code sharing with a web server and interactive TUI. A few highlights:
52 31
53 -
A small instance running at [sipp.so](https://sipp.so) that can be used for testing and demo purposes.
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
54 36
55 -
```bash
56 -
sipp -r https://sipp.so
57 -
```
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!
58 39
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!
40 +
## Usage
61 41
62 -
## Install
42 +
### Install
63 43
64 -
Sipp can be installed several ways
44 +
Sipp can be installed several ways:
65 45
66 -
### Releases
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
199 -
## Deployment
200 -
201 -
Since Sipp is a single binary it can be run in virtually any enviornment.
177 +
## Structure
202 178
203 -
### Systemd
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 +
```
204 198
205 -
Create a service file at `/etc/systemd/system/sipp.service`:
199 +
## Deployment
206 200
207 -
```ini
208 -
[Unit]
209 -
Description=Sipp snippet server
210 -
After=network.target
201 +
Since Sipp is a single binary it can be run in virtually any environment.
211 202
212 -
[Service]
213 -
ExecStart=/usr/local/bin/sipp server --port 3000 --host 0.0.0.0
214 -
Environment=SIPP_API_KEY=your-secret-key
215 -
WorkingDirectory=/var/lib/sipp
216 -
Restart=on-failure
203 +
### Railway
217 204
218 -
[Install]
219 -
WantedBy=multi-user.target
220 -
```
205 +
[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/Axcf_D?referralCode=JGcIp6)
221 206
222 -
```bash
223 -
sudo systemctl enable --now sipp
224 -
```
225 -
226 -
### Docker
227 -
228 -
A `Dockerfile` and `docker-compose.yml` are included in the repository.
207 +
### Docker (recommended)
229 208
230 209
```bash
231 210
# Using Docker Compose (recommended)
236 215
docker run -p 3000:3000 -e SIPP_API_KEY=your-secret-key -v sipp-data:/data sipp
237 216
```
238 217
239 -
### Railway
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
240 227
241 -
1. Fork this repo and connect your fork to [Railway](https://railway.app)
242 -
2. Set the environment variables `SIPP_API_KEY` and optionally `SIPP_AUTH_ENDPOINTS`
243 -
3. Add a [volume](https://docs.railway.com/guides/volumes) to your service and mount it at `/data`
244 -
4. Set `SIPP_DB_PATH` to `/data/sipp.sqlite` so the database persists across deploys
228 +
[MIT](LICENSE)