Commit Graph

120 Commits

Author SHA1 Message Date
Barcode Betty 6903c7dde3 fix(lighthouse): use warn for preset audit assertions + add robots.txt
Per CTO guidance, override preset per-audit assertions to warn:
- errors-in-console: warn (browser dev errors, not prod blockers)
- network-dependency-tree-insight: warn (existing perf debt)
- robots-txt: warn (existing SEO gap)
- unused-javascript: warn (existing perf debt)

Add public/robots.txt so the robots-txt audit passes at warn level.
These are known gaps to address post-merge, not merge blockers.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-31 04:43:45 +00:00
Barcode Betty 2946ac8dc5 fix(lighthouse): install Chromium system deps via --with-deps
Playwright Chromium binary was missing libnspr4.so and other
system libraries. Use `npx playwright install --with-deps chromium`
to install Chromium along with all required system dependencies.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-31 04:43:45 +00:00
Barcode Betty 6717e105f4 fix(lighthouse): set LHCI_CHROME_PATH via runtime discovery
- Re-add Playwright Chromium install (LHCI needs a Chrome binary)
- Use `find` at runtime to locate Playwright's chrome binary:
  CHROME_PATH=$(find /home/runner/.cache/ms-playwright -name chrome ...)
- Pass to LHCI via LHCI_CHROME_PATH env var so LHCI does
  not try (and fail) to auto-download Puppeteer's Chromium

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-31 04:43:45 +00:00
Barcode Betty 01ea36c5aa fix(lighthouse): use staticDistDir, drop Playwright dependency
- lighthouserc.json: replace startServerCommand:npm-run-preview
  with staticDistDir:./dist so LHCI serves files directly
- CI workflow: remove Playwright/Chromium install step and
  LHCI_CHROME_PATH env var (LHCI bundles its own Puppeteer)
- LHCI now uses its built-in static server + bundled Chromium

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-31 04:43:45 +00:00
Stockboy Steve 0bb4b7d183 fix(lighthouse): set LHCI_CHROME_PATH and lower thresholds per CTO feedback
- Set LHCI_CHROME_PATH to Playwright chromium binary path so LHCI
  healthcheck can find Chrome
- Lower thresholds: performance=0.5, accessibility=0.7 (error), seo=0.7
- SEO threshold was missing, now added
2026-03-31 04:43:45 +00:00
Barcode Betty 7b9194a152 fix(ci): install Chromium via playwright instead of missing action
browser-actions/chromium@v3 does not exist. Switch to using
npm install -g playwright && npx playwright install chromium.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-31 04:43:45 +00:00
Barcode Betty ca8cf2a80a fix(ci): install Chromium before running Lighthouse CI
lhci autorun requires Chrome to be present on the runner. This was
causing the lighthouse job to fail with "Chrome installation not found".

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-31 04:43:45 +00:00
cartsnitch-engineer[bot] 5bb0a5817b feat(ci): add Lighthouse CI performance checks 2026-03-31 04:43:45 +00:00
cartsnitch-engineer[bot] 2444219f75 feat(ci): add Lighthouse CI configuration 2026-03-31 04:43:45 +00:00
Barcode Betty c707caea41 fix: use same-origin default for auth URL instead of localhost
Avoids ERR_CONNECTION_REFUSED in deployed environments where
VITE_AUTH_URL is not set at build time. Empty-string fallback
routes auth requests to same origin, which the HTTPRoute forwards
to the auth service.

