feature/mincedpad-impl
Co-authored-by: Cursor <cursoragent@cursor.com>
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.
Description
Languages
Python
58.2%
Vue
31.5%
TypeScript
7.4%
CSS
1.4%
Dockerfile
0.9%
Other
0.6%