initial commit: Artifacto v0.1

Self-hosted HTML artifact publisher. Single Go binary, SQLite metadata,
HTML on disk. Features: password-protected artifacts, per-artifact expiration,
admin dashboard with view metrics (privacy-preserving daily-salt visitor hash,
sparklines, 30-day SVG chart, top referrers), rate-limited unlock endpoint.

Packaged as a Docker image (two-stage, CGO_ENABLED=0, pure-Go SQLite).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-22 15:45:57 +02:00
commit c7d7ee287c
30 changed files with 2223 additions and 0 deletions

39
README.md Normal file
View File

@@ -0,0 +1,39 @@
# Artifacto
Self-hosted drop-and-share for HTML artifacts. Paste HTML → get a link → share.
Single-binary Go service, SQLite metadata, HTML bodies on disk, behind a reverse proxy.
## Features
- Paste or upload HTML, auto-generated slug (or custom)
- Optional per-artifact password (bcrypt), rate-limited unlock
- Optional expiration (time or view-count)
- Admin dashboard with view counts, sparklines, per-artifact 30-day chart
- Privacy-preserving visitor hash (daily-rotated salt, no cookies on viewers)
- One container, one SQLite file, one data directory
## Quick start
```bash
cp .env.example .env # set ADMIN_PASSWORD + SESSION_SECRET
docker compose up -d
open http://localhost:3100
```
Then put a reverse proxy (Caddy, nginx, Traefik) in front for HTTPS.
## Configuration
| Env var | Default | Purpose |
|------------------|--------------------------------------|-------------------------------------|
| `ADMIN_PASSWORD` | — (required) | Admin login password |
| `SESSION_SECRET` | — (required, 32+ bytes hex) | Cookie HMAC key |
| `BASE_URL` | `http://localhost:3000` | Used when building share links |
| `DATA_DIR` | `/data` | SQLite DB + artifact files |
| `BIND_ADDR` | `:3000` | Listen address |
| `MAX_UPLOAD_MB` | `5` | Per-artifact upload cap |
| `LOG_LEVEL` | `info` | `info` or `debug` |
## License
MIT