Skip to content

Sola07/ExtensionDrouot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Drouot Monitor - Chrome Extension

Automated auction monitoring tool for Drouot.com - Never miss a deal again!

Features

  • Passive Scraping: Automatically extracts lots from Drouot pages you visit
  • Advanced Filtering: Filter by category, keywords, price, date, and auction house
  • NEW/SEEN State Tracking: Track which items you've viewed
  • Visual Indicators: Badges and highlights on Drouot pages
  • Smart Scoring: Prioritizes items based on match quality
  • Local Storage: All data stays on your device
  • React-powered UI: Beautiful, responsive popup interface

Setup

Prerequisites

  • Node.js 16+ and npm
  • Chrome/Chromium browser

Installation

  1. Install dependencies:

    npm install
  2. Build the extension:

    npm run build
  3. Load in Chrome:

    • Open chrome://extensions/
    • Enable "Developer mode" (top right)
    • Click "Load unpacked"
    • Select the dist/ folder

Development Mode

For active development with auto-rebuild:

npm run dev

Then reload the extension in Chrome after changes.

Usage

First Time Setup

  1. Click the extension icon
  2. Go to Settings (βš™οΈ)
  3. Configure your filters:
    • Select categories (e.g., Mobilier, Art Contemporain)
    • Add include keywords (e.g., "louis xvi", "empire")
    • Add exclude keywords (e.g., "reproduction", "style de")
    • Set price range
    • Select auction houses (e.g., Artcurial, Drouot Estimations)
  4. Save

Daily Usage

  1. Browse Drouot.com naturally - The extension works passively
  2. Extension scrapes lots as you visit pages
  3. Badge shows NEW count - Click to view
  4. Review matches in popup
  5. Mark as seen or favorite items
  6. Click item to open on Drouot.com

Visual Indicators

On Drouot pages, you'll see:

  • πŸ†• NEW badges - Unviewed matching items
  • ⭐ FAVORITE badges - Items you starred
  • πŸ‘€ SEEN badges - Previously viewed items
  • Highlighting - Color-coded borders around matching items

Architecture

See ARCHITECTURE.md for detailed system design.

Key Components

  • Content Script (content/content.js): Scrapes DOM, adds badges
  • Background Worker (background.js): Processes lots, manages state
  • Popup UI (popup/): React app for viewing and managing items
  • Storage Service (src/services/storage.js): chrome.storage wrapper
  • Filter Engine (src/services/filter.js): Matching algorithm

Data Storage

All data is stored locally using chrome.storage.local:

  • Lots: Scraped auction items
  • User States: NEW/SEEN/FAVORITE/IGNORED per item
  • Filters: Your configured filters
  • Preferences: UI settings

See STORAGE_SCHEMA.md for detailed schema.

Filtering Logic

The extension matches lots against your filters using:

  1. Category matching - Must be in selected categories
  2. Keyword inclusion - Must contain at least one include keyword
  3. Keyword exclusion - Must not contain any exclude keywords
  4. Price range - Estimate must be within min/max
  5. Date range - Auction date must be within range
  6. Auction house - Must be from selected auction houses

See SCRAPING_STRATEGY.md for scraping details.

Scoring System

Each matching lot receives a score (0-100) based on:

  • Category match: +15
  • Keyword matches: +10 per keyword
  • Title matches: +5 bonus
  • Price proximity: up to +15
  • Recency: up to +10
  • Auction urgency: up to +15
  • Has image: +5
  • Auction house match: +10

Higher scores appear first in the popup.

File Structure

