chore: update og images and docs 832ed794
Steve · 2026-05-25 15:14 14 file(s) · +92 −6
README.md +1 −0
20 20
| [**Bookmarks**](apps/bookmarks) | Minimal link saver with categories and JSON API | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/DZfr5P?referralCode=JGcIp6) |
21 21
| [**Library**](apps/library) | Minimal book tracker with Google Books search | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/tepdeI?referralCode=JGcIp6) |
22 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/0DpuRE?referralCode=JGcIp6) |
23 +
| [**Blobs**](apps/blobs) | Minimal web browser for S3-compatible blob storage | [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/3CH6O6?referralCode=JGcIp6) |
23 24
24 25
## Shared packages
25 26
apps/blobs/static/android-chrome-192x192.png (added) +0 −0

Binary file — no preview.

apps/blobs/static/android-chrome-512x512.png (added) +0 −0

Binary file — no preview.

apps/blobs/static/apple-touch-icon.png (added) +0 −0

Binary file — no preview.

apps/blobs/static/favicon-16x16.png (added) +0 −0

Binary file — no preview.

apps/blobs/static/favicon-32x32.png (added) +0 −0

Binary file — no preview.

apps/blobs/static/favicon.ico (added) +0 −0

Binary file — no preview.

apps/blobs/static/favicon.svg (deleted) +0 −5
1 -
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2 -
  <rect width="32" height="32" fill="#121113"/>
3 -
  <text x="50%" y="50%" text-anchor="middle" dominant-baseline="central"
4 -
        font-family="monospace" font-size="18" font-weight="700" fill="#ffffff">b</text>
5 -
</svg>
apps/blobs/static/icon.png (added) +0 −0

Binary file — no preview.

apps/blobs/static/og.png (added) +0 −0

Binary file — no preview.

