chore: readme updates 865b8b4d
Steve Simkins · 2026-05-21 19:24 10 file(s) · +59 −70
apps/bookmarks/README.md +2 −3
1 -
# bookmarks-go
1 +
# bookmarks
2 2
3 -
Go rewrite of [bookmarks](../bookmarks). Personal link saver organized by
4 -
category.
3 +
Personal link saver organized by category.
5 4
6 5
## Quickstart
7 6
apps/cellar/README.md +5 −5
1 -
# cellar-go
1 +
# cellar
2 2
3 -
Go rewrite of [cellar](../cellar). Wine tasting log with optional Anthropic
4 -
vision (label analysis) and per-wine RSS feed.
3 +
Wine tasting log with optional Anthropic vision (label analysis) and per-wine
4 +
RSS feed.
5 5
6 -
## Notes vs Rust version
6 +
## Notes
7 7
8 8
- Anthropic `/v1/messages` called via stdlib `net/http` (no SDK).
9 9
- Image processing uses stdlib `image` decode + JPEG re-encode at quality 75.
10 10
  EXIF orientation is not respected; rotate before upload if needed.
11 -
- Multipart upload limit kept at 10 MB.
11 +
- Multipart upload limit 10 MB.
12 12
13 13
See `.env.example` for config.
apps/easel/README.md +3 −3
1 -
# easel-go
1 +
# easel
2 2
3 -
Go rewrite of [easel](../easel). A daily painting from the Art Institute of
4 -
Chicago, persisted to SQLite. Past days browsable; future days unavailable.
3 +
Daily painting from the Art Institute of Chicago, persisted to SQLite. Past
4 +
days browsable; future days unavailable.
5 5
6 6
## Routes
7 7
apps/feeds/README.md +8 −5
1 -
# Feeds Go
1 +
# feeds
2 2
3 -
A Go rewrite of `apps/feeds` using mostly the Go standard library plus a SQLite driver and a feed parser.
3 +
Minimal RSS reader built on the Go standard library plus a SQLite driver and
4 +
a feed parser.
4 5
5 6
## Stack
6 7
14 15
## Run
15 16
16 17
```bash
17 -
cd apps/feeds-go
18 +
cd apps/feeds
18 19
go run .
19 20
```
20 21
23 24
## What it includes
24 25
25 26
- public feed list
26 -
- preview mode via `?url=` / `?urls=`
27 +
- preview mode via `?url=` / `?urls=` (single `?url=*.opml` fetches and
28 +
  previews the OPML feed list, up to 5 items per feed)
27 29
- admin login with cookie sessions
28 30
- add/remove subscriptions and categories
29 -
- OPML import
31 +
- OPML import (admin form + `POST /api/import/opml`) and export
32 +
  (`/feeds?format=opml`)
