drop•it

drop.it

HTML, shared. Nothing more.

Self-hosted HTML only Bearer token Per-page subdomains Auto-expiry
scroll
01

What

dropit is a self-hosted drop for HTML files. Set a token. Drop a file. Get a dedicated subdomain URL. It expires when you say — or never, if you're an admin.

Format HTML only — extension, content-type, and markup are all checked
Auth Bearer token — named pairs via UPLOAD_TOKENS
TTL 1h  ·  6h  ·  24h  ·  48h  ·  7d  ·  forever (admin token required)
URLs Per-page subdomains — abc123.dropit.example.com
Max size 5 MB per file
Storage Local filesystem + SQLite — no cloud dependency
02

Web UI

01
Token
Enter your token

Paste your API token once. dropit validates it against /me and stores it in localStorage. No cookies. The connected username is shown inline.

02
Upload
Drop — it uploads immediately

Drag an HTML file onto the drop zone. Upload starts the moment you release — no button press. Click to browse instead. Non-HTML files are refused before anything is sent.

03
Result
Get a subdomain URL

The returned URL is a dedicated subdomain — origin-isolated, no path collisions, no JS required to view. Permanent until the TTL fires. Recent uploads appear in the history panel.

dropit.patilla.es
Drop your HTML file here
or click to browse  ·  HTML only
Release to upload
report.html detected
Uploading…
report.html
Live
abc123.dropit.patilla.es
expires in 24 hours
Idle
Drag over
Uploading
Success
03

API

For when the browser isn't the workflow. One endpoint. Full Swagger docs at dropit.patilla.es/docs.

request POST /upload
# ?ttl accepts seconds or "forever"
curl -s -X POST \
  "https://dropit.patilla.es/upload?ttl=86400" \
  -H "Authorization: Bearer $DROPIT_TOKEN" \
  -F "file=@report.html"
response 200 OK
{
  "url": "https://abc123.dropit.patilla.es",
  "expires_at": "2026-05-29T14:00:00Z"
}

TTL shortcuts:   3600 (1h)  ·  21600 (6h)  ·  86400 (24h)  ·  172800 (48h)  ·  604800 (7d)  ·  "forever" (admin token required)

04

Claude Code skill

One command. /dropit resolves files, prompts for TTL, uploads, and returns the URL — without leaving your terminal.

claude — ~/projects/myapp
/dropit report.html
TTL: 24h   7d   1h   forever
Uploading report.html
https://abc123.dropit.patilla.es (expires in 24h)
File resolution
Single file, glob (docs/*.html), or directory — top-level .html only
Token
Sources ~/.env for DROPIT_TOKEN — fails early if unset
Install
~/.claude/skills/dropit/SKILL.md — via dotfiles
Output
Subdomain URL per file, ready to paste
05

Self-hosting

Docker image for amd64 and arm64. SQLite, local storage, one process — no external services required. Requires a wildcard DNS record and SSL cert for per-page subdomains.

quick start docker
docker run -d \
  -e UPLOAD_TOKENS="alice:her-token,bob:his-token" \
  -e BASE_URL="https://dropit.example.com" \
  -e CONTENT_DOMAIN="dropit.example.com" \
  -v ./data:/app/data \
  -p 8000:8000 \
  ghcr.io/patillacode/dropit:latest
Variable Description Default
UPLOAD_TOKENS name:token pairs, comma-separated — one per user required
BASE_URL Your public domain — used in API responses required
CONTENT_DOMAIN Wildcard subdomain domain — *.content_domain must resolve to your server required
ADMIN_TOKEN Enables admin panel and "forever" TTL optional
MAX_UPLOAD_SIZE Max file size in bytes 5 242 880
ALLOWED_TTLS Comma-separated list of valid TTL values 1h,6h,24h,48h,7d
DEFAULT_TTL Fallback TTL when none is specified 24h