apps/blobs/static/site.webmanifest (added) +1 −0
1 +
{"name":"blobs","short_name":"blobs","icons":[{"src":"/static/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/static/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#121113","background_color":"#121113","display":"standalone"}
apps/blobs/templates/base.html +9 −1
4 4
  <meta charset="UTF-8">
5 5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 6
  <title>{{block "title" .}}blobs{{end}}</title>
7 -
  <link rel="icon" href="/static/favicon.svg">
7 +
  <link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png">
8 +
  <link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png">
9 +
  <link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png">
10 +
  <link rel="manifest" href="/static/site.webmanifest">
8 11
  <meta name="theme-color" content="#121113" />
12 +
  <meta property="og:title" content="blobs">
13 +
  <meta property="og:type" content="website">
14 +
  <meta property="og:image" content="/static/og.png">
15 +
  <meta name="twitter:card" content="summary_large_image">
16 +
  <meta name="twitter:image" content="/static/og.png">
9 17
  <link rel="stylesheet" href="/assets/darkmatter.css">
10 18
  <link rel="stylesheet" href="/static/app.css">
11 19
</head>
docs/docs/pages/apps/blobs.mdx (added) +77 −0
1 +
# Blobs
2 +
3 +
Single-owner web browser for S3-compatible blob storage. Built for Cloudflare R2 but works with any S3-compatible endpoint (AWS S3, MinIO, Backblaze B2, etc).
4 +
5 +
- Single Go binary with embedded assets
6 +
- Password authentication with session cookies
7 +
- Lists every bucket the credentials can see
8 +
- Folder/file navigation with breadcrumbs
9 +
- Inline image thumbnails in folder view
10 +
- File detail page with metadata, presigned download link, and optional static public URL
11 +
- Upload (multi-file), replace, delete, and create folder actions
12 +
- SQLite for session storage
13 +
14 +
## Configure
15 +
16 +
### Environment Variables
17 +
18 +
| Variable | Description | Default |
19 +
|---|---|---|
20 +
| `BLOBS_PASSWORD` | Password for admin login | `changeme` |
21 +
| `BLOBS_DB_PATH` | SQLite database file path | `blobs.sqlite` |
22 +
| `HOST` | Server bind address | `127.0.0.1` |
23 +
| `PORT` | Server port | `3000` |
24 +
| `BLOBS_COOKIE_SECURE` | Enable HTTPS-only cookies | `false` |
25 +
| `BLOBS_MAX_UPLOAD_MB` | Single-shot upload cap in MB | `100` |
26 +
| `BLOBS_PRESIGN_TTL_SECONDS` | Presigned download URL lifetime in seconds | `3600` |
27 +
| `S3_ENDPOINT` | Generic S3 endpoint (omit for R2 shortcut) | _(unset)_ |
28 +
| `S3_REGION` | S3 region | `auto` |
29 +
| `S3_ACCESS_KEY_ID` | Access key ID | _(unset)_ |
30 +
| `S3_SECRET_ACCESS_KEY` | Secret access key | _(unset)_ |
31 +
| `R2_ACCOUNT_ID` | Cloudflare account ID (enables R2 endpoint shortcut) | _(unset)_ |
32 +
| `R2_ACCESS_KEY_ID` | R2 access key ID (fallback for `S3_ACCESS_KEY_ID`) | _(unset)_ |
33 +
| `R2_SECRET_ACCESS_KEY` | R2 secret access key (fallback for `S3_SECRET_ACCESS_KEY`) | _(unset)_ |
34 +
| `BLOBS_PUBLIC_URLS` | Per-bucket public URL prefixes (`bucket=url,bucket=url`) | _(unset)_ |
35 +
36 +
Pick one credential style: generic S3 (`S3_ENDPOINT` + `S3_ACCESS_KEY_ID` + `S3_SECRET_ACCESS_KEY`) or Cloudflare R2 (`R2_ACCOUNT_ID` + `S3_ACCESS_KEY_ID` + `S3_SECRET_ACCESS_KEY`). When a bucket appears in `BLOBS_PUBLIC_URLS`, the detail page surfaces a permanent public URL alongside the presigned link.
37 +
38 +
## Deploy
39 +
40 +
### Railway
41 +
42 +
The easiest way to deploy Blobs is with the one-click Railway template. See the [Deploying with Railway](/deploy-railway) guide for a walkthrough of the process. Blobs requires `BLOBS_PASSWORD` and either the `S3_*` or `R2_*` credentials to be set during the configure step.
43 +
44 +
[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/3CH6O6?referralCode=JGcIp6)
45 +
46 +
### Docker
47 +
48 +
```bash
49 +
cd apps/blobs
50 +
cp .env.example .env
51 +
# Edit .env with your password and S3/R2 credentials
52 +
docker compose up -d
53 +
```
54 +
55 +
This will start Blobs on port `3000` with a persistent volume for the SQLite session database.
56 +
57 +
### Binary
58 +
59 +
Install with Homebrew:
60 +
61 +
```bash
62 +
brew install stevedylandev/tap/blobs
63 +
```
64 +
65 +
Or grab a prebuilt binary from the [releases page](https://github.com/stevedylandev/andromeda/releases?q=blobs&expanded=true).
66 +
67 +
You can also build from source:
68 +
69 +
```bash
70 +
cd apps/blobs && go build .
71 +
```
72 +
73 +
The resulting binary is self-contained with all assets embedded. Copy it to your server with a configured `.env` file and run it directly.
74 +
75 +
## Use
76 +
77 +
Log in at `/login` with your configured password. The buckets page lists every bucket your credentials can see. Click into a bucket to browse folders and files, upload new objects, replace or delete existing ones, and create folder markers. The file detail page surfaces metadata plus a presigned download URL (expires after `BLOBS_PRESIGN_TTL_SECONDS`) and, if configured via `BLOBS_PUBLIC_URLS`, a permanent public URL.
docs/vocs.config.ts +4 −0
41 41
      text: 'Apps',
42 42
      items: [
43 43
        {
44 +
          text: 'Blobs',
45 +
          link: '/apps/blobs',
46 +
        },
47 +
        {
44 48
          text: 'Bookmarks',
45 49
          link: '/apps/bookmarks',
46 50
        },