README.md 3.2 K raw
1
# Andromeda
2
3
![cover](https://files.stevedylan.dev/andromeda-cover.png)
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 | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-sipp) |
14
| [**Feeds**](apps/feeds) | Minimal RSS reader with OPML import/export and a JSON API | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-feeds) |
15
| [**Jotts**](apps/jotts) | Minimal markdown notes app | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-jotts) |
16
| [**OG**](apps/og) | Open Graph tag inspector | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-og) |
17
| [**Shrink**](apps/shrink) | Image compression and resizing | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-shrink) |
18
| [**Cellar**](apps/cellar) | Minimal wine collection tracker | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-cellar) |
19
| [**Posts**](apps/posts) | Minimal CMS blog with admin interface | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-posts) |
20
| [**Bookmarks**](apps/bookmarks) | Minimal link saver with categories and JSON API | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-bookmarks) |
21
| [**Library**](apps/library) | Minimal book tracker with Google Books search | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-library) |
22
| [**Easel**](apps/easel) | Daily public-domain painting from the Art Institute of Chicago | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/andromeda-easel) |
23
| [**Blobs**](apps/blobs) | Minimal web browser for S3-compatible blob storage | [![Deploy on Railway](https://railway.com/button.svg)](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)