Core trust scoring: - Five metadata signals (account age, feedback count/ratio, price vs market, category history), composited 0–100 - CV-based price signal suppression for heterogeneous search results (e.g. mixed laptop generations won't false-positive suspicious_price) - Expanded scratch/dent title detection: evasive redirects, functional problem phrases, DIY/repair indicators - Hard filters: new_account, established_bad_actor - Soft flags: low_feedback, suspicious_price, duplicate_photo, scratch_dent, long_on_market, significant_price_drop Search & filtering: - Browse API adapter (up to 200 items/page) + Playwright scraper fallback - OR-group query expansion for comprehensive variant coverage - Must-include (AND/ANY/groups), must-exclude, category, price range filters - Saved searches with full filter round-trip via URL params Seller enrichment: - Background BTF /itm/ scraping for account age (Kasada-safe headed Chromium) - On-demand enrichment: POST /api/enrich + ListingCard ↻ button - Category history derived from Browse API categories field (free, no extra calls) - Shopping API GetUserProfile inline enrichment for API adapter Market comps: - eBay Marketplace Insights API with Browse API fallback (catches 403 + 404) - Comps prioritised in ThreadPoolExecutor (submitted first) Infrastructure: - Staging DB fields: times_seen, first_seen_at, price_at_first_seen, category_name - Migrations 004 (staging tracking) + 005 (listing category) - eBay webhook handler stub - Cloud compose stack (compose.cloud.yml) - Vue frontend: search store, saved searches store, ListingCard, filter sidebar Docs: - README fully rewritten to reflect MVP status + full feature documentation - Roadmap table linked to all 13 Forgejo issues
33 lines
2 KiB
Text
33 lines
2 KiB
Text
# Snipe works out of the box with the scraper (no credentials needed).
|
|
# Set eBay API credentials to unlock full trust scores —
|
|
# account age and category history signals require the eBay Browse API.
|
|
# Without credentials the app logs a warning and falls back to the scraper.
|
|
|
|
# ── eBay Developer Keys — Production ──────────────────────────────────────────
|
|
# From https://developer.ebay.com/my/keys (Production tab)
|
|
EBAY_APP_ID=
|
|
EBAY_DEV_ID=
|
|
EBAY_CERT_ID=
|
|
|
|
# ── eBay Developer Keys — Sandbox ─────────────────────────────────────────────
|
|
# From https://developer.ebay.com/my/keys (Sandbox tab)
|
|
EBAY_SANDBOX_APP_ID=
|
|
EBAY_SANDBOX_DEV_ID=
|
|
EBAY_SANDBOX_CERT_ID=
|
|
|
|
# ── Active environment ─────────────────────────────────────────────────────────
|
|
# production | sandbox
|
|
EBAY_ENV=production
|
|
|
|
# ── eBay Account Deletion Webhook ──────────────────────────────────────────────
|
|
# Register endpoint at https://developer.ebay.com/my/notification — required for
|
|
# production key activation. Set EBAY_NOTIFICATION_ENDPOINT to the public HTTPS
|
|
# URL eBay will POST to (e.g. https://snipe.circuitforge.tech/api/ebay/account-deletion).
|
|
EBAY_NOTIFICATION_TOKEN=
|
|
EBAY_NOTIFICATION_ENDPOINT=
|
|
# Set to false during sandbox/registration (no production token available yet).
|
|
# Set to true once production credentials are active — enforces ECDSA verification.
|
|
EBAY_WEBHOOK_VERIFY_SIGNATURES=true
|
|
|
|
# ── Database ───────────────────────────────────────────────────────────────────
|
|
SNIPE_DB=data/snipe.db
|