5-char slugs over a 32-char alphabet are ~25 bits; brute-forceable at
HTTP speeds once the endpoint is public. 8 chars = 40 bits (~10^12
combinations), infeasible to scan within useful timescales. Existing
5-char slugs still resolve; only new artifacts use the longer form.
Login now fills the viewport (min-h-screen flex items-center/justify-center)
with the logo, "Artifacto" title, and tagline above the password form.
Drops the header/footer chrome on this page since there's nothing to link
to before sign-in.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop zone now has three explicit visual states: empty (default cloud +
instructions), ready (large file icon with a checkmark badge, filename in
big, size + click-to-replace + remove button, solid emerald border and
tinted background), and error (red icon + message, auto-clears after
2.5s). Covers both drag-drop and click-to-browse flows, validates size
client-side, and scales up slightly during dragover.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces the mascot with the sketched portrait screenshot, center-cropped
to square and masked to a circle with anti-aliased edges so the PNG itself
is rounded (not just CSS). Regenerates logo.png (256), apple-touch-icon
(180), and favicon-32 at the new proportions. Adds .DS_Store to gitignore.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bundles the artifacto mascot as /static/logo.png (256×256),
/static/favicon-32.png and /static/apple-touch-icon.png. Header
shows the logo as a small rounded avatar; browser tabs get the
favicon. Replaces the .keep placeholder.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Publish form now uses a single dashed drop area for .html uploads
(click-to-browse fallback included). Removes the paste-HTML textarea
since real artifacts always come from a file. Server-side multipart
handling is unchanged; the `file` form field already took precedence.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
When SSO_GATEWAY_SECRET is set and an incoming request carries both
X-Artifacto-Gateway (matching the secret) and X-Authentik-Username, the
admin middleware mints a session automatically so Authentik-authenticated
users skip the password form. Missing or wrong gateway header falls back
to the password-login flow, so peers that can reach the container
directly (bypassing the reverse proxy) cannot spoof Authentik identities.
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>