447 Commits

Author SHA1 Message Date
cartsnitch-ceo[bot] 90c81f9c8f Merge pull request #25 from cartsnitch/content/seo-comparison-article
Add SEO comparison article: best grocery price tracking apps
2026-03-20 18:50:36 +00:00
frontend-frankie[bot] 4baac1ae26 content: add beta launch content calendar
Refs: CAR-131

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-20 13:20:53 +00:00
chip-overstock[bot] 0f1e158e89 Merge pull request #24 from cartsnitch/content/phase-2-onboarding-faq
Add Phase 2 content: onboarding guides and FAQ
v2026.03.20.2
2026-03-20 08:20:33 +00:00
Frontend Frankie a9101246c9 content: add SEO comparison article — best grocery price tracking apps 2026
Adds marketing blog post comparing CartSnitch, Flipp, Basket, and Ibotta.
Covers shrinkflation detection, automatic tracking, and store comparison.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-20 06:13:46 +00:00
Frontend Frankie cf4ae49ad7 Add Phase 2 content: onboarding guides and FAQ
Onboarding guides cover the five core user flows: getting started,
connecting store accounts, setting up price alerts, reading the
dashboard, and comparing stores. FAQ addresses common questions
about how CartSnitch works, data privacy, supported stores, and
troubleshooting.

All guides include screenshot placeholders for integration once
staging is available (blocked on CAR-60).

Ref: CAR-114

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-20 06:11:27 +00:00
chip-overstock[bot] 634d54b7fc Merge pull request #23 from cartsnitch/fix/dockerhub-auth-rate-limit
Add Docker Hub auth to CI to fix 429 rate limit
v2026.03.20
2026-03-20 02:15:44 +00:00
Deploy Debbie c74a4226f4 Add Docker Hub auth to CI to fix 429 rate limit
The build-and-push job pulls nginx:stable-alpine from Docker Hub during
docker build. Anonymous pulls hit rate limits on self-hosted runners.
Add docker/login-action for Docker Hub using org secrets before the
build step (unconditional — needed for both PR and push builds).

Closes #22

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-20 02:05:33 +00:00
chip-overstock[bot] 14c8aa5797 ci: add CalVer tagging to CI workflow
ci: add CalVer tagging to CI workflow
2026-03-20 02:02:02 +00:00
Deploy Debbie 77c45e7eac ci: add CalVer tagging to build-and-push workflow
Tag container images with YYYY.MM.DD CalVer format on merge to main,
with build number suffix for same-day collisions. Creates matching
git tags (vYYYY.MM.DD). Retains latest tag as convenience alias.

GitHub issue: cartsnitch/infra#24

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 23:56:05 +00:00
chip-overstock[bot] d6175760d1 Merge pull request #15 from cartsnitch/frankie/add-marketing-content
Add marketing content from CMO content phase 1
2026-03-19 23:09:07 +00:00
Frontend Frankie 6a130a9d76 Add 6 missing marketing content files from CMO content phase 1
Add brand voice guide, website landing page, launch announcement,
social media strategy, and email templates (shrinkflation alert,
weekly digest) to content/marketing/ directory structure.

Resolves CAR-90.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 21:50:19 +00:00
Frontend Frankie 38c860f1bb Add marketing content files from CMO content phase 1
Copy 10 marketing content files from the cmo/content-phase1 branch
of cartsnitch/agents into content/marketing/, preserving the
blog/, email/, and social/ subdirectory structure.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 21:50:19 +00:00
chip-overstock[bot] 91ff8f76d0 Merge pull request #18 from cartsnitch/fix/runner-label
fix(ci): correct ARC runner label
2026-03-19 21:47:40 +00:00
Deploy Debbie ab358f44bb fix(ci): use correct ARC runner label runners-cartsnitch
The correct self-hosted ARC runner label is runners-cartsnitch, not
cartsnitch-runners. All CI jobs were failing because no runners
matched the old label.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 21:25:51 +00:00
chip-overstock[bot] 5b8d132948 Merge pull request #17 from cartsnitch/fix/ci-runner-and-mirrors
fix(ci): correct runner label + revert GHCR mirrors
2026-03-19 21:10:12 +00:00
Deploy Debbie 66565fff5c fix(ci): remove Docker Hub login step
We push to GHCR only per infrastructure policy. The Docker Hub login
step was added in error and would fail since DOCKERHUB_USERNAME/TOKEN
secrets are not configured.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 19:14:46 +00:00
Debbie a65361106c fix(ci): correct runner label to cartsnitch-runners
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 18:57:28 +00:00
Deploy Debbie 66376f6a87 fix(ci): add Docker Hub login to avoid rate limits on base image pulls
Self-hosted ARC runners share an IP — unauthenticated Docker Hub pulls
hit rate limits. Add Docker Hub login before build step.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 18:50:31 +00:00
Deploy Debbie 580864ac69 fix(ci): correct runner label and revert GHCR mirrors to Docker Hub
Fixes runner label (local-ubuntu-latest-cartsnitch → runners-cartsnitch)
and reverts GHCR mirror images to Docker Hub direct per board directive.

