Essential session storage is required to sign in. Optional analytics remain off unless you allow them.
Take any small app and make it shippable: a multi-stage Dockerfile (small final image, non-root user, pinned base), a docker-compose for local dev with its database, and a CI workflow that runs lint + tests + build on every push and fails the build on any red. Document the one command to run it locally.
Multi-stage, non-root, pinned base, small final image; build is reproducible.
Lint, test, and build run on every push and actually block merges when red.
One documented command brings the app + db up locally.
No secrets baked into the image or committed; env via compose/CI secrets.
Use this README structure to make the work reviewable.
DevPath fetches a read-only, size-capped snapshot. Submitted code is never executed.
# Containerize and CI a web app ## Goal Take any small app and make it shippable: a multi-stage Dockerfile (small final image, non-root user, pinned base), a docker-compose for local dev with its database, and a CI workflow that runs lint + tests + build on every push and fails the build on any red. Document the one command to run it locally. ## Acceptance criteria - [ ] Dockerfile quality: Multi-stage, non-root, pinned base, small final image; build is reproducible. - [ ] CI gates: Lint, test, and build run on every push and actually block merges when red. - [ ] Local DX: One documented command brings the app + db up locally. - [ ] Secrets hygiene: No secrets baked into the image or committed; env via compose/CI secrets. ## Verification - [ ] Document installation and run commands. - [ ] Record automated checks and their exact commands. - [ ] Add representative output, screenshots, or a short demo where useful. - [ ] Confirm failure paths and known constraints. ## Decision log ### Decision title - Context: - Choice: - Alternatives considered: - Tradeoffs: ## Evidence - Link each rubric criterion to the file, test, or artifact that demonstrates it. ## Known limitations - List what is intentionally out of scope and what should be improved next.