30 33
- JSON API
31 34
- background polling with ETag / Last-Modified
32 35
- embedded templates and static assets
apps/jotts/README.md +21 −28
1 -
# jotts-go
1 +
# jotts
2 +
3 +
Minimal markdown notes. Single binary with subcommands:
2 4
3 -
Go port of [jotts](../jotts): minimal markdown notes app.
5 +
- `jotts` — launch TUI (default, no args).
6 +
- `jotts tui [--remote URL --api-key KEY]` — TUI editor (Bubble Tea).
7 +
- `jotts server` — HTTP server (web UI + JSON API).
8 +
- `jotts auth` — save remote URL + API key to config.
9 +
- `jotts <file.md>` — upload file as a new note via the JSON API.
4 10
5 11
## Stack
6 12
7 13
- Go stdlib `net/http` + `html/template`
8 14
- `modernc.org/sqlite` (pure-Go SQLite, no CGO)
9 -
- `github.com/yuin/goldmark` (markdown rendering w/ strikethrough, tables, tasklists)
10 -
- Bubble Tea/Lip Gloss/Glamour for the TUI editor
11 -
- `github.com/pkg/browser` and `github.com/atotto/clipboard` for TUI browser/copy actions
15 +
- `github.com/yuin/goldmark` (markdown w/ strikethrough, tables, tasklists)
16 +
- Bubble Tea / Lip Gloss / Glamour for the TUI
17 +
- `github.com/pkg/browser` and `github.com/atotto/clipboard` for TUI actions
12 18
13 19
## Quickstart
14 20
21 +
Server:
22 +
15 23
```bash
16 24
cp .env.example .env
17 25
# edit .env with your password
26 +
go run . server
27 +
```
28 +
29 +
TUI:
30 +
31 +
```bash
18 32
go run .
19 33
```
20 34
29 43
| `COOKIE_SECURE` | HTTPS-only cookies | `false` |
30 44
| `JOTTS_API_KEY` | API key for `/api/notes` (unset = API disabled) | _(unset)_ |
31 45
32 -
## Structure
33 -
34 -
```
35 -
jotts-go/
36 -
├── main.go           # entrypoint
37 -
├── app.go            # App struct + page data types
38 -
├── db.go             # SQLite schema + queries (notes, sessions)
39 -
├── routes.go         # http.ServeMux routes
40 -
├── middleware.go     # session + API key middleware, cookies
41 -
├── handlers_web.go   # HTML form handlers
42 -
├── handlers_api.go   # JSON API handlers
43 -
├── markdown.go       # goldmark rendering
44 -
├── web.go            # template render, JSON, embedded static
45 -
├── util.go           # env, dotenv, short IDs, session tokens
46 -
├── templates/        # html/template pages
47 -
├── static/           # favicons, styles, og image
48 -
├── assets/           # darkmatter.css + Commit Mono fonts
49 -
├── Dockerfile
50 -
└── docker-compose.yml
51 -
```
52 -
53 46
## API
54 47
55 48
All endpoints require `x-api-key: $JOTTS_API_KEY` header.
63 56
## Build
64 57
65 58
```bash
66 -
CGO_ENABLED=0 go build -o jotts-go .
59 +
CGO_ENABLED=0 go build -o jotts .
67 60
```
68 61
69 -
Single ~10MB self-contained binary with all assets embedded.
62 +
Single self-contained binary with all assets embedded.
70 63
71 64
## Docker
72 65
apps/library/README.md +2 −3
1 -
# library-go
1 +
# library
2 2
3 -
Go rewrite of [library](../library). Personal book tracker with Google Books
4 -
search.
3 +
Personal book tracker with Google Books search.
5 4
6 5
## Quickstart
7 6
apps/og/README.md +2 −2
1 -
# og-go
1 +
# og
2 2
3 -
Go rewrite of [og](../og). Open Graph tag inspector for any URL.
3 +
Open Graph tag inspector for any URL.
4 4
5 5
## Quickstart
6 6
apps/posts/README.md +5 −6
1 -
# posts-go
1 +
# posts
2 2
3 -
Go rewrite of [posts](../posts). CMS blog with admin, pages, file uploads,
4 -
markdown rendering, RSS, zip import/export.
3 +
CMS blog with admin, pages, file uploads, markdown rendering, RSS, zip
4 +
import/export.
5 5
6 -
## Notes vs Rust version
6 +
## Notes
7 7
8 8
- Upload storage supports local filesystem (`UPLOADS_DIR`, default `uploads`)
9 9
  or Cloudflare R2 when `R2_BUCKET` and credentials are set.
10 -
- Markdown: `github.com/yuin/goldmark` with GFM + Footnotes (replaces
11 -
  pulldown-cmark).
10 +
- Markdown: `github.com/yuin/goldmark` with GFM + Footnotes.
12 11
- Zip via stdlib `archive/zip`. Upload limit 10 MB; import zip limit 50 MB.
13 12
- API: `GET /api/posts` and `GET /api/posts/{slug}` (permissive CORS).
14 13
apps/shrink/README.md +6 −6
1 -
# shrink-go
1 +
# shrink
2 2
3 -
Go rewrite of [shrink](../shrink). JPEG compression + resize via stdlib `image`
4 -
plus `golang.org/x/image/draw` for Catmull-Rom scaling.
3 +
JPEG compression + resize via stdlib `image` plus `golang.org/x/image/draw`
4 +
for Catmull-Rom scaling.
5 5
6 6
## Quickstart
7 7
24 24
- `GET /static/*` — embedded assets
25 25
- `/assets/*` — darkmatter css/fonts
26 26
27 -
## Notes vs Rust version
27 +
## Notes
28 28
29 -
JPEG EXIF metadata is preserved after recompression, with GPS data stripped to
30 -
match the Rust implementation. The 20 MB upload limit is preserved.
29 +
JPEG EXIF metadata is preserved after recompression, with GPS data stripped.
30 +
Upload limit 20 MB.
apps/sipp/README.md +5 −9
1 -
# sipp-go
1 +
# sipp
2 2
3 -
Go rewrite of [sipp](../sipp). Single binary with subcommands:
3 +
Code sharing. Single binary with subcommands:
4 4
5 5
- `sipp server [--host H] [--port P]` — web server (HTTP + admin + API +
6 6
  syntax highlight via `github.com/alecthomas/chroma/v2`).
7 -
- `sipp tui` — interactive TUI.
7 +
- `sipp tui` — interactive Bubble Tea TUI.
8 8
- `sipp auth` — save remote URL + API key to config.
9 9
- `sipp <file>` — upload a snippet to a remote instance via the JSON API.
10 10
11 -
## Notes vs Rust version
11 +
## Notes
12 12
13 -
- TUI uses Bubble Tea (Rust uses `ratatui` + `crossterm`).
14 -
- Syntax highlighting uses Chroma (replaces syntect). The darkmatter
15 -
  `.tmTheme` is not reused; Chroma's `monokai` style ships by default.
16 -
- Snippet schema and routes match the Rust app; existing SQLite files are
17 -
  compatible.
13 +
- Syntax highlighting uses Chroma with the `monokai` style by default.
18 14
19 15
## Quickstart
20 16