Stockboy Steve 28292f746e fix: mock authClient.useSession in App.test.tsx
Pre-existing test failure from Phase 1 better-auth migration.
Dashboard calls authClient.useSession() which makes an unresolved
async call in test environment. Mock it to return null session
(isPending: false) so the unauthenticated UI renders correctly.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 19:55:11 +00:00

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> or fix/<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.

S
Description
CartSnitch frontend PWA — mobile-first grocery price intelligence
Readme 1 MiB
Languages
TypeScript 95.3%
Shell 2.9%
Dockerfile 0.5%
JavaScript 0.5%
HTML 0.5%
Other 0.3%