chore: readme updates
865b8b4d
10 file(s) · +59 −70
| 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 |
| 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. |
| 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 |
| 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 |
|
| 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 | ||
| 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 |
| 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 |
| 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 |
| 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. |
|
| 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 |