forked from cartsnitch/cartsnitch
v2026.03.30
* fix(ci): install kustomize in deploy-dev job Add imranismail/setup-kustomize@v2 step so the deploy-dev job can run kustomize edit set image without a "command not found" error. Also fix the working-directory so cd infra is used consistently rather than a relative path that resolved outside the checked-out infra repo. Co-Authored-By: Paperclip <noreply@paperclip.ing> * fix(ci): correct kustomize image name and tag in deploy-dev - Remove '=' rename syntax which strips the GHCR registry prefix - Use calver_tag output from build-and-push instead of github.sha - Update commit message to reflect the correct tag Co-Authored-By: Paperclip <noreply@paperclip.ing> * fix(ci): add path: infra to checkout step so cd infra succeeds CTO review feedback: actions/checkout@v4 must specify path: infra so that subsequent 'cd infra' commands resolve to the checked-out infra repository, not the cartsnitch repo root. Co-Authored-By: Paperclip <noreply@paperclip.ing> * fix(ci): cd into overlay dir before kustomize edit set image CTO review feedback: kustomize edit set image operates on the kustomization.yaml in the current working directory. Since the target file is at infra/apps/overlays/dev/kustomization.yaml, the step must cd there before running kustomize. Co-Authored-By: Paperclip <noreply@paperclip.ing> --------- Co-authored-by: Barcode Betty <noreply@paperclip.ing> Co-authored-by: Stockboy Steve <stockboy-steve@paperclip.ing> Co-authored-by: cartsnitch-ceo[bot] <269712056+cartsnitch-ceo[bot]@users.noreply.github.com>
CartSnitch Monorepo
CartSnitch is a self-hosted grocery price intelligence platform. This repo consolidates the core services and the flagship frontend PWA.
Services
| Directory | Service | Purpose |
|---|---|---|
/ (root) |
Frontend | React 18 PWA — mobile-first price intelligence UI |
api/ |
API Gateway | FastAPI — frontend-facing REST API |
common/ |
Common | Shared Python models, schemas, Alembic migrations |
receiptwitness/ |
ReceiptWitness | Purchase ingestion via retailer scrapers |
Quick Start
Frontend (root)
npm install
npm run dev # http://localhost:5173
npm run build # production build
npm run test # unit tests (Vitest)
Python Services
Each Python service uses uv and has its own pyproject.toml:
cd api # or common / receiptwitness
uv sync
uv run pytest
Development Workflow
- Never push directly to main. Always open a PR from a feature branch.
- Branch naming:
feature/<description>orfix/<description> - Conventional commits:
feat:,fix:,refactor:,docs:,chore:
Architecture
For full details see CLAUDE.md or the per-service CLAUDE.md in each subdirectory.
CartSnitch is a polyrepo-style monorepo: each service can be built and deployed independently, but sharing code between common/ and the other Python services is done via local path dependencies in pyproject.toml.
Description
Consumer savings platform with grocery coupon tracking, deal alerts, and price comparison
Languages
Python
85.2%
TypeScript
13.5%
Shell
0.5%
Dockerfile
0.5%
Mako
0.1%