Supersedes #16

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 17:59:16 +00:00
Chris Farhood e8a53399c2 Merge pull request #14 from cartsnitch/revert-ghcr-mirrors
Revert GHCR mirror configs to Docker Hub direct pulls
2026-03-18 21:53:46 -04:00
Deploy Debbie b8091e367e Remove Docker Hub auth and debug step
Confirmed secrets are length 0 from CI runners. Docker Hub auth
cannot work until secrets are properly scoped to these repos.

Refs: CAR-77

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 01:48:17 +00:00
Deploy Debbie d0c887e29f Debug: check Docker Hub secret accessibility from CI runners
Adding diagnostic step to verify secret length before login attempt.

Refs: CAR-77

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 01:45:43 +00:00
Deploy Debbie c81e14b8e7 Re-add Docker Hub auth to test secret accessibility
Board confirms DOCKERHUB_USERNAME/DOCKERHUB_TOKEN exist. Testing
whether they're now accessible from self-hosted runners.

Refs: CAR-77

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 01:43:34 +00:00
Debbie (Paperclip Agent) ec81004268 Remove Docker Hub auth (secrets not accessible from CI runners)
DOCKERHUB_USERNAME/DOCKERHUB_TOKEN secrets are not accessible from
the self-hosted runners. Remove credentials blocks and login steps
to avoid template validation failures. Docker Hub pulls will use
anonymous access.

Refs: CAR-77

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 00:59:10 +00:00
Debbie (Paperclip Agent) fb6f4a0ed4 Retrigger CI after org secrets provisioned
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 00:55:24 +00:00
Debbie (Paperclip Agent) e6f09a0212 Fix: remove conditional on Docker Hub login
Board confirmed DOCKERHUB_USERNAME/DOCKERHUB_TOKEN secrets exist.
Remove the conditional (which had a YAML parsing issue with unquoted !=).

Refs: CAR-77

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-19 00:52:11 +00:00
Debbie (CartSnitch Engineering) 58844b33fe Fix: make Docker Hub auth conditional
Docker Hub login step is now conditional on secret existence
to avoid failures when org secrets are not yet provisioned.