cc @cpfarhood

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-31 04:43:45 +00:00
cartsnitch-engineer[bot] 30d670a257 feat(ci): add auth image tag update to deploy-dev (#57)
Add build-and-push-auth job dependency and tag update to deploy-dev:
- build-and-push-auth: add outputs.calver_tag for downstream jobs
- deploy-dev: needs both build-and-push and build-and-push-auth
- deploy-dev: set auth image tag in dev overlay via kustomize

Refs: CAR-138

Co-authored-by: Barcode Betty <barcode-betty@paperclip.ing>
Co-authored-by: Paperclip <noreply@paperclip.ing>
Co-authored-by: cartsnitch-ceo[bot] <269712056+cartsnitch-ceo[bot]@users.noreply.github.com>
v2026.03.30.3
2026-03-30 09:59:41 +00:00
cpfarhood-k8s[bot] cfa4d8fa91 test v2026.03.30.2 2026-03-30 00:50:51 +00:00
cartsnitch-engineer[bot] 39e8d5c9f9 fix(ci): install kustomize in deploy-dev job (#55)
* 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>
v2026.03.30
2026-03-30 00:28:20 +00:00
cartsnitch-ceo[bot] 44c475265e Merge pull request #56 from cartsnitch/feat/uat-seed-user
feat: add dedicated UAT seed user with known credentials
v2026.03.29.5
2026-03-29 21:57:26 +00:00
cartsnitch-ceo[bot] 8e1f61214c Merge branch 'main' into feat/uat-seed-user 2026-03-29 21:54:43 +00:00
cartsnitch-ceo[bot] fb1c5fb929 fix: align auth client basePath with server config
fix: align auth client basePath with server config
v2026.03.29.4
2026-03-29 21:48:27 +00:00
Barcode Betty 75be08ccf3 feat: add dedicated UAT seed user with known credentials
Add guaranteed UAT test user (uat@cartsnitch.com / CartSnitch-UAT-2026!)
seeded via Better-Auth bcrypt path. Idempotent — re-running the seed
skips the user if it already exists.

- Add 002_better_auth_tables Alembic migration (sessions, accounts,
  verifications tables + email_verified/image on users)
- Add bcrypt>=4.0,<6.0 to [seed] extra (CTO feedback: was bcrypt>=0.15,<1.0
  which matches zero installable versions)
- Fix account_id to use str(UAT_USER_ID) to match migration convention
  (CTO feedback: was using UAT_EMAIL which was inconsistent)
- Document credentials in common/README.md under Test Users

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 21:20:31 +00:00
Stockboy Steve 5596e22d0c fix: generate auth/package-lock.json for Docker build
The auth Dockerfile runs npm ci --omit=dev in the production stage
but there was no lock file, causing Docker build to fail.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 19:59:51 +00:00
Stockboy Steve f45a49059e 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
Stockboy Steve 47ba602b02 fix: remove unused data destructuring in Login/Register
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 19:50:11 +00:00
Stockboy Steve 5b12625e3f fix: sync package-lock.json with package.json (add better-auth deps)
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 19:45:47 +00:00
Stockboy Steve d7a4086647 Merge origin/main into feature/better-auth - resolve ci.yml conflict
Keep both build-and-push-auth (Phase 1 auth migration) and
deploy-dev (main CI addition) jobs as they are independent.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 19:38:53 +00:00
cartsnitch-ceo[bot] b43ec1fb9b fix(ci): add owner and repositories params to GitHub App token for cross-repo infra access
fix(ci): add owner and repositories params to GitHub App token for cross-repo infra access
v2026.03.29.3
2026-03-29 19:33:33 +00:00
Flea Flicker 129f0adc96 fix(ci): add owner and repositories params to GitHub App token for cross-repo infra access
The deploy-dev job fails because actions/create-github-app-token@v1 defaults to
the current repository. Adding owner + repositories scopes the token to include
cartsnitch/infra so the subsequent checkout step succeeds.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 19:01:40 +00:00
Barcode Betty 587d444773 fix: align auth client basePath with server config
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 18:53:35 +00:00
cartsnitch-engineer[bot] ea789378dd ci: remove trigger-uat job from cartsnitch workflow
Merged by CEO (Coupon Carl) after QA + CTO approval. Removes dead trigger-uat CI job. Part of CAR-115 / CAR-117.
v2026.03.29.2
2026-03-29 12:22:20 +00:00
cartsnitch-ceo[bot] 2f096c985a Merge pull request #50 from cartsnitch/feat/deploy-dev-uat-trigger
feat(ci): add deploy-dev and trigger-uat jobs
v2026.03.29
2026-03-29 03:35:29 +00:00
Stockboy Steve ad218c07ec fix(ci): fix trigger-uat JSON data construction
Use --data-raw with properly formatted multi-line JSON instead of
a single-line escaped -d string. This ensures newlines in the
description are correctly interpreted.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 02:52:21 +00:00
Barcode Betty fff9f6f63a feat(ci): add deploy-dev and trigger-uat jobs
Add deploy-dev job to update the dev overlay image tag in cartsnitch/infra
via kustomize after a successful main build. Add trigger-uat job to create
a Paperclip UAT issue assigned to Rollback Rhonda after dev deploy succeeds.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-29 02:31:04 +00:00
cartsnitch-ceo[bot] b0ea4767b6 Add shrinkflation consumer FAQ for April 1 series launch
Merging approved PR #39. All gates passed: QA (Checkout Charlie), UAT (Rollback Rhonda), CTO (Savannah Savings). cc @cpfarhood
v2026.03.28.6
2026-03-28 14:54:32 +00:00
cartsnitch-engineer[bot] c1778074e3 Merge pull request #42 from cartsnitch/content/launch-marketing-pages
Add launch marketing content pages for April 24 beta
v2026.03.28.5
2026-03-28 10:32:15 +00:00
Savannah Savings 5de258220e ci: add auth service Docker build to CI pipeline
The auth Deployment in cartsnitch/infra (PR #83) references
ghcr.io/cartsnitch/auth:latest, but no CI job builds that image.
Add a build-and-push-auth job that builds auth/Dockerfile and pushes
to ghcr.io/cartsnitch/auth with the same CalVer + sha tagging scheme.

Fixes the ImagePullBackOff blocker when FluxCD reconciles the auth
Deployment in cartsnitch-dev.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-28 10:28:17 +00:00
cartsnitch-engineer 003c62da3e Remove unverified 'thousands of products' claim from shrinkflation FAQ
Follows PR #42 precedent: replace unverified quantity claim with factual 'tracked products' language. Requested by CTO on PR #39.
2026-03-28 10:06:13 +00:00
Coupon Carl 57ce4315a1 fix: fail fast if BETTER_AUTH_SECRET is not set
Remove hardcoded fallback secret that allowed sessions to be
signed with a well-known value if the env var was unset.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-28 10:03:39 +00:00
Barcode Betty 7426ff1909 fix: address CEO review feedback on PR #42
- stores.md: replace "secure loyalty program integration" with honest
  description of automated scraper pulling from store loyalty portals
- privacy.md: replace all "loyalty program" / "read-only connection"
  language with accurate description of automated scraper architecture
- how-it-works.md: describe scraper architecture honestly; clarify
  USDA FoodData Central is historical baseline reference only, not
  part of live tracking; remove "(yet)" from receipt statement

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-28 09:26:34 +00:00
Coupon Carl 782448a54a feat: migrate authentication to Better-Auth (Phase 1)
Replace hand-rolled JWT auth with Better-Auth session-based authentication.

- Scaffold auth/ Node.js service with Better-Auth, bcrypt password compat,
  Postgres adapter mapped to existing users table
- Add Alembic migration (002) creating sessions, accounts, verifications
  tables and migrating password hashes to accounts table
- Update FastAPI auth dependency to validate sessions via shared DB
  (supports both cookie and Bearer token)
- Remove registration/login/refresh endpoints from API gateway (now
  handled by Better-Auth service)
- Update frontend to use better-auth/react client with httpOnly cookies
  (no tokens in localStorage or memory)
- Rewrite auth store, Login, Register, Dashboard, Settings, ProtectedRoute
  to use session-based auth
- Update all tests to create sessions directly in DB instead of JWT tokens

Resolves CAR-27
See plan: CAR-26#document-plan

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-28 04:46:10 +00:00
cartsnitch-engineer[bot] b9a66dfc8b fix: remove unverified 'thousands of products' claim from blog post
Removes quantity qualifier per QA review comment on PR #42.
Pre-beta coverage is not yet verified.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-28 03:48:22 +00:00
Barcode Betty 7a1267de79 fix: remove unverified "thousands of products" claim from press-kit.md
Removes quantity qualifier from two instances since pre-beta coverage
is not verified. per QA and CEO review comments on PR #42.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-28 03:40:41 +00:00
cartsnitch-engineer[bot] 4415c56a53 Add CartSnitch vs Flipp SEO comparison article
SEO comparison article targeting CartSnitch vs Flipp queries. Math verified, no fabricated citations, feature statuses accurate. CTO + CEO approved.
v2026.03.28.4
2026-03-28 03:30:26 +00:00
Barcode Betty da8b413f76 Fix content issues flagged by CEO and QA (PR #42 review)
Critical fixes:
- stores.md: Correct supported retailers to Meijer, Kroger, Target.
  Remove Safeway (never scoped). Replace named Coming Soon list with
  generic demand-based evaluation language.
- privacy.md: Replace all OAuth/API claims with accurate language
  describing read-only headless browser access to loyalty portals.
- about.md: Remove "price gouging on our roadmap" claim.
  Clarify USDA FoodData Central is reference data only, not a source
  of price data.
- blog/price-gouging-vs-shrinkflation.md: Remove roadmap claim.
  Remove implication that price gouging detection is coming.
- methodology.md: Fix cereal example math — 16.2% → 16.1%.
  Use raw values per the stated formula. Clarify USDA FoodData
  Central role for package sizing baselines only.
- how-it-works.md: Correct retailers. Remove "(yet)" from receipt
  claim. Clarify USDA FoodData Central is reference data.

Important fixes:
- press-kit.md: Correct supported stores. Remove USDA FoodData Central
  from dollar-cost attribution — reattribute to CartSnitch analysis of
  manufacturer packaging data.
- app-store-listing.md: Remove "thousands of products" claims
  (pre-launch beta, quantity unverified).
- social/launch-day-posts.md: Remove "thousands of products" claim.
  Correct retailer list.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-28 03:28:42 +00:00
cartsnitch-ceo[bot] dd6a683b90 Merge PR #38: Add unit price explainer article
Add unit price explainer article for SEO
v2026.03.28.3
2026-03-28 03:27:45 +00:00
cartsnitch-ceo[bot] cf8e821bdc ci: proper Docker GHA cache + remove Docker Hub login (CAR-272, CAR-273)
ci: proper Docker GHA cache + remove Docker Hub login (CAR-272, CAR-273)
v2026.03.28.2
2026-03-28 03:24:24 +00:00
Chris Farhood c9be9324cf Merge pull request #48 from cartsnitch/feature/repo-consolidation
feat: consolidate api, common, receiptwitness into monorepo
v2026.03.28
2026-03-27 22:54:34 -04:00
Coupon Carl cc0957fc92 docs: update README and CLAUDE.md to reflect monorepo structure
Document the consolidated layout with api/, common/, receiptwitness/
subdirectories alongside the root frontend.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-28 02:25:07 +00:00
Coupon Carl f3a7b33093 Merge commit '342906c9d178923d462a08aec35e486703366eba' as 'receiptwitness' 2026-03-28 02:24:22 +00:00
Coupon Carl 342906c9d1 Squashed 'receiptwitness/' content from commit e8d374a
git-subtree-dir: receiptwitness
git-subtree-split: e8d374a89ed8978f429598e02d31b1c5963efe22
2026-03-28 02:24:22 +00:00
Coupon Carl b736e62d4f Merge commit '4cf6f91e954b770198578bcb8db5d98ac964bfed' as 'common' 2026-03-28 02:24:14 +00:00
Coupon Carl 4cf6f91e95 Squashed 'common/' content from commit 28b2939
git-subtree-dir: common
git-subtree-split: 28b2939037b5932ca5d5a6c734b292c012ac675f
2026-03-28 02:24:14 +00:00
Coupon Carl 27fe957074 feat: merge cartsnitch/api into api/ subdirectory
Consolidate API gateway service into monorepo.
Squashed from https://github.com/cartsnitch/api main (89bacb1).

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-28 02:24:02 +00:00
Deploy Debbie fc99e8a82e ci: replace no-cache with GHA cache + remove Docker Hub login (CAR-272, CAR-273)
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-25 07:14:05 +00:00