# MincedPad Self-hosted anonymous paste / file share: public wall, TTL, burn-after-read, and a password-gated admin panel. One Docker container serves the Vue SPA and FastAPI API on port **8080**. ## Deploy (Docker Compose) ```bash docker compose up -d --build ``` Open http://127.0.0.1:8080/ Admin: http://127.0.0.1:8080/admin Data (SQLite + uploads) persists in `./data` on the host (`DATA_DIR=/data` in the container). ## Environment | Variable | Default | Meaning | | --- | --- | --- | | `ADMIN_PASSWORD` | `changeme` | Admin login password | | `SECRET_KEY` | (dev default) | JWT signing secret — change in production | | `MAX_UPLOAD_MB` | `200` | Max upload size in megabytes | | `RATE_LIMIT_PER_SECOND` | `2` | Create/upload rate limit per IP | | `DATA_DIR` | `/data` | SQLite + uploads directory | Set these under `environment:` in `docker-compose.yml` (or via your orchestrator). ## Mobile The UI is mobile-first (Element Plus responsive grid, full-width controls under 768px). Use a real phone or browser device mode for smoke checks after deploy. ## Local development **API** ```bash cd backend python -m venv ../.venv && source ../.venv/bin/activate pip install -r requirements.txt DATA_DIR=../data PYTHONPATH=. uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload ``` **Frontend** (proxies `/api` to `:8080`) ```bash cd frontend npm install npm run dev ``` Production-style (API serves `frontend/dist`): ```bash cd frontend && npm run build cd ../backend && DATA_DIR=../data PYTHONPATH=. uvicorn app.main:app --port 8080 ``` ## License Use as you like for self-hosting.