Introduce environment variables to globally and individually control background jobs: - `WARPBOX_JOBS_ENABLED` to toggle all background workers. - `WARPBOX_CLEANUP_ENABLED` to toggle the expired box cleanup job. - `WARPBOX_THUMBNAIL_ENABLED` to toggle the thumbnail generation job. Refactor background tasks into a dedicated `backend/libs/jobs` package, allowing jobs to be registered, scheduled, and conditionally run based on the new configuration flags. Additionally, update the default maximum upload size in `.env.example` to 16GB and document the new settings in the README.
Warpbox.dev
This repository contains the Go backend base for warpbox.dev, a self-hosted transfer-first file sharing application.
Run
./scripts/run/dev.sh
The default server listens on :8080.
Upload size limits are configured in megabytes through WARPBOX_MAX_UPLOAD_SIZE_MB.
Fractions are supported, so 0.5Mb is 512 KiB and 1.5Mb is 1536 KiB.
Runtime data is configured with WARPBOX_DATA_DIR and defaults to ./data in the dev environment.
The dev script resolves that path from the repository root.
Background jobs are enabled with WARPBOX_JOBS_ENABLED=true. Individual jobs can be toggled with
WARPBOX_CLEANUP_ENABLED and WARPBOX_THUMBNAIL_ENABLED, and their schedules are configured with
WARPBOX_CLEANUP_EVERY and WARPBOX_THUMBNAIL_EVERY.
The basic admin console is available at /admin. Set WARPBOX_ADMIN_TOKEN and use that value to sign in.
For one-off Go commands, run them from the backend module:
cd backend
go run ./cmd/warpbox
Layout
backend/cmd/warpbox- main application entry point.backend/libs/config- environment-backed configuration.backend/libs/httpserver- server construction and route composition.backend/libs/handlers- HTTP handlers for pages, API, health, static files.backend/libs/jobs- background job registration and job loop definitions.backend/libs/middleware- request logging, recovery, security headers, gzip, request IDs.backend/libs/services- business logic boundaries, starting with upload limits.backend/libs/helpers- small reusable helpers.backend/libs/web- Go template renderer.backend/templates- server-rendered Go templates.backend/static/css,backend/static/js,backend/static/img,backend/static/fonts- public assets served from/static/.scripts/run/dev.sh- local development runner.scripts/env/dev.env.example- tracked development environment template.scripts/env/dev.env- local development environment, ignored by git.
Stage 2 Operator Tools
/admin/login- token-based admin login./admin- overview metrics: boxes, files, storage, recent uploads, protected/expired boxes./admin/files- recent upload table with view and delete actions.- Expired boxes and boxes that have reached their download limit are cleaned on startup and then every
WARPBOX_CLEANUP_EVERYwhenWARPBOX_CLEANUP_ENABLED=true. - Missing image/video thumbnails are generated in a background worker every
WARPBOX_THUMBNAIL_EVERYwhenWARPBOX_THUMBNAIL_ENABLED=true.
Runtime Data
Warpbox keeps local runtime data under the configured data directory:
data/files/{box_id}/@each@{file_id}.ext- uploaded file contents.data/files/{box_id}/@thumb@{file_id}.jpg- generated previews where available.data/db/warpbox.bbolt- bbolt metadata database for boxes and file records.data/logs/{YYYY-MM-DD}.log- JSONL logs, one event per line.
Static Asset Policy
The static handler sets long-lived immutable caching for images, video, audio, and fonts, shorter caching for CSS/JS, and gzip compression for compressible responses.