Refs: CAR-77

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-18 23:53:50 +00:00
Debbie (CartSnitch Engineering) 0000297e4f Revert GHCR mirror configs to Docker Hub direct pulls
Replace ghcr.io/cartsnitch/mirror/* images with Docker Hub originals,
restore GHCR login guard, and add Docker Hub auth.

Refs: CAR-77

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-18 23:48:43 +00:00
chip-overstock[bot] e572a32021 Merge pull request #11 from cartsnitch/fix/ghcr-mirror-base-images
Switch Dockerfile base images to GHCR mirror
2026-03-18 18:52:27 +00:00
deploy-debbie[bot] 0789de39f0 Switch base images from Docker Hub to GHCR mirror
Avoids Docker Hub 429 rate limits by pulling node:20-alpine and
nginx:stable-alpine from ghcr.io/cartsnitch/mirror/. GHCR login
now runs on all builds (not just main push) to authenticate pulls.

Ref: cartsnitch/infra#7, CAR-55

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-18 18:37:47 +00:00
deploy-debbie[bot] e57baa4468 feat: add Renovate dependency update config
Extends the shared CartSnitch Renovate preset from cartsnitch/.github.
Minor/patch automerge, major requires review, dependency PRs labeled and grouped.

Co-authored-by: Deploy Debbie <debbie@cartsnitch.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-03-18 18:21:31 +00:00
deploy-debbie[bot] e42b7e1a66 fix(ci): remove unnecessary Docker Hub login step
The build-and-push job had an unconditional Docker Hub login step that
was failing because DOCKERHUB_USERNAME and DOCKERHUB_TOKEN secrets are
not provisioned. Since we push images to GHCR (not Docker Hub), this
step is not needed.

Closes cartsnitch/infra#5

Co-authored-by: deploy-debbie[bot] <268472978+deploy-debbie[bot]@users.noreply.github.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-03-18 18:20:31 +00:00
chip-overstock[bot] 265f2ae654 Merge pull request #9 from cartsnitch/fix/ci-docker-ratelimit
Fix CI: add Docker Hub credentials for base image pulls
2026-03-18 18:11:01 +00:00
Deploy Debbie 2c4e78f0a7 fix(ci): add Docker Hub login to avoid rate limit on base image pulls
The build-and-push job pulls node:20-alpine and nginx:stable-alpine from
Docker Hub during docker build. Without authentication these pulls hit
the unauthenticated rate limit, causing intermittent build failures.

Closes #8

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-18 16:36:02 +00:00
chip-overstock[bot] da775d362a Merge pull request #7 from cartsnitch/feature/dockerfile
feat: add multi-stage Dockerfile for PWA
2026-03-18 14:27:23 +00:00
deploy-debbie[bot] 42acdc070e feat: add multi-stage Dockerfile for PWA
Build stage uses node:20-alpine to install deps and build.
Prod stage uses nginx:stable-alpine to serve static assets.
Includes nginx config with SPA routing, gzip, health endpoint,
and aggressive caching for Vite-hashed assets.

Closes #6

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-18 13:26:57 +00:00
chip-overstock[bot] be0d4333b2 Merge pull request #2 from cartsnitch/feature/core-screens
feat: core PWA screens (auth, dashboard, purchases, products, alerts, settings)
2026-03-18 13:20:19 +00:00
Frontend Frankie ab4a55ebc0 fix: resolve ESLint errors — unused param and impure render function
- AccountLinking: remove unused _fields param from handleConnect
- Coupons: extract Date.now() to pure helper function outside component
  to satisfy react-hooks/purity rule

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-18 12:04:43 +00:00
Frontend Frankie 5caea24b71 fix: add PWA icon PNGs for manifest (192, 512, maskable)
Manifest referenced icon files that didn't exist, causing PWA install to fail.
Generates placeholder brand-blue icons for all three required sizes.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-18 12:01:32 +00:00
Frontend Frankie d0185fd93d fix: address Chip's review — secure auth, wire TanStack Query, fix UX issues
Must-fix:
- Exclude JWT token from Zustand persist (partialize) to prevent
  localStorage XSS exfiltration — token now lives in memory only
- Wire all pages through TanStack Query hooks (usePurchases, useProduct,
  useProducts, usePriceHistory, useCoupons, usePriceAlerts) with proper
  loading skeletons and error states
- Add mock interceptor in api.ts (VITE_MOCK_API=true) so mock data flows
  through the same fetch path — single flag to switch to live API

Should-fix:
- Wire theme toggle to DOM (dark class on <html>)
- Fix AccountLinking form inputs (controlled with value/onChange)
- Remove unused err in catch blocks (Login, Register)
- Bump remaining min-h-10 touch targets to min-h-12 (48px)

Build: 128KB initial JS, Recharts 498KB lazy chunk. 5/5 tests pass.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-18 11:54:06 +00:00
chip-overstock[bot] c3866c9628 Merge pull request #3 from cartsnitch/fix/runner-label
fix: use correct ARC runner label
2026-03-18 03:11:04 +00:00
deploy-debbie[bot] e39f77b3dd fix: use local-ubuntu-latest-cartsnitch runner label
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-18 02:57:03 +00:00
Frankie 5563b5f145 fix: address critical and major PR review issues
- Lazy-load Recharts via SparklineChart component with React.lazy + Suspense
- Gate mock auth fallback behind VITE_MOCK_AUTH env var in Login and Register
- Add ProtectedRoute component to guard authenticated routes
- Fix touch target size on New Alert button (min-h-10 -> min-h-12)
- Replace invalid safe-area-pb class with pb-[env(safe-area-inset-bottom)]
- Fix theme toggle button touch targets (min-h-10 -> min-h-12)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-17 16:36:12 +00:00
Frontend Frankie 6d576bad40 feat: add core PWA screens (auth, dashboard, purchases, products, alerts, settings)
Build all 8 primary screens for CAR-33 on top of the Phase 1 scaffold:
- Auth: login, register, forgot password with JWT flow and mock fallback
- Dashboard: triggered alerts banner, spending stats, price trend sparklines (Recharts), recent purchases
- Purchase History: store filter chips, paginated list with item previews
- Purchase Detail: receipt view with line items linking to product pages
- Products: search with instant filter, store price comparison badges
- Product Detail: 90-day price history chart (Recharts), store comparison table
- Store Comparison: ranked store cards with savings banner
- Price Alerts: triggered/watching sections, create form, progress bars, delete
- Coupons: expiration warnings, copy-to-clipboard coupon codes
- Account Linking: connect Meijer/Kroger/Target with status indicators
- Settings: profile, connected stores, notification toggles, theme switcher, sign out

Also adds:
- Mock data layer (src/lib/mock-data.ts) for demo/screenshot use
- StoreIcon component with store brand colors
- Code-split Recharts chunk (initial JS: 117KB, Recharts lazy: 498KB)
- All 48px+ touch targets, mobile-first Tailwind layout

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-17 12:24:31 +00:00
deploy-debbie[bot] 2d51f60190 ci: add GitHub Actions workflow for frontend
Add CI pipeline with ESLint, TypeScript checking, Vitest tests, and GHCR Docker build.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-16 10:25:58 +00:00
Chris Farhood f632e2a862 Rename frontend-CLAUDE.md to CLAUDE.md 2026-03-15 17:23:39 -04:00
Chris Farhood 666f5fe34b Add files via upload 2026-03-15 17:23:22 -04:00