2 Commits

Author SHA1 Message Date
0fbe75dd3d fix(bikegear): use Playwright browser mode to bypass Cloudflare on VPS IPs
HTTP requests from datacenter IPs get 403 from bikegear.in Cloudflare WAF.
Adds BIKEGEAR_FETCH_MODE=browser (default) which runs a headless Chromium via
Playwright — already installed — and navigates pages like a real user, bypassing
the JS challenge without needing a paid proxy.

Set BIKEGEAR_FETCH_MODE=http to keep the old axios path (for local/residential IPs).
Browser instance is shared across the full scrape run and closed cleanly on finish.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-22 18:05:24 +05:30
c2e037310d feat: add bikegear.in import source (Alpinestars as first brand)
Adds a new OpenCart-based source (bikegear.in) to the import pipeline.
2-phase scraper: listing pages collect product URLs, detail pages extract
JSON-LD (name, price in INR, brand, SKU) + description table HTML + gallery images.

- sources/bikegear/brands.js  — brand list (Alpinestars active, 40+ commented)
- sources/bikegear/scraper.js — HTML scraper with full Sec-Fetch browser headers
- sources/bikegear/converter.js — Shopify-ready converter (record.scraped || record pattern)
- sources/bikegear/index.js   — 24h cache, zero-success guard, brands[] export
- sources/index.js             — register bikegear source

Set BIKEGEAR_CACHE_HOURS=0 to force re-scrape.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-13 17:27:06 +05:30