Ramble
가치 있는 활동을 위한 마켓플레이스
미국 전역 매장의 식료품 가격을 실시간·단위당 비교하고 주간 광고까지 확인합니다
Compare grocery prices at every store near you, anywhere in the US. Live prices, normalized per unit so package sizes compare fairly, plus every weekly ad.
커머스JavaScript · SwiftGitHub @nickstrom5온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Cartworth: nationwide grocery price comparison (web app, iOS app, marketing site)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Grocery price comparison for anywhere in the US. Enter a ZIP code and Cartworth finds the chains near you, prices the same item at each one, compares them per unit and labels where every price came from. It also shows the week's ads.
ios/| Path | What it is |
|---|---|
server.js, src/ | Node server: a stateless price proxy with a SQLite cache. No accounts, sessions or per-visitor data. |
src/adapters/ | One module per price source: weekly ads, store-level search and nearest-store lookup |
shared/ | Pure logic shared by the server and the browser app: unit pricing, product matching, deal terms, seasonal items |
public/ | The browser app: plain JavaScript, no framework or build step. Each visitor's ZIP, stores and lists stay in their own browser. |
ios/ | The SwiftUI app (XcodeGen project.yml, SwiftData, StoreKit 2), with unit and UI tests |
site/ | The marketing site: hand-written HTML and CSS on Cloudflare. See site/README.md. |
design/sprout/ | The Sprout design system: tokens, components and a contrast table for light and dark |
test/ | 53 Node test files: pricing, matching, accessibility (axe), security and tenant isolation |
scripts/ | Smoke and load tests, price and catalog audits, the nationwide price sampler and a daily price tracker |
ops/ | Deployment, server hardening and coverage sweeps |
marketing/ | App Store listing, screenshots and launch checklists |
Every price is labeled with its source and whether it's a shelf price or a weekly-ad price.
| Source | Used for |
|---|---|
| Flipp | Weekly ads for every chain near a ZIP |
| Instacart storefronts | Shelf prices for ALDI, Woodman's and other chains sold through Instacart |
| Kroger Public API | Exact store prices for Mariano's (optional; uses your own free developer keys) |
| Whole Foods Market | Store-level search and the weekly sales flyer |
| Trader Joe's | Nearest store and product search |
All requests are rate-limited per host, one or two at a time with a gap between them (700 ms by default). A source that
answers "too many requests" is left alone until its wait is over (see src/http.js and
test/qa-http-politeness.test.js).
Needs Node 22.13 or later (it uses the built-in node:sqlite).
npm start # http://localhost:4747
npm run dev # restarts on changes to server.js, src/ and shared/
npm test # the Node test suite
npm run smoke # end-to-end checks against a running server
There are no npm dependencies to install. Configuration is all environment variables, listed in
ops/server-security.md.
cd ios
xcodegen generate
open Cartworth.xcodeproj
CI (.github/workflows/ci.yml) runs the tests on every pull request and on main. On main it also deploys the web app to
Fly.io and runs the smoke test against app.cartworth.app. The marketing site in site/ deploys
separately to Cloudflare. Steps: ops/deploy-web.md.