# Contributing to WarpBox WarpBox is a small Go application with server-rendered HTML, vanilla JavaScript, static CSS, local filesystem storage, and BadgerDB metadata. Keep changes boring, readable, and easy to review. ## Setup Requirements: - Go 1.23 or newer, matching `go.mod`. - No frontend toolchain. Do not add npm, Vite, React, TypeScript, Sass, Tailwind, or a JavaScript build step for cleanup work. Run the app: ```bash go run ./cmd run ``` Run on another address: ```bash go run ./cmd run --addr :3000 ``` ## Tests and Checks Run tests: ```bash ./test.sh ``` Run formatting, vet, and tests: ```bash ./check.sh ``` Both scripts honor `GO_BIN`: ```bash GO_BIN=/path/to/go ./check.sh ``` If a command cannot run in your environment, say why and include the command that should be run locally. ## Commit Style Use Conventional Commits: ```text type(scope): short imperative subject ``` Types: - `feat` user-visible feature - `fix` bug fix - `refactor` behavior-preserving code change - `test` tests only - `docs` documentation only - `style` formatting or CSS-only visual style when behavior unchanged - `chore` tooling, dependency, build, housekeeping - `perf` performance change - `ci` CI config Rules: - Keep subject at 72 characters or less, preferably 50 or less. - Use imperative mood. - Keep one concern per commit. - Make cleanup commits behavior preserving unless the subject says `fix`. - Mention tests run in the PR description or commit body when useful. Examples: ```text docs(contributing): add cleanup rules refactor(server): split upload handlers fix(config): reject negative expiry values ``` ## Code Review Expectations Reviews should focus on behavior, safety, and maintainability: - Confirm routes, environment variables, API response shapes, manifest fields, and storage layout remain compatible unless the change explicitly updates them. - Check that cleanup keeps behavior unchanged and is small enough to review. - Prefer narrow helpers and clear file ownership over clever abstraction. - Ask for tests when behavior changes or risk is not obvious. - Call out missing checks, unclear edge cases, concurrency risks, and security risks. ## PR Checklist Before opening or merging a PR: - Scope is limited to one concern. - Runtime behavior is unchanged for cleanup PRs. - Public routes are unchanged unless intentional. - Environment variables are unchanged unless intentional. - API response shapes are unchanged unless intentional. - Manifest JSON field names are unchanged unless intentional. - Storage directory layout is unchanged unless intentional. - No frontend build tooling was added. - Tests or checks run are listed. ## Coding Standards Summary - Go: small functions, clear errors, stable exported names, no unrelated package moves. - JavaScript: vanilla browser scripts, no build step, explicit state ownership, small modules when files are split. - CSS: keep shared styles shared, page styles page-scoped, avoid duplicated popup/window rules. - Templates: keep server-rendered HTML simple and routes stable. - Comments: explain behavior rules, edge cases, concurrency, security, or product choices. Do not restate obvious code. See [DEVELOPMENT.md](DEVELOPMENT.md) for cleanup rules.