| 1 | # Andromeda |
| 2 | |
| 3 |  |
| 4 | |
| 5 | A collection of minimal, self-hosted web apps. Each app compiles to a single |
| 6 | Go binary that embeds its templates and static assets and stores data in |
| 7 | SQLite. |
| 8 | |
| 9 | ## Apps |
| 10 | |
| 11 | | App | Description | Deploy | |
| 12 | |---|---|---| |
| 13 | | [**Sipp**](apps/sipp) | Minimal code sharing with web UI | [](https://railway.com/deploy/andromeda-sipp) | |
| 14 | | [**Feeds**](apps/feeds) | Minimal RSS reader with OPML import/export and a JSON API | [](https://railway.com/deploy/andromeda-feeds) | |
| 15 | | [**Jotts**](apps/jotts) | Minimal markdown notes app | [](https://railway.com/deploy/andromeda-jotts) | |
| 16 | | [**OG**](apps/og) | Open Graph tag inspector | [](https://railway.com/deploy/andromeda-og) | |
| 17 | | [**Shrink**](apps/shrink) | Image compression and resizing | [](https://railway.com/deploy/andromeda-shrink) | |
| 18 | | [**Cellar**](apps/cellar) | Minimal wine collection tracker | [](https://railway.com/deploy/andromeda-cellar) | |
| 19 | | [**Posts**](apps/posts) | Minimal CMS blog with admin interface | [](https://railway.com/deploy/andromeda-posts) | |
| 20 | | [**Bookmarks**](apps/bookmarks) | Minimal link saver with categories and JSON API | [](https://railway.com/deploy/andromeda-bookmarks) | |
| 21 | | [**Library**](apps/library) | Minimal book tracker with Google Books search | [](https://railway.com/deploy/andromeda-library) | |
| 22 | | [**Easel**](apps/easel) | Daily public-domain painting from the Art Institute of Chicago | [](https://railway.com/deploy/andromeda-easel) | |
| 23 | | [**Blobs**](apps/blobs) | Minimal web browser for S3-compatible blob storage | [](https://railway.com/deploy/andromeda-blobs) | |
| 24 | |
| 25 | ## Shared packages |
| 26 | |
| 27 | Under `pkg/`, each its own Go module: |
| 28 | |
| 29 | | Package | Description | |
| 30 | |---|---| |
| 31 | | `pkg/web` | HTTP helpers (embedded assets, JSON, render, redirect) | |
| 32 | | `pkg/auth` | Sessions store, password/api-key verification, short-id | |
| 33 | | `pkg/config` | env + `.env` loading helpers | |
| 34 | | `pkg/darkmatter` | Embedded CSS + fonts, mountable on any `http.ServeMux` | |
| 35 | |
| 36 | Each app references these via `replace` directives in its `go.mod`, so the |
| 37 | source tree is fully self-contained. |
| 38 | |
| 39 | ## Stack |
| 40 | |
| 41 | Stdlib `net/http` + `modernc.org/sqlite` (pure Go, no cgo) + `html/template` |
| 42 | + `embed.FS`. Permitted extras: `goldmark` (markdown), `gofeed` (RSS), |
| 43 | `golang.org/x/net/html` (HTML parsing), `golang.org/x/image/draw` (image |
| 44 | resize), `alecthomas/chroma` (highlight), `golang.org/x/crypto/bcrypt` |
| 45 | (passwords). |
| 46 | |
| 47 | ## Getting Started |
| 48 | |
| 49 | ```bash |
| 50 | cd apps/feeds && cp .env.example .env && go run . |
| 51 | cd apps/posts && cp .env.example .env && go run . |
| 52 | cd apps/sipp && go run . server --port 3000 |
| 53 | ``` |
| 54 | |
| 55 | Each app has its own README with detailed setup, environment variables, and |
| 56 | deployment instructions. |
| 57 | |
| 58 | ## License |
| 59 | |
| 60 | [MIT](LICENSE) |