[SNPE] Snipe — Auction sniping — CT Bids, antiques, estate auctions, eBay #14

Open
opened 2026-02-27 13:54:00 -08:00 by pyr0ball · 0 comments
Owner

[SNPE] Snipe

Auction sniping — CT Bids, antiques, estate auctions, eBay

Status

MVP core complete. Actively testing. Keyword filtering in progress.

MVP is eBay-only. The scraper tier (Playwright + Xvfb, no API key required) is fully operational:

Done

  • FastAPI layer (port 8510) — search endpoint with trust scoring, market comp, seller map
  • Vue 3 + Pinia + UnoCSS frontend (port 8509, nginx proxy)
  • Playwright + playwright-stealth + Xvfb scraper (Kasada-bypass via headed chromium)
  • Three-layer caching: HTML (5 min in-memory), phash (permanent in-memory), market comp (SQLite, 6h TTL)
  • Parallel execution: search() and get_completed_sales() run concurrently — halves cold-search time
  • Pagination: 1/2/3/5 pages selector in UI (48 listings/page), parallel Playwright calls per page (max 3 concurrent)
  • Xvfb display counter (:200–:299) prevents lock conflicts on sequential calls
  • Trust scoring: metadata signals (account age, feedback, price vs market, category history) + phash dedup
  • Market price comp from sold listings — proper median (averages two middle values for even sets)
  • Faceted filter sidebar: trust score, price, condition, seller thresholds, hide-flags
  • Auction dim style (opacity 0.72 for auctions >1h remaining)
  • DB migrations (SQLite): 001 init, 002 buying_format/ends_at, 003 nullable account_age_days
  • Bug fixes: false suspicious_price flags (None→0 sentinel), false new_account flags (account_age=None), title pollution (eBay a11y span)
  • 48 unit tests — scraper parsers runnable on host without Docker (lazy Playwright imports)

In Progress

  • Keyword filtering — must-include / must-exclude terms; negatives forwarded to eBay query and applied client-side

Backlog

  • Seller profile enrichment via listing page BTF card ("Joined Jun 2022" scraped from /itm/ after scroll — Kasada allows these)
  • Bulk flag/report UI for scammers — multi-select listings → eBay deep-link report + optional CF community blocklist
  • Snipe scheduling with configurable bid-time offset
  • Human approval gate before any bid is placed
  • Saved searches
  • Vue 3 SPA refinements: mobile filter drawer, listing detail view

Architecture

nginx (8509) → /api/ → FastAPI (8510, network_mode: host)
                          ↓
              ScrapedEbayAdapter
                 Playwright + Xvfb
                 HTML cache (5 min)
                          ↓
              TrustScorer → metadata + phash
                          ↓
              SQLite (data/snipe.db)

Critical gotcha: eBay uses Kasada bot protection. Only headed Chromium via Xvfb passes. requests, curl_cffi, headless Playwright, and /usr/ /fdbk/ profile pages are all blocked. /itm/ listing pages load and contain BTF seller card with account age.

Dependencies

  • circuitforge-core — shared scaffold (db, config, tiers) — editable install from ../circuitforge-core

Repository

https://git.opensourcesolarpunk.com/Circuit-Forge/snipe

Milestones

https://git.opensourcesolarpunk.com/Circuit-Forge/snipe/milestones

Design Pillars

Privacy · Safety · Accessibility — co-equal, non-negotiable.
Neurodivergent and adaptive needs users are a primary audience.

Tier System

| Tier | What you get |
|------|------------||
| Free | Core pipeline, scraper tier (no API key), local LLM only |
| Paid | Cloud LLM, seller profile enrichment, saved searches |
| Premium | Fine-tuned models, multi-user, advanced analytics |
| Ultra | Human-in-the-loop operator (bid execution, CAPTCHA handling) |

License

Discovery pipeline: MIT · LLM features: BSL 1.1 (→ MIT after 4 years)

