diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e4f0086 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,63 @@ +# Contributing to Bookmark + +Bookmark is an early-stage, fully open-source tool built for Books in Hand, +a nonprofit that keeps books out of landfills. It's still scaffolding — +there's no working end-to-end app yet, so the best contributions right now +are small, focused, and coordinated first. + +## Before You Start + +This project is young enough that priorities can shift quickly. Please open +an issue (or comment on an existing one) describing what you'd like to work +on before submitting a large pull request — it avoids duplicated effort and +makes sure the change fits the current phase of the build. + +See `CLAUDE.md` (also readable as `AGENTS.md`) in the repo root for full +architecture and design context, including what's in scope for the current +phase and what's intentionally deferred. + +## Ground Rules + +- **Deterministic where it matters.** Size-bucketing (small/medium/large) + feeds the nonprofit's tax and 501(c)(3) reporting. It must stay + geometry/visibility-based — never OCR, ML, or LLM-derived. Don't change + this without understanding why. +- **No cloud dependencies in the current phase.** Keep the intake pipeline + fully local. +- **Say what the mechanism actually is.** Use precise terms — "LLM", + "vision-LLM (VLM)", "OCR", "barcode decode" — rather than the generic + word "AI" in code, comments, docs, or UI copy. +- **Human review before publish.** Any future LLM/VLM-assisted output + (e.g. cover text extraction) is a draft for a human to approve, never + auto-published. + +## Development Workflow + +```bash +python -m venv .venv +.venv/bin/pip install -e ".[dev]" +.venv/bin/pytest -v +``` + +This project follows test-driven development — new modules should ship +with tests under `tests/` that don't require real camera hardware +(synthetic frames, mocked `cv2.VideoCapture`, `TestClient` for the API). + +## Commit Style + +Conventional-commit-style subjects: `feat:`, `fix:`, `docs:`, `chore:`, +`test:`, `refactor:`. Keep commits small and focused — one logical change +per commit. + +## Submitting Changes + +1. Fork the repo and create a branch for your change. +2. Make sure `pytest -v` passes. +3. Open a pull request describing what changed and why. +4. Be patient — this is a volunteer-maintained nonprofit project, so review + may take a few days. + +## Questions + +Open an issue — it's the best way to reach the maintainers and keeps +context visible for future contributors. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e683d52 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Books in Hand + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pyproject.toml b/pyproject.toml index dcf9d41..d3bcedc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,6 +3,7 @@ name = "bookmark" version = "0.1.0" description = "Book intake and checkout inventory system for Books in Hand" requires-python = ">=3.11" +license = "MIT" dependencies = [ "fastapi>=0.110", "uvicorn[standard]>=0.29",