Track product prices, get drop alerts, and act fast.
Live Demo · Repository · Get Started
DealDrop is a price-tracking web app that lets users paste product links, track price changes, and get alerts when a price drops.
- Track products by URL with instant scraping
- Watchlist with price history charts
- Email alerts on price drops
- Supabase auth with Google and GitHub OAuth, plus per-user product tracking
- Scheduled price checks via cron endpoint
- Next.js (App Router)
- React
- TypeScript
- Tailwind CSS
- Supabase (auth + database)
- Firecrawl (product scraping)
- Resend (email notifications)
- Recharts (price charts)
- Sign in with Supabase auth to create your private watchlist.
- Paste a product URL to start tracking; Firecrawl scrapes title, price, and image.
- A cron job calls the check endpoint to refresh prices on a schedule.
- Price history is stored in Supabase and displayed in charts.
- When the price drops, Resend sends an alert email with a direct link.
- Node.js 18 or newer
- Supabase project (auth + database)
- Firecrawl API key
- Resend API key and sender address
- Google and GitHub OAuth credentials
git clone https://github.com/RexSixT9/dealdrop.git
cd dealdrop
npm install- Configure database schema and RLS policies for
productsandprice_history. - Enable Google and GitHub providers in Authentication > Providers.
- Set Authentication > URL Configuration:
- Site URL: your deployed domain
- Additional Redirect URLs:
https://YOUR_DOMAIN/auth/callbackand any local dev callback URLs
- Copy the Supabase project URL and publishable key from Settings > API.
Create a .env.local file in the project root:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
# or use NEXT_PUBLIC_SUPABASE_ANON_KEY instead
SUPABASE_SERVICE_ROLE_KEY=
FIRECRAWL_API_KEY=
RESEND_API_KEY=
RESEND_FROM_EMAIL=
NEXT_PUBLIC_APP_URL=http://localhost:3000
CRON_SECRET=
# Optional tracking limit per account
MAX_TRACKED_URLS=4npm run devOpen http://localhost:3000 to view the app.
dealdrop/
├── app/ # App Router pages and routes
├── components/ # UI and feature components
├── constants/ # Static content
├── lib/ # Supabase, Firecrawl, and utilities
├── public/ # Static assets
└── proxy.ts # Next.js proxy
npm run dev- start dev servernpm run dev:m- start dev server (0.0.0.0)npm run build- build for productionnpm run start- start production servernpm run lint- run ESLint
- Set all environment variables in your hosting provider.
- Set
NEXT_PUBLIC_APP_URLto the deployed origin. - Update Supabase Authentication > URL Configuration to match the live domain.
- Configure a scheduled request to
/api/cron/check-priceswith theCRON_SECRETbearer token. - Redeploy after changing auth or environment settings.
Price checks run through the route handler in app/api/cron/check-prices/route.ts.
curl -X POST \
-H "Authorization: Bearer <CRON_SECRET>" \
http://localhost:3000/api/cron/check-prices- Login redirects to the wrong domain: verify
NEXT_PUBLIC_APP_URLand Supabase Site URL / Redirect URLs. - OAuth sign-in fails: confirm provider settings and the Supabase OAuth callback URL.
- Cron job does not update products: confirm
SUPABASE_SERVICE_ROLE_KEYandCRON_SECRETin production. - Emails are not sending: verify Resend API key and sender domain.
- Product scraping fails: check Firecrawl logs and validate the product URL is public.
Apache License 2.0

