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)

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

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)

cd frontend
npm install
npm run dev

Production-style (API serves frontend/dist):

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.

S
Description
Self-hosted anonymous share notepad
Readme 109 KiB
Languages
Python 58.2%
Vue 31.5%
TypeScript 7.4%
CSS 1.4%
Dockerfile 0.9%
Other 0.6%