drouot-monitor/
β”œβ”€β”€ manifest.json              # Extension manifest
β”œβ”€β”€ background.js              # Service worker
β”œβ”€β”€ content/
β”‚   β”œβ”€β”€ content.js             # Content script
β”‚   └── content.css            # Page styling
β”œβ”€β”€ popup/
β”‚   β”œβ”€β”€ popup.html             # Popup HTML
β”‚   └── popup.jsx              # React entry
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/            # React components
β”‚   β”‚   β”œβ”€β”€ App.jsx
β”‚   β”‚   β”œβ”€β”€ ItemCard.jsx
β”‚   β”‚   β”œβ”€β”€ ItemList.jsx
β”‚   β”‚   β”œβ”€β”€ TabNavigation.jsx
β”‚   β”‚   └── Settings.jsx
β”‚   β”œβ”€β”€ services/              # Business logic
β”‚   β”‚   β”œβ”€β”€ storage.js
β”‚   β”‚   β”œβ”€β”€ scraper.js
β”‚   β”‚   β”œβ”€β”€ filter.js
β”‚   β”‚   └── messaging.js
β”‚   β”œβ”€β”€ utils/                 # Utilities
β”‚   β”‚   β”œβ”€β”€ date.js
β”‚   β”‚   └── price.js
β”‚   └── constants.js           # Constants
β”œβ”€β”€ assets/                    # Icons
β”œβ”€β”€ package.json
β”œβ”€β”€ webpack.config.js
└── README.md

Development

Adding New Features

  1. New filter type: Add to DEFAULT_FILTERS in constants.js, update matchesFilters() in filter.js, add UI in Settings.jsx
  2. New item state: Add to ItemState enum, update storage.js indexes
  3. New scraping pattern: Add selectors to SCRAPING_PATTERNS in scraper.js

Testing

Test on real Drouot pages:

  • Listing pages: https://www.drouot.com/ventes
  • Search results: https://www.drouot.com/recherche
  • Lot details: https://www.drouot.com/l/*

Debugging

  • Check console logs in:
    • Content script: Page console (F12)
    • Background: Extension service worker (chrome://extensions β†’ Details β†’ Inspect)
    • Popup: Right-click popup β†’ Inspect

Troubleshooting

No lots scraped

  • Check console for errors
  • Verify Drouot page structure hasn't changed
  • Click πŸ”„ button on page to manually re-scrape

Filters not working

  • Ensure filters are enabled in Settings
  • Check filter criteria aren't too restrictive
  • Re-save filters to trigger re-evaluation

Badge not updating

  • Reload extension
  • Check background service worker for errors
  • Verify storage isn't corrupted: chrome://extensions β†’ Developer tools

Performance

  • Scraping: <100ms per page
  • Filter matching: <10ms per lot
  • Storage: Unlimited (uses chrome.storage.local)
  • Memory: ~20MB for 10,000 lots

Privacy

  • No tracking: Zero analytics or telemetry
  • Local-first: All data stays on your device
  • No external requests: Only scrapes pages you visit
  • Open source: Inspect all code

Legal

This extension:

  • βœ… Only scrapes pages the user actively visits
  • βœ… Does not make automated requests to Drouot
  • βœ… Respects robots.txt (implicitly via browser)
  • βœ… Is for personal use only
  • ❌ Does not resell or share data

Not affiliated with Drouot.com

Roadmap

See MVP_ROADMAP.md for detailed roadmap.

MVP (Current)

  • Scraping engine
  • Filter matching
  • State tracking (NEW/SEEN/FAVORITE)
  • Popup UI
  • Content script badges

Post-MVP

  • Multi-device sync (Firebase/Supabase)
  • Email notifications
  • Price tracking & alerts
  • Export to CSV
  • Browser extension for other auction sites

Contributing

  1. Fork the repo
  2. Create feature branch (git checkout -b feature/amazing)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing)
  5. Open Pull Request

License

MIT License - See LICENSE file for details

Support

For issues or questions:

  1. Check ARCHITECTURE.md for technical details
  2. Check SCRAPING_STRATEGY.md for scraping info
  3. Open an issue on GitHub

Made with ❀️ for auction enthusiasts

About

Extension Chrome pour navigation sur Drouot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors