Smart wishlist + cross‑market price watcher for Lazada & Shopee.
- Prices shift daily across marketplaces; shoppers rarely know when to buy.
- Comparing Lazada vs Shopee is tedious, and “good deal” signals are hidden.
- We aggregate both stores, surface live prices, and show whether now is a good buying window.
- Cross-store scraping gateway: Apify worker merges Lazada (Playwright/BeautifulSoup) and Shopee (Apify actor) results, sorted by lowest price.
- Guided add-to-wishlist flow: Search once, pick a result, set a target price, and save directly to Convex.
- Price intelligence UI: History chart, lowest/highest/average, market delta hints, and “buying window” guidance per item.
- Animated RN experience: Expo Router navigation, reanimated transitions, responsive cards, and share/open-store shortcuts.
- Tap Add Product → search “minecraft” (hits Lazada + Shopee) → pick a card → set target price → Add to Wishlist.
- Open Wishlist to see live stats (items count, dropping prices, total value).
- Open a product → view price history chart + insights → tap Open Store to jump to the listing.
- Mobile app: React Native (Expo), TypeScript, Expo Router, Reanimated, react-native-chart-kit.
- Data layer: Convex for realtime wishlist + price history (
EXPO_PUBLIC_CONVEX_URLpoints to the hosted deployment; change if you self-host). - Scrape layer (Apify-first): Python worker packaged for Apify; uses Playwright/BS4 for Lazada and the Shopee Apify actor via
API_TOKEN, merges and sorts by price. Can also be run locally viaBackend/main.py. - Config discovery: The app resolves
EXPO_PUBLIC_API_URLautomatically to your Metro host in dev so mobile devices hit the correct backend (src/services/api.ts).
- Copy env:
cp .env.example .envand setEXPO_PUBLIC_API_URLto your backend (e.g.,http://<your-ip>:8000). - Install deps:
npm install - Run:
npx expo start(use Expo Go or emulator). - Ensure your device can reach the backend host (same Wi‑Fi or use tunnel).
cd Backend
python -m venv .venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
pip install -r requirements.txt
python -m playwright install chromium
export API_TOKEN=<your_apify_token> # required for Shopee
# optional: export SHOPEE_COOKIES='[...]' to override defaults
uvicorn main:app --host 0.0.0.0 --port 8000Key endpoints:
GET /→ health checkPOST /api/scrape/lazada→ { query }POST /api/scrape/all→ { query } (Lazada + Shopee merged & sorted)
- Default points to the hosted Convex instance in
.env.example. - If you self-host, set
EXPO_PUBLIC_CONVEX_URL(andCONVEX_SELF_HOSTED_*) accordingly, then runnpx convex devor your self-hosted deployment.
- React Native (Expo), TypeScript, Expo Router, Reanimated, react-native-chart-kit
- Convex (realtime data + mutations for wishlist and price history)
- Apify (Shopee actor + Python worker with Playwright/BS4 for Lazada)
- Tooling: dotenv, AsyncStorage, Expo LinearGradient/StatusBar/SafeArea, Ionicons
- Push alerts when a product crosses its target price.
- Background cron to refresh prices and append to history automatically.
- News-signal scoring to warn about upcoming price hikes.
- Add inline receipts for “I bought it” to close the loop.
MIT