Ecommerce Template
Modern ecommerce template built with Next.js 16, React 19, Drizzle, Better Auth, Supabase, and Stripe.
Compare this week's grocery flyer prices near you.
CommerceTypeScript · JavaScriptGitHub @ReeceRoseOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Compare this week's grocery flyer prices near you. Data comes from Flipp's public flyer API (unofficial and undocumented, so it may change).
git clone https://github.com/ReeceRose/flyerwatch.git
cd flyerwatch
pnpm install
pnpm dev
/ searches every nearby flyer and sorts by lowest price, or by price per pound./flyers lists this week's grocery flyers; open one to see and filter every deal./tour shows what the site and extension do, with screenshots.Flipp responses are cached for an hour with "use cache" (src/lib/flipp.ts).
/list combines the recipes you add from the extension into one list:
#, so nothing is stored on the server.src/lib/shopping/store.ts).Ingredient parsing, matching, price estimates and the trip planner are plain JavaScript in src/shared/, used by both the site and the extension. After editing them, run pnpm sync:extension to copy them into extension/lib/shared/.
extension/ holds a Chrome extension that checks the ingredients of any recipe you open against this week's flyers. It isn't in the Chrome Web Store yet, so install it by hand:
chrome://extensions and turn on Developer mode.extension folder.docs/extension-install.md covers connecting it to the site, updating, sharing a zip, and troubleshooting. extension/README.md explains how it works.
| Path | What's there |
|---|---|
src/app/ | Pages (/, /flyers, /flyers/[id], /list, /share, /tour) and API routes used by the list and extension |
src/components/ | UI components; shopping/ holds the list, trip plans and share dialog |
src/lib/ | Flipp client (flipp.ts), postal code cookie, flyer image tiles (tiles.ts, uses sharp), shopping list state |
src/shared/ | Plain JS shared with the extension: ingredient parsing, matching, prices, trip planner |
public/sw.js | Service worker that keeps a shared list available offline under /share |
extension/ | The Chrome extension (Manifest V3, no build step) |
scripts/sync-extension.mjs | Copies src/shared/ into extension/lib/shared/ |
There are no tests yet. Before committing, run:
pnpm build # type-checks and builds
pnpm sync:extension # if you touched src/shared/
brand/logo.svg is the source for every icon: the favicon, icon.svg, the Apple touch icon, the web manifest icons and the extension's icons. After you change it, run pnpm build:icons to regenerate them all, and update the inline copy in src/components/logo.tsx.