## [SNPE] Snipe > Auction sniping — CT Bids, antiques, estate auctions, eBay ### Status **MVP core complete. Actively testing. Keyword filtering in progress.** MVP is eBay-only. The scraper tier (Playwright + Xvfb, no API key required) is fully operational: #### Done - [x] FastAPI layer (port 8510) — search endpoint with trust scoring, market comp, seller map - [x] Vue 3 + Pinia + UnoCSS frontend (port 8509, nginx proxy) - [x] Playwright + playwright-stealth + Xvfb scraper (Kasada-bypass via headed chromium) - [x] Three-layer caching: HTML (5 min in-memory), phash (permanent in-memory), market comp (SQLite, 6h TTL) - [x] Parallel execution: search() and get_completed_sales() run concurrently — halves cold-search time - [x] Pagination: 1/2/3/5 pages selector in UI (48 listings/page), parallel Playwright calls per page (max 3 concurrent) - [x] Xvfb display counter (:200–:299) prevents lock conflicts on sequential calls - [x] Trust scoring: metadata signals (account age, feedback, price vs market, category history) + phash dedup - [x] Market price comp from sold listings — proper median (averages two middle values for even sets) - [x] Faceted filter sidebar: trust score, price, condition, seller thresholds, hide-flags - [x] Auction dim style (opacity 0.72 for auctions >1h remaining) - [x] DB migrations (SQLite): 001 init, 002 buying_format/ends_at, 003 nullable account_age_days - [x] Bug fixes: false suspicious_price flags (None→0 sentinel), false new_account flags (account_age=None), title pollution (eBay a11y span) - [x] 48 unit tests — scraper parsers runnable on host without Docker (lazy Playwright imports) #### In Progress - [ ] Keyword filtering — must-include / must-exclude terms; negatives forwarded to eBay query and applied client-side #### Backlog - [ ] Seller profile enrichment via listing page BTF card ("Joined Jun 2022" scraped from /itm/ after scroll — Kasada allows these) - [ ] Bulk flag/report UI for scammers — multi-select listings → eBay deep-link report + optional CF community blocklist - [ ] Snipe scheduling with configurable bid-time offset - [ ] Human approval gate before any bid is placed - [ ] Saved searches - [ ] Vue 3 SPA refinements: mobile filter drawer, listing detail view ### Architecture ``` nginx (8509) → /api/ → FastAPI (8510, network_mode: host) ↓ ScrapedEbayAdapter Playwright + Xvfb HTML cache (5 min) ↓ TrustScorer → metadata + phash ↓ SQLite (data/snipe.db) ``` **Critical gotcha:** eBay uses Kasada bot protection. Only headed Chromium via Xvfb passes. `requests`, `curl_cffi`, headless Playwright, and `/usr/` `/fdbk/` profile pages are all blocked. `/itm/` listing pages load and contain BTF seller card with account age. ### Dependencies - **circuitforge-core** — shared scaffold (db, config, tiers) — editable install from `../circuitforge-core` ### Repository https://git.opensourcesolarpunk.com/Circuit-Forge/snipe ### Milestones https://git.opensourcesolarpunk.com/Circuit-Forge/snipe/milestones ### Design Pillars Privacy · Safety · Accessibility — co-equal, non-negotiable. Neurodivergent and adaptive needs users are a primary audience. ### Tier System | Tier | What you get | |------|------------|| | Free | Core pipeline, scraper tier (no API key), local LLM only | | Paid | Cloud LLM, seller profile enrichment, saved searches | | Premium | Fine-tuned models, multi-user, advanced analytics | | Ultra | Human-in-the-loop operator (bid execution, CAPTCHA handling) | ### License Discovery pipeline: MIT · LLM features: BSL 1.1 (→ MIT after 4 years)
pyr0ball added the
priority:medium
status:concept
labels 2026-02-27 13:54:00 -08:00
pyr0ball added
status:active-dev
and removed
status:concept
labels 2026-03-25 10:00:18 -07:00
pyr0ball added
status:beta
and removed
status:active-dev
labels 2026-04-04 16:37:32 -07:00
pyr0ball added the
free-tier:live
label 2026-04-04 20:01:22 -07:00
Sign in to join this conversation.
No description provided.