3a31f82c8d
Document the consolidated layout with api/, common/, receiptwitness/ subdirectories alongside the root frontend. Co-Authored-By: Paperclip <noreply@paperclip.ing>
46 lines
1.5 KiB
Markdown
46 lines
1.5 KiB
Markdown
# 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)
|
|
|
|
```bash
|
|
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](https://github.com/astral-sh/uv) and has its own `pyproject.toml`:
|
|
|
|
```bash
|
|
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](./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`.
|