mirror of
https://github.com/R0m1k3/Priceflow.git
synced 2026-10-11 17:29:14 +02:00
This commit adds a comprehensive product search feature that allows users to search for products across multiple configured e-commerce sites. Backend changes: - Add SearXNG service to docker-compose for meta-search capability - Add SearchSite model and Alembic migration with default sites - Create searxng_service.py for search queries across sites - Create light_scraper_service.py for fast HTTP-based extraction - Create search_service.py orchestrator combining SearXNG + HTTP + Browserless - Add API endpoints for search (/api/search) with SSE streaming - Add CRUD endpoints for search sites (/api/search-sites) Frontend changes: - Add new /search page with real-time results display - Create SearchResultCard component for product display - Add Progress, Checkbox, and Badge UI components - Update Settings page with search sites management section - Add navigation link to search page - Create new modern SVG logo with price-flow gradient design - Update favicon to SVG format The search system uses a hybrid approach: 1. SearXNG finds product URLs across configured sites 2. Light HTTP scraper attempts fast extraction 3. Falls back to Browserless for JavaScript-heavy sites 4. Results stream progressively via SSE
72 lines
2.3 KiB
XML
72 lines
2.3 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
<defs>
|
|
<linearGradient id="bgGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#D4AF37;stop-opacity:1" />
|
|
<stop offset="50%" style="stop-color:#C5A028;stop-opacity:1" />
|
|
<stop offset="100%" style="stop-color:#22C55E;stop-opacity:1" />
|
|
</linearGradient>
|
|
<linearGradient id="lineGradient" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
<stop offset="0%" style="stop-color:#FFFFFF;stop-opacity:0.9" />
|
|
<stop offset="100%" style="stop-color:#22C55E;stop-opacity:1" />
|
|
</linearGradient>
|
|
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
|
|
<feGaussianBlur stdDeviation="8" result="coloredBlur"/>
|
|
<feMerge>
|
|
<feMergeNode in="coloredBlur"/>
|
|
<feMergeNode in="SourceGraphic"/>
|
|
</feMerge>
|
|
</filter>
|
|
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
|
|
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-color="#000000" flood-opacity="0.3"/>
|
|
</filter>
|
|
</defs>
|
|
|
|
<!-- Background rounded square -->
|
|
<rect x="20" y="20" width="472" height="472" rx="80" ry="80" fill="url(#bgGradient)" filter="url(#shadow)"/>
|
|
|
|
<!-- Price chart line -->
|
|
<g filter="url(#glow)">
|
|
<path
|
|
d="M 80 320
|
|
Q 120 280, 160 300
|
|
Q 200 320, 240 260
|
|
Q 280 200, 320 220
|
|
Q 360 240, 400 160
|
|
L 400 160"
|
|
fill="none"
|
|
stroke="url(#lineGradient)"
|
|
stroke-width="24"
|
|
stroke-linecap="round"
|
|
stroke-linejoin="round"
|
|
/>
|
|
|
|
<!-- Arrow pointing down at the end -->
|
|
<path
|
|
d="M 380 180 L 420 140 L 420 175"
|
|
fill="none"
|
|
stroke="#22C55E"
|
|
stroke-width="20"
|
|
stroke-linecap="round"
|
|
stroke-linejoin="round"
|
|
/>
|
|
</g>
|
|
|
|
<!-- Decorative dots on the line -->
|
|
<circle cx="80" cy="320" r="12" fill="#FFFFFF" opacity="0.9"/>
|
|
<circle cx="160" cy="300" r="10" fill="#FFFFFF" opacity="0.8"/>
|
|
<circle cx="240" cy="260" r="10" fill="#FFFFFF" opacity="0.8"/>
|
|
<circle cx="320" cy="220" r="10" fill="#FFFFFF" opacity="0.8"/>
|
|
<circle cx="400" cy="160" r="14" fill="#22C55E"/>
|
|
|
|
<!-- Euro symbol -->
|
|
<text x="256" y="430"
|
|
font-family="Arial, sans-serif"
|
|
font-size="80"
|
|
font-weight="bold"
|
|
fill="#FFFFFF"
|
|
fill-opacity="0.3"
|
|
text-anchor="middle">
|
|
PRICEFLOW
|
|
</text>
|
|
</svg>
|