garnet-system

byjayy bhatt

## SYSTEM ROLE You are PricePulse AI — a smart price comparison assistant for Indian shoppers. You help users find the best price for any product across Amazon.in, Flipkart, and Meesho by searching in real time, comparing results, analyzing price history, and recommending the best deal in clear, simple language. You are integrated with a web search tool. Use it aggressively to fetch live product listings. --- ## TOOLS AVAILABLE - web_search: Search the internet for live product prices - web_fetch: Fetch full page content from a product URL for deeper detail --- ## INPUT FORMAT The user provides: - `query`: Product name or description (e.g., "boAt Airdopes 141", "Prestige 3L pressure cooker") - Optional: `max_budget` — user's budget in INR - Optional: `platform_preference` — "Amazon" | "Flipkart" | "Meesho" | "any" - Optional: `city` — for delivery time estimates (e.g., "Ahmedabad", "Surat") --- ## YOUR SEARCH STRATEGY When the user gives a product query, follow these steps in order: ### Step 1 — Search all 3 platforms simultaneously Run these 3 searches in parallel: - "{product name} site:amazon.in price" - "{product name} site:flipkart.com price" - "{product name} site:meesho.com price" Also run: "{product name} price India 2025" to catch any aggregator or review site listings. ### Step 2 — Extract and normalize data For each platform result, extract: - Product title (exact name + variant) - Current price (₹) - Original MRP (if shown — for discount calculation) - Discount % (calculate if not shown: ((MRP - price) / MRP * 100)) - Rating (out of 5) - Number of reviews - Delivery estimate (if available) - Seller name (for Flipkart/Amazon) - URL ### Step 3 — Price history check Search: "{product name} price history India" or "{product name} camelcamelcamel OR pricekart" Extract any historical low / high / average price if available. ### Step 4 — Best deal analysis Score each listing using this weighted formula: - Price (40%) — lower is better - Rating (25%) — higher is better - Reviews count (15%) — more is better (trust signal) - Delivery speed (20%) — faster is better Pick the winner and explain why in 1–2 plain sentences. --- ## OUTPUT FORMAT Respond with this exact structure: --- **🔍 Results for: [Product Name]** **Best deal:** [Platform] — ₹[price] ✅ Reason: [1 sentence why — e.g., "Cheapest price with fast delivery and 4.3★ rating"] --- **Platform comparison:** | Platform | Price | MRP | Discount | Rating | Delivery | |----------|-------|-----|----------|--------|----------| | Amazon.in | ₹X | ₹Y | Z% | ⭐ 4.2 | 2 days | | Flipkart | ₹X | ₹Y | Z% | ⭐ 4.0 | 3 days | | Meesho | ₹X | ₹Y | Z% | ⭐ 3.8 | 5–7 days | --- **Price history:** - All-time low: ₹X (Month Year) - All-time high: ₹X (Month Year) - Current vs average: [higher/lower/at par] by ₹X **AI verdict:** [2–3 sentences — is now a good time to buy? Is this price likely to drop during a sale? Any quality concern based on reviews?] **Buy links:** - Amazon.in → [URL] - Flipkart → [URL] - Meesho → [URL] --- ## EDGE CASE HANDLING - Product not found on a platform → show "Not listed" in that cell, don't skip the row - Price varies by seller on Amazon/Flipkart → show the lowest FBA/Flipkart-assured price only - User gives a vague query (e.g., "good headphones under 1000") → ask ONE clarifying question: "Do you want wireless or wired? Any brand preference?" - Product is out of stock → mark clearly as "Out of stock" and still show last known price - Meesho has many variants at different prices → pick the median price listing - Budget given and all options exceed it → say so clearly and suggest the closest alternative - User asks for a product category (not a specific item) → recommend top 3 products in that category first, then let user pick one to compare --- ## AI VERDICT RULES Use these signals to give smart buying advice: - If current price > 30-day average → "Prices are elevated right now. Consider waiting for the next sale." - If current price is all-time low → "This is the lowest this product has ever been priced. Good time to buy." - If Meesho is cheapest but rating < 3.5 → "Meesho has the lowest price but low seller ratings — quality risk." - If all prices are within ₹100 of each other → "All platforms are priced similarly. Go with your preferred platform." - If a major Indian sale is upcoming (Big Billion Days, Amazon Great Indian Festival — typically Oct/Nov) → "A major sale is likely in the next few weeks. Prices may drop further." --- ## TONE & LANGUAGE - Be direct and helpful like a knowledgeable friend, not a corporate assistant - Use ₹ symbol always, never "INR" or "Rs" - Keep AI verdict conversational: "Honestly, Flipkart is the better bet here because..." - Offer to go deeper: "Want me to check EMI options or compare specs between two variants?" - Respond in the same language the user used (English, Hindi, or Gujarati if detected) --- ## CONSTRAINTS - Never fabricate prices — only report what you found in search results - If no live data found, say: "I couldn't fetch live prices right now. Try searching directly on the platform." - Do not recommend purchasing from unverified third-party sites - Do not store or log the user's search history - Always include the date/time of price fetch: "Prices as of [today's date, IST]"

LandingSearchResults
Landing

Comments (0)

No comments yet. Be the first!

Project Tasks72

#1

Implement Navbar for Landing

To Do

As a frontend developer, implement the Navbar section for the Landing page. Build the `Navbar` component using `useState` for `solid` (scroll-triggered background change beyond 40px via `useEffect` scroll listener) and `mobileOpen` (hamburger toggle). Render `nb-root` nav with `nb-solid` class toggled on scroll. Include: logo anchor with `nb-logo-gem` span and 'Garnet-System' brand text; desktop `nb-links` ul mapping `navPages` array (How It Works → /Landing, Features → /Search, FAQ → /Results); `nb-cta` anchor with `Search` icon from lucide-react pointing to /Search; mobile toggle `nb-toggle` button rendering SVG hamburger (3 lines) or X (2 diagonal lines) based on `mobileOpen`; `nb-mobile` div with `nb-open` class toggle containing mobile nav links and mobile CTA. Import `Navbar.css` for all styles. Note: this component may already exist from a prior page — check before recreating.

AI 85%
Human 15%
High Priority
1 day
Frontend Developer
#23

Build Product Search API

To Do

As a Backend Developer, implement the POST /api/v1/search endpoint using FastAPI. Accept JSON body with fields: query (str), max_budget (float, optional), platform_preference (str: amazon|flipkart|meesho|any), city (str, optional). Simultaneously search Amazon.in, Flipkart, and Meesho using web search tools (via LiteLLM-integrated tools or HTTP scraping). Normalize and return extracted product data: title, current_price, mrp, discount_pct, rating, review_count, delivery_estimate, seller_name, buy_url, platform. Handle edge cases: product not found, out-of-stock, budget exceeded, vague queries. Return structured JSON with results array and metadata. Note: Frontend section tasks ResultsHeader, ComparisonTable, ResultsFiltersBar, AlternativeProducts depend on this endpoint.

AI 60%
Human 40%
High Priority
3 days
Backend Developer
#24

Build Price History API

To Do

As a Backend Developer, implement the GET /api/v1/price-history endpoint using FastAPI. Accept query params: product_query (str), platform (str, optional). Fetch and return 30-day price history data for the product across Amazon.in, Flipkart, and Meesho by searching price tracking sources (e.g., pricekart, camelcamelcamel-style sources). Return structured JSON with arrays of {date, price, platform} objects per platform, plus all-time low, all-time high, and 30-day average. Note: Frontend sections PriceHistoryChart (Search and Results pages) depend on this endpoint.

AI 55%
Human 45%
High Priority
2 days
Backend Developer
#26

Configure LiteLLM AI Routing

To Do

As an AI Engineer, set up LiteLLM for LLM routing to GPT-5.4 as specified in the SRD. Configure LiteLLM router with model aliases, fallback models, retry logic, and timeout settings. Set up environment variables for API keys (OPENAI_API_KEY or provider key). Integrate LiteLLM as a dependency in the FastAPI backend service. Ensure the AI verdict endpoint can route requests through LiteLLM with proper error handling for rate limits and model unavailability. Add LiteLLM to requirements.txt / pyproject.toml.

AI 50%
Human 50%
High Priority
1 day
AI Engineer
#27

Setup Database Models Migrations

To Do

As a Backend Developer, set up MySQL/MariaDB database models and Alembic migrations for the Garnet-System. Create SQLAlchemy models for any persistent data needs (e.g., product cache, search logs if needed for analytics without storing user PII, platform metadata). Initialize Alembic with alembic.ini and env.py configured to point at the database. Create the initial migration. Ensure the database connection string is configurable via environment variable DATABASE_URL. Note: SRD specifies the system should not store user search history — do not add a user search history model.

AI 40%
Human 60%
Medium Priority
1.5 days
Backend Developer
#28

Setup FastAPI CORS Middleware

To Do

As a Backend Developer, configure FastAPI application with CORS middleware to allow the React frontend to communicate with the backend API. Set allowed origins for development (localhost:3000, localhost:5173) and production domains. Add rate limiting middleware to protect scraping endpoints. Configure request/response logging middleware. Set up global exception handlers for clean error responses (404, 422, 500). Add health check endpoint GET /api/v1/health for Docker and Kubernetes probes. This is a cross-cutting backend concern required by all frontend pages.

AI 40%
Human 60%
High Priority
0.5 days
Backend Developer
#30

Setup Theme Design System

To Do

As a Frontend Developer, set up a shared theme and design system for the Garnet-System React app. Create a CSS variables file (or Tailwind/styled-components theme) defining all SRD colors: --primary: #1A73E8, --primary-light: #4D90FE, --secondary: #FF7043, --accent: #FFC107, --highlight: #FFEB3B, --bg: #F5F5F5, --surface: rgba(255,255,255,0.9), --text: #212121, --text-muted: #757575, --border: rgba(0,0,0,0.1). Define global typography scale, spacing tokens, and breakpoints. Set up global CSS reset and base styles. Create shared utility classes for common patterns used across Landing, Search, and Results pages. This must be set up before any section components are implemented.

AI 30%
Human 70%
High Priority
0.5 days
Frontend Developer
#31

Setup CI/CD Pipeline

To Do

As a DevOps Engineer, set up a CI/CD pipeline (GitHub Actions or equivalent) for the Garnet-System. Configure: (1) Frontend build and lint job running npm install, eslint, and npm run build for the React app; (2) Backend lint and test job running pip install, flake8/ruff, and pytest for the FastAPI service; (3) Docker build and push jobs for both frontend and backend images to a container registry; (4) Deployment job that applies Kubernetes manifests or triggers docker-compose update on the target environment. Add .env.example files for both frontend and backend documenting required environment variables (DATABASE_URL, OPENAI_API_KEY, VITE_API_BASE_URL, etc.). Configure branch protection rules.

AI 40%
Human 60%
Medium Priority
1.5 days
DevOps Engineer
#34

Implement SearchHero for Search Page

To Do

As a frontend developer, implement the SearchHero section for the Search page using React Three Fiber and Three.js. Build a 3D galaxy scene using <Canvas> from @react-three/fiber with <Stars> and <OrbitControls> from @react-three/drei. Implement the CategoryStar component with sphereGeometry (args=[0.12,16,16]), meshStandardMaterial with emissive glow, useFrame-driven floating animation (Math.sin-based Y-axis oscillation) and rotation, hover scale lerp to 1.35, and pointer cursor management. Render 6 CATEGORIES (Phones, Laptops, Audio, Fashion, Home, Sports) as interactive star nodes with position, color, and tooltip data. Implement ConstellationLines using useMemo to generate THREE.BufferGeometry pairs for 7 edges between category nodes, rendered with lineBasicMaterial at 0.18 opacity. On hover, show Html overlay tooltip via @react-three/drei Html with distanceFactor=6. Wire onHover/onLeave callbacks to parent state for active tooltip display outside the Canvas. Import SearchHero.css for overlay and tooltip styles (6876 chars of CSS).

AI 85%
Human 15%
High Priority
2 days
Frontend Developer
#35

Implement SearchForm for Search Page

To Do

As a frontend developer, implement the SearchForm section for the Search page. Build a controlled form component with useState hooks for: product (text), budget (number, max BUDGET_MAX=100000), platform (string, default 'any'), city (string), submitted (bool), and productError (string). Render 4 PLATFORMS (Any, Amazon, Flipkart, Meesho) as toggle buttons with iconClass and iconText. Implement a budget range slider with tick marks from BUDGET_TICKS (['₹500','₹5K','₹25K','₹50K','No limit']) and formatBudget() formatter that outputs '₹XK' notation. Render 6 QUICK_SEARCHES chips (iPhone 15, boAt earbuds, etc.) as clickable prefill buttons. Implement useEffect to parse URLSearchParams (q, p params) on mount to pre-fill product and platform from hero or landing page navigation. Render custom SVG icon components: SearchIcon, LocationIcon, CheckIcon, CloseIcon, AlertIcon. Add form validation showing productError with AlertIcon when product is empty on submit. Import SearchForm.css (10084 chars). This section is independent of SearchHero.

AI 88%
Human 12%
High Priority
1.5 days
Frontend Developer
#36

Implement ResultsSummary for Search Page

To Do

As a frontend developer, implement the ResultsSummary section for the Search page. Build the component with useState for sortValue (default 'best_deal'), mobileOpen (bool), and filters array seeded with 3 chips: budget ('Under ₹15,000' with BudgetIcon), platform ('All Platforms' with PlatformIcon), and city ('Ahmedabad' with CityIcon). Render a mobile toggle button with aria-expanded and aria-controls='rs-collapsible-panel' that toggles the collapsible filter/sort panel. Render a results count display showing resultCount=24 results for query='Samsung Galaxy M34'. Implement removeFilter(id) to splice chips from filters state, each chip having a CloseIcon dismiss button. Render a sort dropdown from SORT_OPTIONS (6 options: Best Deal, Price Low→High, Price High→Low, Highest Rating, Most Reviews, Fastest Delivery) with ChevronIcon. Render all 5 custom SVG icon components: SearchIcon, BudgetIcon, PlatformIcon, CityIcon, CloseIcon, ChevronIcon inline. Import ResultsSummary.css (6488 chars). Independent of SearchHero and SearchForm.

AI 88%
Human 12%
High Priority
1 day
Frontend Developer
#37

Implement AIVerdictCard for Search Page

To Do

As a frontend developer, implement the AIVerdictCard section for the Search page. Render 3 verdict variants from the VERDICTS array: 'go' (Good Deal, ✓ badge, confidence 87%), 'wait' (Wait, ⏳ badge, confidence 72%), and 'hot' (Hot Deal, 🔥 badge, confidence 94%). Each verdict has: badge with badgeEmoji, title with titleAccent, multi-sentence reasoning text, and 3 bullet points each with an icon key (trending-down, star, zap, trending-up, calendar, package, award, clock, percent) and label text. Implement custom SVG icon components: IconTrendingDown, IconTrendingUp, and others matching the icon keys in points arrays. Use useState, useEffect, and useRef for animated entrance or confidence meter fill. Apply accentClass ('go', 'wait', 'hot') for color theming per card. Render a confidence score indicator displaying the numeric confidence percentage. Import AIVerdictCard.css (8194 chars). This section is independent of other content sections.

AI 87%
Human 13%
High Priority
1.5 days
Frontend Developer
#38

Implement PriceHistoryChart for Search Page

To Do

As a frontend developer, implement the PriceHistoryChart section for the Search page using react-chartjs-2 and Chart.js. Register ChartJS modules: CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, Filler. Define PLATFORM_COLORS for Amazon (#1A73E8), Flipkart (#FF7043), and Meesho (#FFC107) with matching fill rgba values. Generate BASE_DATA for 3 time ranges (7, 14, 30 days) using generatePriceHistory(base, volatility, days) with INR base prices (Amazon ₹24999, Flipkart ₹25499, Meesho ₹23799) and buildDateLabels() outputting 'en-IN' locale date strings. Implement useState for range (default 30), dimmed (object to toggle platform visibility), and custom tooltip state (visible, x, y, label, values). Implement toggleDim(platform) to show/hide individual platform lines. Wire chartRef via useRef. Render time range toggle buttons (7d, 14d, 30d). Implement priceDelta(arr) to compute change amount, percentage, and direction ('drop'/'rise') displayed as platform stat pills below the chart. Render formatINR(n) for '₹' + toLocaleString('en-IN') formatting. Import PriceHistoryChart.css (7023 chars). Independent of other content sections.

AI 88%
Human 12%
High Priority
1.5 days
Frontend Developer
#39

Implement AlternativesSection for Search Page

To Do

As a frontend developer, implement the AlternativesSection for the Search page. Render a product grid from ALL_PRODUCTS array (8+ products) spanning categories: Mobiles (Samsung Galaxy M34, realme Narzo N53, Redmi 12 5G, POCO M6 Pro), Electronics (Boat Airdopes 141, JBL Tune 510BT, Noise ColorFit Pro 5). Each product card displays: Unsplash image, platform label, price (₹ formatted), MRP with strikethrough, discount percentage badge, star rating with review count, delivery string, and a colored badge (HOT DEAL with as-badge-blue, LOWEST, PRIME with as-badge-amber, TOP RATED, 77% OFF). Implement useState for category filter tabs (Mobiles, Electronics, etc.) to filter ALL_PRODUCTS by category field. Render filter chip buttons that update active category state. Map filtered products to card components. Import AlternativesSection.css (7338 chars). Independent of other content sections but logically shown after AIVerdictCard and PriceHistoryChart.

AI 90%
Human 10%
Medium Priority
1 day
Frontend Developer
#60

Setup Backend Environment Config

To Do

As a Backend Developer, set up environment configuration management for the FastAPI backend. Create a Pydantic Settings class (pydantic-settings) loading from environment variables: DATABASE_URL, OPENAI_API_KEY, REDIS_URL, LITELLM_MODEL (default 'gpt-5.4'), ALLOWED_ORIGINS (comma-separated), SCRAPER_TIMEOUT (int), CACHE_TTL_SECONDS (int), LOG_LEVEL. Create a .env.example file documenting all required and optional variables. Use python-dotenv for local development. Ensure all service modules (scraping, cache, LiteLLM, DB) reference settings from this central config. Add pydantic-settings and python-dotenv to requirements.txt.

AI 60%
Human 40%
High Priority
0.5 days
Backend Developer
#2

Implement LandingHero for Landing

To Do

As a frontend developer, implement the LandingHero section for the Landing page. This is a complex 3D interactive hero using `@react-three/fiber` Canvas and `@react-three/drei` Points/PointMaterial. Key elements: `fibonacciSphere` utility generating evenly distributed star positions on a sphere; `Starfield` component rendering a Three.js Points cloud with per-frame rotation via `useFrame`; interactive category galaxy where hovering/clicking star clusters reveals product deal cards for 6 categories (Smartphones, Laptops, Headphones, Watches, Home Appliances, Fashion) each with 3 platform listings (Amazon, Flipkart, Meesho with INR prices). Uses `useState`, `useRef`, `useMemo`, `useCallback`, `useEffect` from React; `useThree` for camera; `Search` and `X` icons from lucide-react; `Suspense` for Canvas lazy loading. Includes a search bar UI overlaid on the 3D canvas. Import `LandingHero.css`. Integrate `*THREE` for geometry. This is the most complex section on the page.

Depends on:#1
Waiting for dependencies
AI 80%
Human 20%
High Priority
2 days
Frontend Developer
#3

Implement LandingPlatformTrust for Landing

To Do

As a frontend developer, implement the LandingPlatformTrust section for the Landing page. Build the section using `framer-motion` (`motion`, `useInView`, `animate`) and `lucide-react` (`ShieldCheck`, `RefreshCw`). Render platform logo cards for Amazon.in (color #FF9900), Flipkart (#2874F0), and Meesho (#F43397) each with custom inline SVG icons (80×80 viewBox with branded colors and text). Implement `AnimatedCounter` component with `useState` for count, `useRef` for `hasAnimated` guard, using `framer-motion`'s `animate` function to count from 0 to target over 1.8s with cubic easing — activates once when `inView` becomes true. Apply `containerVariants` with `staggerChildren: 0.15` and `logoVariants` with `grayscale(1)` hidden state animating to full color on reveal. Import `LandingPlatformTrust.css`.

Depends on:#1
Waiting for dependencies
AI 88%
Human 12%
High Priority
1 day
Frontend Developer
#4

Implement LandingFeatures for Landing

To Do

As a frontend developer, implement the LandingFeatures section for the Landing page. Build three `FeatureCard` components using advanced `framer-motion` hooks: `useMotionValue` for normalized pointer position (x, y 0–1), `useSpring` (stiffness 300, damping 20) for smooth `rotateX`/`rotateY` (±8°), `useTransform` and `useMotionTemplate` to generate a dynamic `radial-gradient` highlight background following cursor position. Each card uses `onMouseMove` to compute normalized pointer coords from `getBoundingClientRect`, resetting to center (0.5) on `onMouseLeave`. Feature data: BadgeIndianRupee icon (ft-icon-price) for 'Real-Time Price Comparison', TrendingUp (ft-icon-chart) for 'Price History & Trends', Bot (ft-icon-ai) for 'AI-Powered Verdict'. Render decorative parallax star field (12 positioned spans) and two nebula blobs. Cards animate in with `whileInView` opacity 0→1, y 40→0. Import `LandingFeatures.css`.

Depends on:#1
Waiting for dependencies
AI 88%
Human 12%
High Priority
1 day
Frontend Developer
#5

Implement LandingHowItWorks for Landing

To Do

As a frontend developer, implement the LandingHowItWorks section for the Landing page. Build the section using `gsap` and `gsap/ScrollTrigger` (registered via `gsap.registerPlugin`). Maintain `activeStep` state (useState, default -1) and refs: `sectionRef`, `lineRef` (SVG path), `progressRef` (animated SVG stroke), `stepRefs` array for 4 step cards. On mount: measure SVG path total length via `getTotalLength()`, set `strokeDasharray` and `strokeDashoffset` to full length, create a GSAP timeline with `ScrollTrigger` (trigger: section, start: 'top 70%', end: 'bottom 40%', scrub: 0.6) animating `strokeDashoffset` to 0. Second `ScrollTrigger` updates `activeStep` index based on scroll progress (0–3). Each step card animates in with `gsap.fromTo` (opacity 0→1, y 30→0) with staggered delays (i * 0.12). Steps: Search (Search icon), Set Preferences (SlidersHorizontal), Compare (Scale), Buy Smart (ShoppingBag). Background includes 12 decorative star spans. Import `LandingHowItWorks.css`.

Depends on:#1
Waiting for dependencies
AI 85%
Human 15%
High Priority
1.5 days
Frontend Developer
#6

Implement LandingTestimonials for Landing

To Do

As a frontend developer, implement the LandingTestimonials section for the Landing page. Build a 3D carousel using `framer-motion` `useMotionValue` for `rotation` and `useTransform` for per-card 3D positioning. Constants: CARD_COUNT=3, ANGLE_STEP=120°, RADIUS=280, DEG2RAD. `CarouselCard` uses `useTransform` on rotation to compute per-frame: `sinVal * RADIUS * 0.55` for x-offset, cosine-based scale (0.78–1.0), opacity (0.45–1.0), blur (0–2px), zIndex, and `rotateY` (-angle * 0.9) — creating a true 3D carousel effect. Drag interaction uses `useRef` for `isDragging`, `dragStartX`, `dragStartRotation`; `useMotionValue` `rotation`; `useState` for `activeIndex`. `snapToNearest` utility snaps to nearest 120° increment handling multi-revolution angles. Testimonials: Priya M. (5★, ₹2,300 laptop saving), Rohan K. (5★, AI verdict price drop), Ananya S. (5★, no jargon). Import `LandingTestimonials.css`.

Depends on:#1
Waiting for dependencies
AI 85%
Human 15%
Medium Priority
1.5 days
Frontend Developer
#7

Implement LandingCTA for Landing

To Do

As a frontend developer, implement the LandingCTA section for the Landing page. Build using `framer-motion` (`motion`, `AnimatePresence`) and `lucide-react` (`ArrowRight`, `Play`). Implement: magnetic primary CTA button with `useRef` (`primaryRef`) tracking mouse offset via `handlePrimaryMouseMove` (computes x/y from `getBoundingClientRect`, applies `translate(x*0.15px, y*0.15px)` transform) and `handlePrimaryMouseLeave` (resets transform); `triggerBurst` callback spawning 10 `motion.span` particles on mouse enter with random x/y offsets (±80px range), animating opacity/scale to 0 over 0.6s, auto-clearing after 700ms via `setTimeout`; `scrollToHowItWorks` smooth-scrolling to `.la-slot-landinghowitworks` selector. Background: 15 static `cta-star` spans in `cta-stars` div with CSS scroll parallax (`--scroll` var). Secondary 'How It Works' button with `Play` icon. Heading: 'Ready to Find Your Best Deal?'. Import `LandingCTA.css`.

Depends on:#1
Waiting for dependencies
AI 88%
Human 12%
Medium Priority
1 day
Frontend Developer
#8

Implement Footer for Landing

To Do

As a frontend developer, implement the Footer section for the Landing page. Build the `Footer` component with a 4-column `ftr-grid` layout: (1) Brand column with 'Garnet-System' brand name (first letter 'G' wrapped in span) and tagline about smart price comparison; (2) Quick Links column mapping `quickLinks` array (Home → /Landing, Search Prices → /Search, View Results → /Results) as `ftr-link` anchors; (3) Supported Platforms column mapping `platforms` array (AZ/Amazon, FK/Flipkart, MO/Meesho with external hrefs) as `ftr-platform` anchors with `target='_blank' rel='noopener noreferrer'`; (4) Contact column with `Mail` and `MapPin` icons from lucide-react showing support@garnet-system.in and Ahmedabad, Gujarat, India. Include `ftr-divider` hr, bottom bar with dynamic `new Date().getFullYear()` copyright, and Privacy/Terms `ftr-legal-link` anchors. Import `Footer.css`. Note: this component may already exist from a prior page — check before recreating.

Depends on:#1
Waiting for dependencies
AI 92%
Human 8%
Low Priority
0.5 days
Frontend Developer
#9

Implement SearchHero for Search

To Do

As a frontend developer, implement the SearchHero section for the Search page. This is a static hero section using the `sh-root` container with an `sh-inner` div housing an `<h1>` with `.sh-tagline` and `.sh-tagline-accent` span for highlighted text, a `<p>` with `.sh-intro` for the subtitle copy, and an `sh-icon-row` div containing three `sh-platform-dot` spans with individual modifier classes `sh-pdot-amazon`, `sh-pdot-flipkart`, and `sh-pdot-meesho` for platform branding dots. A decorative `sh-accent-bar` div is rendered at the bottom. No state or interactivity required. Note: Navbar component may already exist from the Landing page.

Depends on:#1
Waiting for dependencies
AI 90%
Human 10%
High Priority
0.5 days
Frontend Developer
#25

Build AI Verdict API

To Do

As a Backend Developer, implement the POST /api/v1/ai-verdict endpoint using FastAPI and LiteLLM for LLM routing to GPT-5.4. Accept JSON body with: product_query (str), platform_data (array of normalized product listings), price_history (object with historical data). Use the weighted scoring formula — Price (40%), Rating (25%), Reviews (15%), Delivery Speed (20%) — to determine best deal. Construct a prompt for the LLM to generate a conversational AI verdict (good time to buy / wait / avoid) with confidence percentage and reasoning. Return JSON: {verdict: 'buy'|'wait'|'avoid', label, reasoning, confidence, best_platform, best_price}. Respect the AI verdict rules defined in the SRD (e.g., all-time low triggers 'buy', elevated prices trigger 'wait'). Note: Frontend sections AIVerdictCard (Search and Results pages) depend on this endpoint.

Depends on:#24#23
Waiting for dependencies
AI 70%
Human 30%
High Priority
2.5 days
Backend Developer
#29

Setup Frontend API Client

To Do

As a Frontend Developer, set up a shared API client layer for the React frontend to communicate with the FastAPI backend. Create an axios or fetch-based API client with base URL configured from environment variable (VITE_API_BASE_URL or REACT_APP_API_BASE_URL). Implement typed API service functions: searchProducts(query, budget, platform, city), getPriceHistory(productQuery, platform), getAIVerdict(productQuery, platformData, priceHistory). Add request/response interceptors for error handling and loading state management. Export these services from a shared /src/services/ directory so all pages (Search, Results) can use them consistently. This is a cross-cutting frontend concern.

Depends on:#28
Waiting for dependencies
AI 50%
Human 50%
High Priority
1 day
Frontend Developer
#40

Implement ResultsFiltersBar for Results Page

To Do

As a frontend developer, implement the ResultsFiltersBar section for the Results page. This section renders a multi-group filter panel with the following interactive state managed via React useState hooks: `activePlatforms` (array toggled via `togglePlatform`), `minPrice`/`maxPrice` (controlled text inputs for INR range), `activeRating` (single-select toggle from RATINGS array: 3+, 4+, 4.5+), `activeDelivery` (single-select from DELIVERY_OPTIONS with emoji icons: Today ⚡, Within 2 Days 🚚, This Week 📦), and `mobileOpen` (boolean controlling a mobile drawer via `rfb-mobile-toggle` button with aria-expanded). Active filter state is compiled into `activePills` array with per-pill `onRemove` handlers and rendered as dismissible chips. A `handleClear` function resets all filters. Platform options (Amazon, Flipkart, Meesho) render colored dot indicators via `rfb-dot-amazon`, `rfb-dot-flipkart`, `rfb-dot-meesho` CSS classes. The mobile toggle button renders an SVG hamburger icon. Styles are imported from `ResultsFiltersBar.css`. This is a page-chaining entry section — depends_on includes the parent Search page task ID.

Depends on:#34
Waiting for dependencies
AI 88%
Human 12%
High Priority
1 day
Frontend Developer
#46

Build Web Scraping Service

To Do

As a Backend Developer, implement a reusable web scraping service layer for the Garnet-System. Create async scraper modules for Amazon.in, Flipkart, and Meesho using httpx or playwright (for JS-rendered pages). Each scraper must extract: product title, current price, MRP, discount percentage, rating, review count, delivery estimate, seller name, and buy URL. Implement concurrent scraping using asyncio.gather to search all three platforms simultaneously as required by the SRD. Add retry logic, user-agent rotation, and error handling for anti-bot measures. Expose a unified async function search_all_platforms(query, platform_preference) used by the POST /api/v1/search endpoint. Add scrapy/playwright/httpx to requirements.txt.

Depends on:#27#28
Waiting for dependencies
AI 40%
Human 60%
High Priority
3 days
Backend Developer
#47

Build Data Normalization Layer

To Do

As a Backend Developer, implement a data normalization module that standardizes raw scraped product data from all three platforms (Amazon.in, Flipkart, Meesho) into a unified schema. Normalize: product titles (strip variant noise), prices (ensure float with INR handling), discount_pct computation ((MRP - price) / MRP * 100) when not provided, rating normalization to float out of 5, review_count as integer, delivery_estimate to structured days estimate (for delivery speed scoring), and seller_name. Handle edge cases: out-of-stock detection, price variations by seller (use lowest FBA/Flipkart-assured price), Meesho median price selection. Export as Pydantic models for use in the search and AI verdict endpoints. Note: this module is a dependency of the Product Search API (9be2a12f) and AI Verdict API (1ab3df02).

Depends on:#28
Waiting for dependencies
AI 40%
Human 60%
High Priority
1.5 days
Backend Developer
#50

Setup Product Caching Layer

To Do

As a Backend Developer, implement a caching layer for product search results and price history data to reduce redundant scraping calls and improve response latency. Use Redis (or a lightweight in-memory TTL cache with cachetools) with configurable TTL (e.g., 10 minutes for search results, 1 hour for price history). Cache key: hash of (query, platform_preference). Add REDIS_URL environment variable to config. Integrate cache check-before-fetch and cache-write-after-fetch in the search and price history service layers. Note: SRD requires real-time data with minimal latency — caching with short TTL balances freshness and performance.

Depends on:#28#27
Waiting for dependencies
AI 40%
Human 60%
Medium Priority
1 day
Backend Developer
#55

Build EMI Calculation API

To Do

As a Backend Developer, implement the GET /api/v1/emi endpoint using FastAPI. Accept query params: price (float), platform (str, optional). Return structured EMI options per platform: Flipkart, Amazon, Meesho — each with a list of EMI plans containing description, monthly_amount, tenure_months, interest_rate, and is_best flag. Compute EMI using standard formula P*r*(1+r)^n/((1+r)^n-1). Also return no-cost EMI options where available. This endpoint supports the EMIAndDetails section on the Results page (6b0d88fe). Note: frontend EMIAndDetails depends on this endpoint for live EMI data.

Depends on:#28
Waiting for dependencies
AI 50%
Human 50%
Medium Priority
1 day
Backend Developer
#61

Setup Frontend Environment Config

To Do

As a Frontend Developer, set up environment variable configuration for the React frontend. Create .env.development and .env.production files (and .env.example for documentation) with VITE_API_BASE_URL pointing to the FastAPI backend. Configure Vite proxy settings in vite.config.js for local development to proxy /api requests to the backend container, avoiding CORS issues during development. Add environment type checking using a central config.js or env.ts module that validates required environment variables at startup and exports typed constants. This ensures consistent API base URL usage across all service functions.

Depends on:#30
Waiting for dependencies
AI 60%
Human 40%
High Priority
0.5 days
Frontend Developer
#72

Implement Data Privacy Compliance

To Do

As a Backend Developer, implement data privacy compliance measures as required by the SRD. Ensure no user search history is stored in the database (verify ac53f97d models do not include user search logs). Add request logging that strips PII before writing to logs (no IP addresses, no search queries in persistent logs). Implement in-memory-only session handling for any temporary context. Add privacy policy endpoint GET /api/v1/privacy-info returning the data handling statement. Ensure GDPR/PDPA-compatible response headers (no tracking cookies from backend). Document data retention policy in README. Verify DATABASE_URL config does not point to a user-tracking schema.

Depends on:#27#60
Waiting for dependencies
AI 50%
Human 50%
Medium Priority
1 day
Backend Developer
#10

Implement SearchForm for Search

To Do

As a frontend developer, implement the SearchForm section for the Search page. This is the primary interactive search form using `useState` hooks for `product`, `productTouched`, `budget`, `platform`, `city`, and `isSearching` state. It renders a canvas-based particle animation via `canvasRef` and `useCallback`/`useEffect` — the `initCanvas` function spawns 40 particles with randomized positions, velocities, and alpha values rendered using the Canvas 2D API with `requestAnimationFrame`, wrapping particles at canvas edges and drawing blue `rgba(26, 115, 232, alpha)` circles. The form includes a text input for product name with inline validation (`productValid`/`productInvalid`), a dual-thumb budget range slider with `formatINR` formatting for INR display (min ₹100, max ₹100,000, step ₹100), a platform selector mapping the `PLATFORMS` constant (any/amazon/flipkart/meesho) with `sf-platform-dot--*` modifier classes, a city text input, and a submit button that sets `isSearching` to true during submission. Canvas resizes on DPR changes.

Depends on:#9
Waiting for dependencies
AI 80%
Human 20%
High Priority
1.5 days
Frontend Developer
#11

Implement ResultsSummary for Search

To Do

As a frontend developer, implement the ResultsSummary section for the Search page. Uses `useState` for `sortBy` (default `best_deal`), `filters` (initial array of budget/platform/city filter objects with type, label, icon fields), and `mobileOpen` toggle state. Renders an `rs-left` block with an SVG magnifier icon and query text plus result count. Includes a mobile `rs-toggle` button that toggles `rs-collapsible--open` class on the collapsible container. The collapsible area contains: filter tags rendered from the `filters` array with `rs-tag--budget`, `rs-tag--platform`, `rs-tag--city` modifier classes via `filterClass()`, each tag clickable to call `removeFilter(index)`, plus a `rs-clear-all` button calling `clearAllFilters()`. A sort dropdown using the `sortOptions` constant (best_deal/price_asc/price_desc/rating) with a `rs-sort-select-wrap` wrapper. All filter removal is immutable via `Array.filter`.

Depends on:#9
Waiting for dependencies
AI 85%
Human 15%
High Priority
1 day
Frontend Developer
#12

Implement ComparisonTable for Search

To Do

As a frontend developer, implement the ComparisonTable section for the Search page. Uses `useState` for `activeRow` (null by default) to highlight hovered/selected rows. Renders a `ct-table-wrap` containing an HTML `<table>` with `ct-table` class. Each row is built from the `products` array containing 4 mock products across amazon/flipkart/meesho platforms with fields: `id`, `platform`, `platformName`, `productName`, `price`, `mrp`, `discount`, `rating`, `reviews`, `deliveryDays`, `deliveryCity`, `seller`, `buyUrl`, and `isBest`. Helper functions include `getDiscountClass()` returning `ct-discount-badge--high/medium/low` based on discount threshold, `getDeliveryClass()` returning `ct-delivery--fast/normal` for ≤2 days, `getDeliveryLabel()` for human-readable delivery text, `renderStars()` building star strings from float ratings, and `formatReviewCount()` formatting numbers as `k` abbreviations. Rows with `isBest: true` receive a best-deal badge. Rows trigger `setActiveRow` on interaction.

Depends on:#9
Waiting for dependencies
AI 82%
Human 18%
High Priority
1.5 days
Frontend Developer
#13

Implement AIVerdictCard for Search

To Do

As a frontend developer, implement the AIVerdictCard section for the Search page. Imports Three.js and uses `useRef` for `mountRef` to host a Three.js canvas. The `verdictKey` is hardcoded to `gooddeal` (selectable from `verdicts` map containing `gooddeal`, `wait`, `hotdeal` keys, each with label, icon, iconClass, badgeClass, cardClass, barClass, reasoning text, and confidence integer). In `useEffect`, a Three.js scene is set up with `PerspectiveCamera` (FOV 42, z=4.2), `WebGLRenderer` (alpha, antialias, transparent background), an `IcosahedronGeometry(0.72, 1)` mesh with `MeshStandardMaterial` (color/emissive driven by verdictKey: `0x1A73E8` for gooddeal, `0xFF7043` for wait, `0xFFC107` for hotdeal, opacity 0.5, wireframe false), plus a `MeshBasicMaterial` wireframe overlay. The card displays: verdict icon, label badge with `av-badge--*` class, reasoning text paragraph, and a confidence bar fill using `av-conf-bar-fill--*` class scaled to the `confidence` percentage value.

Depends on:#9
Waiting for dependencies
AI 78%
Human 22%
High Priority
2 days
Frontend Developer
#14

Implement PriceHistoryChart for Search

To Do

As a frontend developer, implement the PriceHistoryChart section for the Search page. Imports `react-chartjs-2` `Line` component and registers `CategoryScale`, `LinearScale`, `PointElement`, `LineElement`, `Title`, `Tooltip`, `Legend`, `Filler` from Chart.js. Uses Three.js for a `GalaxyBackground` sub-component rendered in a `containerRef` div: creates a starfield with 200 stars using `BufferGeometry`, randomized positions and colors from a palette of `#1A73E8`, `#FF7043`, `#FFC107`, rendered with `PerspectiveCamera` (FOV 45, z=18) and transparent `WebGLRenderer`. Price data is generated via `generatePriceData(base, variance, trend)` producing 30-day arrays for amazon (base 1299), flipkart (base 1349), and meesho (base 1199). `generateDates(30)` formats dates as `en-IN` locale strings. A `sliceData(days)` helper slices all arrays by day range. The `trendLabel(prices)` function computes % change and returns `phc-stat-change--down/up/neutral` class. State includes a days-range selector (7/15/30 days). The chart renders three `Line` datasets with fill gradients and the `Filler` plugin.

Depends on:#9
Waiting for dependencies
AI 78%
Human 22%
High Priority
2 days
Frontend Developer
#15

Implement AlternativesSection for Search

To Do

As a frontend developer, implement the AlternativesSection section for the Search page. This is a static grid section with no state. Renders an `al-inner` container with heading `al-heading` and subtitle `al-subtitle`. Maps the `alternatives` array (5 items: Samsung Galaxy M14, Realme Narzo 60X, POCO M6 Pro, OnePlus Nord CE 3 Lite, Vivo T2x) into `al-card` anchor tags with `target='_blank'` and `rel='noopener noreferrer'`. Each card contains: `al-card-img-wrap` with an `al-card-img` product image loaded from SSL Amazon CDN URLs, a conditional `al-badge` span rendered only when `item.badge` is truthy (values: null, 'Bestseller', 'Top Rated', 'Great Value'), `al-card-body` with platform name, product title (`al-card-title`), star rating via `starRating()` helper (building `★`/`☆` character arrays), price, MRP, and discount badge. The `al-grid` uses CSS grid layout for responsive card arrangement.

Depends on:#9
Waiting for dependencies
AI 90%
Human 10%
Medium Priority
0.5 days
Frontend Developer
#16

Implement ResultsHeader for Results

To Do

As a frontend developer, implement the ResultsHeader section for the Results page. This section renders a two-column layout with a product image column (rh-image-col with rh-image-wrap and rh-product-img) and a product info column (rh-info-col). The info column includes: a breadcrumb nav (rh-breadcrumb) with ChevronRight separators linking to /Landing and /Search; an h1 product name; platform badge chips (rh-badge rh-badge--amazon/flipkart/meesho) using ShoppingBag, Zap, and Package lucide icons from platformIcons map; a best price callout block (rh-best-price) with TrendingDown icon, price value, and platform label; and a star rating display using renderStars() and formatReviewCount() helpers. Uses static productData object with name, image, bestPrice, bestPricePlatform, lowestPrice, averageRating, reviewCount, and platforms array. Imports from ResultsHeader.css. Note: Navbar component may already exist from Landing page.

Depends on:#9
Waiting for dependencies
AI 90%
Human 10%
High Priority
0.5 days
Frontend Developer
#41

Implement ComparisonTable for Results Page

To Do

As a frontend developer, implement the ComparisonTable section for the Results page. This section renders a sortable multi-platform price comparison table using `PLATFORM_DATA` (Flipkart, Amazon, Meesho with priceNum, mrp, discount, rating, reviews, delivery, seller, buyUrl). State is managed via `useState('price')` for `sortKey`, with sorted array derived using spread + sort — supporting three sort modes: price (ascending priceNum), discount (descending), and rating (descending). Each platform row renders: a logo badge (`ct-flipkart`, `ct-amazon`, `ct-meesho` CSS classes), price vs MRP with discount badge colored via `getDiscountClass` (ct-high/ct-mid/ct-low thresholds at 30%/20%), star rating rendered by `renderStars()` helper (full ★, half ★, empty ★ spans), delivery info with `deliveryFast` flag, seller name, and a 'Buy Now' CTA linking to `buyUrl`. A `ct-best-badge` with pulsing dot marks the best deal. The section header includes a 'Live Prices · Updated Now' badge. Sort control buttons are rendered for Price / Discount / Rating. Styles from `ComparisonTable.css`.

Depends on:#40
Waiting for dependencies
AI 88%
Human 12%
High Priority
1 day
Frontend Developer
#42

Implement PriceHistoryChart for Results Page

To Do

As a frontend developer, implement the PriceHistoryChart section for the Results page. This section integrates Chart.js via `react-chartjs-2` `<Line>` component with registered modules: CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, Filler. Three platform datasets (Amazon #1A73E8, Flipkart #FF7043, Meesho #FFC107) are generated using `generatePriceHistory(base, volatility, days)` with realistic INR base prices and stored in `BASE_DATA` keyed by range (7/14/30 days). State includes `range` (useState 30), `dimmed` (object toggling platform visibility), and `tooltip` (object with visible/x/y/label/values for custom hover tooltip). `buildDateLabels(days)` generates date strings from June 25, 2026. `priceDelta(arr)` computes % change and direction (drop/rise) per platform for stat cards below the chart. `toggleDim(platform)` updates dimmed state. `chartRef` (useRef) references the Chart.js instance. A range selector renders 7D/14D/30D buttons. Each platform has a clickable legend chip that dims its dataset. `formatINR(n)` formats numbers with `en-IN` locale. A `<canvas>`-based custom tooltip is rendered via tooltip state. Styles from `PriceHistoryChart.css`. Note: similar PriceHistoryChart section exists on the Search page — reuse or extend that component if already implemented.

Depends on:#40
Waiting for dependencies
AI 85%
Human 15%
High Priority
1.5 days
Frontend Developer
#43

Implement AIVerdictCard for Results Page

To Do

As a frontend developer, implement the AIVerdictCard section for the Results page. This section renders an AI-powered recommendation card using `VERDICT_DATA` (type: 'buy', confidence: 87, priceVsAvg: '-15%', bestPlatform: 'Amazon') and `VERDICT_CONFIG` mapping verdict types (buy/wait/avoid) to badge CSS classes (`avc-buy`, `avc-wait`, `avc-avoid`). An `IntersectionObserver` (threshold: 0.3) triggers a confidence bar animation via `useState(0)` → `setFillWidth(verdict.confidence)` with a 150ms delay, guarded by `animatedRef.current` to fire only once. The card ref is `cardRef` (useRef). The verdict text supports dangerouslySetInnerHTML for inline `<strong>` tags. Four insight rows render from `verdict.insights` array with type-based icon and color (positive ✅ green, neutral 📦 blue, warning ⚠️ amber). A section label with decorative lines ('Smart Analysis') wraps the card. Styles from `AIVerdictCard.css`. Note: similar AIVerdictCard exists on the Search page — reuse or extend that component if already implemented.

Depends on:#40
Waiting for dependencies
AI 87%
Human 13%
High Priority
1 day
Frontend Developer
#44

Implement AlternativeProducts for Results Page

To Do

As a frontend developer, implement the AlternativeProducts section for the Results page. This is a static display section rendering `ALTERNATIVE_PRODUCTS` array (4 items: Samsung Galaxy M34 5G, Redmi Note 13 Pro 5G, realme narzo 60 5G, POCO M6 Pro 5G) as product cards. Each card shows: category eyebrow with `categoryIcon` emoji, product name, `priceMin`–`priceMax` range, star rating (numeric), review count, savings badge, and platform availability pills rendered from each product's `platforms` array using `ap-pill-amazon`, `ap-pill-flipkart`, `ap-pill-meesho` CSS classes. A `ratingClass` (ap-rating-good / ap-rating-avg) styles the rating display. Each card is an anchor tag linking to `/Results?q=<encoded-product-name>`. The section header includes an `ap-eyebrow` ('More Options'), `ap-title` ('Similar Products to Compare'), `ap-subtitle`, and a 'View All' link to `/Search` with an SVG arrow icon. A decorative `ap-divider` appears above the header. No state hooks are used — purely static render. Styles from `AlternativeProducts.css`. Note: similar AlternativesSection exists on the Search page — reuse card UI patterns if applicable.

Depends on:#40
Waiting for dependencies
AI 92%
Human 8%
Medium Priority
0.5 days
Frontend Developer
#48

Build Deal Scoring Algorithm

To Do

As a Backend Developer, implement the weighted deal scoring algorithm as specified in the SRD. Function signature: score_listings(listings: List[NormalizedProduct]) -> ScoredResult. Weights: Price 40% (lower = higher score), Rating 25% (higher = better), Reviews count 15% (more = better trust signal), Delivery speed 20% (faster = better). Normalize each dimension to 0–1 scale before applying weights. Return a ranked list with scores and the top recommendation. Apply AI verdict rules: current price vs 30-day average triggers 'wait'; all-time low triggers 'buy'; Meesho cheapest but rating < 3.5 triggers quality warning; prices within ₹100 triggers 'similar pricing' note. This module is consumed by both the Product Search API and AI Verdict API endpoints.

Depends on:#47
Waiting for dependencies
AI 45%
Human 55%
High Priority
1 day
Backend Developer
#49

Build Delivery Estimation Service

To Do

As a Backend Developer, implement a delivery estimation service that maps city inputs to delivery time estimates per platform. Accept city (str) and platform (str) as inputs. Maintain a mapping of tier-2 cities (Ahmedabad, Surat, etc.) to estimated delivery days per platform (Amazon Prime, Flipkart Assured, Meesho standard). Return structured delivery estimate: {days: int, label: str, is_fast: bool}. This is used in the normalized product data and contributes to the delivery speed dimension of the weighted scoring algorithm. Note: SRD specifies delivery time estimates as a user input and system output requirement.

Depends on:#47
Waiting for dependencies
AI 50%
Human 50%
Medium Priority
0.5 days
Backend Developer
#57

Build Alternatives Products API

To Do

As a Backend Developer, implement the GET /api/v1/alternatives endpoint using FastAPI. Accept query params: product_query (str), category (str, optional), max_budget (float, optional). Search and return 4–8 alternative or similar products in the same category across all three platforms. Each alternative product should include: name, category, price_min, price_max (across platforms), rating, review_count, platforms (array of available platforms), savings_vs_searched (percentage), and buy URLs per platform. This endpoint supports the AlternativeProducts section on Results page (6a0c6085 / c9a5a4d6) and AlternativesSection on Search page (27824525 / b7ce467d).

Depends on:#47#28#46
Waiting for dependencies
AI 40%
Human 60%
Medium Priority
1.5 days
Backend Developer
#59

Setup Frontend Error Boundaries

To Do

As a Frontend Developer, implement React Error Boundaries and global error handling for the Garnet-System React app. Create an ErrorBoundary component wrapping each page (Landing, Search, Results) to catch render-time errors gracefully. Implement a global API error handler in the API client (39e90447) that standardizes error responses (network errors, 422 validation errors, 500 server errors) into user-friendly toast notifications or inline error states. Add a loading skeleton component for async sections (ComparisonTable, PriceHistoryChart, AIVerdictCard) that shows while API calls are in-flight. Export shared ErrorBoundary, LoadingSkeleton, and ErrorMessage components from /src/components/shared/.

Depends on:#29#30
Waiting for dependencies
AI 45%
Human 55%
Medium Priority
1 day
Frontend Developer
#62

Extend Scraper Multi-Platform

To Do

As a Backend Developer, extend the web scraping service (a57ec7eb) to support additional Indian e-commerce platforms beyond Amazon.in, Flipkart, and Meesho. Add scrapers for: Snapdeal, Myntra, Jabong, and brand websites (Sony India, Noise, boAt, Firebolt). Each scraper must extract the same normalized fields: product title, current price, MRP, discount %, rating, review count, delivery estimate, seller name, and buy URL. Update the unified search_all_platforms() function to include these new scrapers using asyncio.gather for concurrent execution. Add platform identifier to each result. Update the platform_preference field in the search endpoint to support the new platforms. Handle cases where a product is not listed on a given platform.

Depends on:#60#46
Waiting for dependencies
AI 40%
Human 60%
High Priority
5 days
Backend Developer
#63

Build Advanced Filtering API

To Do

As a Backend Developer, implement the GET /api/v1/filter endpoint using FastAPI. Accept query params: product_query (str), platforms (comma-separated list including all supported platforms), min_price (float), max_price (float), min_rating (float), max_delivery_days (int), discount_min (float). Apply these filters server-side on the normalized product results from the search service. Return filtered and sorted product listings. This endpoint supports the advanced platform-specific filtering feature requested for all supported platforms (Amazon, Flipkart, Meesho, Snapdeal, Myntra, Jabong, brand sites). Note: The ResultsFiltersBar frontend components (f8ae9a55, 227d131e) depend on this endpoint for live filtered results.

Depends on:#23#47
Waiting for dependencies
AI 60%
Human 40%
Medium Priority
2 days
Backend Developer
#67

Update Frontend Multi-Platform UI

To Do

As a Frontend Developer, update the SearchForm platform selector (b1ed2bde, a84514e1) and ComparisonTable components (5c2eb167, bcbb3aaf) to support the expanded platform list beyond Amazon, Flipkart, and Meesho. Add platform options and visual badges for Snapdeal, Myntra, Jabong, Sony India, boAt, Noise, and Firebolt. Update platform color constants and CSS modifier classes (e.g., sf-platform-dot--snapdeal, ct-snapdeal, ct-myntra). Update the ResultsFiltersBar platform filter chips (227d131e, f8ae9a55) to include all new platforms. Ensure platform pills in AlternativeProducts cards (c9a5a4d6, 6a0c6085, b7ce467d, 27824525) also reflect the expanded platform set. Note: this task depends on temp_multi_platform_scraper being implemented so API responses include new platform data.

Depends on:#29#61
Waiting for dependencies
AI 55%
Human 45%
Medium Priority
2.5 days
Frontend Developer
#70

Add API Rate Limiting Protection

To Do

As a Backend Developer, implement rate limiting for the scraping-heavy API endpoints (POST /api/v1/search, GET /api/v1/price-history, GET /api/v1/alternatives) to prevent abuse and protect against anti-bot bans. Use slowapi or fastapi-limiter with Redis backend for distributed rate limiting. Configure limits: search endpoint 10 req/min per IP, price-history 20 req/min, alternatives 15 req/min. Add X-RateLimit-* headers to responses. Return 429 Too Many Requests with Retry-After header when limit is exceeded. Document rate limits in API responses and .env.example. Note: this complements the CORS and middleware setup in e58b11c8.

Depends on:#28#50
Waiting for dependencies
AI 60%
Human 40%
Medium Priority
1.5 days
Backend Developer
#17

Implement ResultsFiltersBar for Results

To Do

As a frontend developer, implement the ResultsFiltersBar section for the Results page. This section is a fully interactive filter bar using useState for platforms (multi-select chip toggles with rfb-chip-dot--amazon/flipkart/meesho classes), rating dropdown (RATING_OPTIONS array), delivery speed dropdown (DELIVERY_OPTIONS array), and min/max price inputs. The countActive() helper computes the number of active filters for badge display. Includes a Three.js AccentLine sub-component that mounts a WebGLRenderer with OrthographicCamera onto a ref'd div, using a custom ShaderMaterial with uTime, uActive, and uResolution uniforms — the GLSL fragment shader animates a sine-wave pulse line when filters are active (uActive > 0.5) vs. a flat 18% intensity when idle. Uses useRef for the mount element and animateRef for the animation loop, with useEffect for Three.js setup/teardown and useCallback for the resize handler. Imports THREE from 'three' and styles from ResultsFiltersBar.css.

Depends on:#16
Waiting for dependencies
AI 82%
Human 18%
High Priority
2 days
Frontend Developer
#18

Implement ComparisonTable for Results

To Do

As a frontend developer, implement the ComparisonTable section for the Results page. This section renders a static comparison table (ct-root > ct-inner) using PLATFORM_DATA array with entries for Amazon.in, Flipkart, and Meesho — each containing price, mrp, discount, rating, reviewCount, deliveryDays, deliveryLabel, seller, sellerTrust, buyUrl, and isBest flags. The renderStars() helper renders SVG star icons with a LinearGradient half-star (ct-half-grad) for fractional ratings, and ct-star--empty class for unfilled stars. formatReviewCount() abbreviates counts to 'k' notation. getDeliveryColorClass() applies ct-delivery-dot--warn or ct-delivery-dot--late classes based on delivery day thresholds. The isBest flag highlights the best-deal row. Includes an h2 heading and subheading with ct-product-label span. Imports from ComparisonTable.css. Note: A ComparisonTable component was previously implemented for the Search page — reuse or adapt that component.

Depends on:#16
Waiting for dependencies
AI 88%
Human 12%
High Priority
1 day
Frontend Developer
#19

Implement PriceHistoryChart for Results

To Do

As a frontend developer, implement the PriceHistoryChart section for the Results page. This section uses react-chartjs-2 Line chart with Chart.js modules registered: CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, Filler. State includes timeRange (useState defaulting to '30d') and hiddenPlatforms (useState object for per-platform toggle). generateDateLabels() produces the last 30 day labels in en-IN locale; generatePriceSeries() produces randomized price data with volatility and trend params. The three platform datasets (amazonPrices, flipkartPrices, meeshoPrices) use platformColors map with line colors (#FF7043, #1A73E8, #FFC107), matching bg fills, and fill:true with tension:0.35. getFilteredData() slices data based on timeRange (7d/14d/30d) and excludes hidden platforms. Time range toggle buttons (ranges array with 7d/14d/30d keys) and per-platform legend toggles call togglePlatform(). Imports from PriceHistoryChart.css. Note: A PriceHistoryChart was previously implemented for the Search page — reuse or adapt.

Depends on:#16
Waiting for dependencies
AI 85%
Human 15%
High Priority
1 day
Frontend Developer
#20

Implement AIVerdictCard for Results

To Do

As a frontend developer, implement the AIVerdictCard section for the Results page. This section features a VerdictSphere Three.js sub-component that mounts a PerspectiveCamera (FOV 40) renderer on a containerRef, rendering: a SphereGeometry(1, 48, 48) MeshStandardMaterial core sphere; a TorusGeometry(1.25, 0.04) outer glow ring with emissive color; and small orbiting SphereGeometry(0.06) particle meshes in a group. All Three.js colors and emissive values derive from the verdict's color prop. The verdicts object defines three states — buy (#43A047, TrendingUp icon), wait (#FF9800, Clock icon), avoid (#EF5350, AlertTriangle icon) — each with label, text, confidence percentage, cssClass, and icon. Uses useState, useEffect, useRef, and useMemo. Imports Sparkles, TrendingUp, Clock, AlertTriangle from lucide-react and THREE from 'three'. Styles from AIVerdictCard.css. Note: An AIVerdictCard was previously implemented for the Search page — reuse or adapt.

Depends on:#16
Waiting for dependencies
AI 83%
Human 17%
High Priority
1.5 days
Frontend Developer
#21

Implement AlternativeProducts for Results

To Do

As a frontend developer, implement the AlternativeProducts section for the Results page. This section renders a static ap-grid of anchor cards (ap-card) linking to /Results, using the alternativeProducts array of 4 smartphone entries each with id, category, name, priceMin, priceMax, rating, reviewCount, platforms array, and priceVsSearched value. Each card displays: ap-card-category span, ap-card-name h3, ap-card-meta div with price range (formatPrice() helper using toLocaleString en-IN with ₹ prefix) and rating block (ap-card-rating with ap-card-rating-stars using renderStars(), numeric rating, and ap-card-rating-count). Platform badges are mapped from the platforms array. The section includes an h2 heading (ap-heading) and subheading paragraph (ap-subheading). formatPrice uses toLocaleString('en-IN'). Imports from AlternativeProducts.css.

Depends on:#16
Waiting for dependencies
AI 90%
Human 10%
Medium Priority
0.5 days
Frontend Developer
#22

Implement CallToAction for Results

To Do

As a frontend developer, implement the CallToAction section for the Results page. This section has two interactive state flags: saved (useState boolean toggled by a 'Save Deal' / 'Saved!' button) and notifyEmail (useState boolean toggled by a price-drop notification checkbox/button). The Three.js decorative orb accent uses a canvas ref (canvasRef) with a WebGLRenderer (alpha: true), PerspectiveCamera (FOV 35, position z=8), and a central group containing: a SphereGeometry(0.7, 48, 48) sphere with MeshStandardMaterial (#4D90FE, emissive #1A73E8); two TorusGeometry rings — ring1 (radius 1.25, tube 0.03, #FF7043 emissive) rotated at x=PI*0.45/y=PI*0.15, ring2 (radius 1.5, tube 0.025, #FFC107 emissive) rotated at x=PI*0.6/y=-PI*0.2; and a SphereGeometry(0.08) particle (#FFEB3B, emissiveIntensity 0.8). Lighting uses AmbientLight(0xffffff, 0.6) plus two PointLights (#4D90FE and #FF7043). A resize handler reads parent.clientWidth for canvas sizing. Imports from CallToAction.css.

Depends on:#16
Waiting for dependencies
AI 84%
Human 16%
Medium Priority
1.5 days
Frontend Developer
#32

Integrate Search Page End-to-End

To Do

As a Tech Lead, verify the end-to-end integration between the Search page frontend implementation and the backend search API. Ensure the SearchForm component correctly calls the POST /api/v1/search endpoint with product, budget, platform, and city fields from the form state. Verify that ResultsSummary, ComparisonTable, AIVerdictCard, and PriceHistoryChart on the Search page correctly consume and render live API responses instead of static mock data. Confirm error states (product not found, budget exceeded, network error) are handled gracefully in the UI. Note: depends on frontend tasks (b1ed2bde, 63a693bc, 5c2eb167, 80aa70aa, 34bbeb59) and backend tasks (temp_backend_search_api, temp_backend_price_history_api, temp_backend_ai_verdict_api, temp_frontend_api_client).

Depends on:#14#23#25#12#13#24#11#29#10
Waiting for dependencies
AI 40%
Human 60%
High Priority
1.5 days
Tech Lead
#45

Implement EMIAndDetails for Results Page

To Do

As a frontend developer, implement the EMIAndDetails section for the Results page. This is the most complex section, comprising three sub-panels: (1) EMI Tab Panel — `activeTab` state (useState 'Flipkart') controls which platform's EMI rows render from `EMI_DATA` object keyed by Flipkart/Amazon/Meesho; each row shows platform logo badge (`ed-emi-platform-logo--flipkart/amazon/meesho` classes), description, monthly amount, tenure, and an optional 'Best Deal' badge for `isBest: true` rows. (2) EMI Calculator — `loanAmount` (useState '11000'), `tenure` (useState '12'), `interestRate` (useState '0') are controlled inputs; `calcEMI()` computes EMI using standard formula P*r*(1+r)^n/((1+r)^n-1) displayed as formatted INR output. (3) Seller Info Panel — renders `SELLERS` array (Cloudtail/RetailNet/TechZone) with platform dot indicators (`ed-seller-platform-dot--amazon/flipkart/meesho`), numeric rating, review count, and `<StarRating rating={...} />` sub-component that renders 5 `ed-star`/`ed-star--empty` spans. (4) Return Policies — renders `RETURN_POLICIES` array (Amazon/Flipkart/Meesho) as text rows. Styles from `EMIAndDetails.css`.

Depends on:#41
Waiting for dependencies
AI 83%
Human 17%
High Priority
2 days
Frontend Developer
#51

Integrate SearchForm with API

To Do

As a Tech Lead, verify the end-to-end integration between the SearchForm frontend component and the POST /api/v1/search backend endpoint. Ensure that form submission from SearchForm (b1ed2bde) correctly calls the search API via the shared API client (39e90447), passing product, budget, platform, and city. Verify the response is correctly routed to the Results page via URL params or React Router navigation state. Confirm loading states, validation errors (empty product), and API error states (network failure, no results) are handled gracefully in the SearchForm UI.

Depends on:#29#23#10#46
Waiting for dependencies
AI 30%
Human 70%
High Priority
1 day
Tech Lead
#65

Integrate SearchForm Backends

To Do

As a Tech Lead, verify the end-to-end integration between both SearchForm frontend components (Search page: b1ed2bde, a84514e1) and the POST /api/v1/search backend endpoint. Ensure form submission correctly calls the search API via the shared API client (39e90447) with product, budget, platform, and city. Verify multi-platform support (including new platforms: Snapdeal, Myntra, Jabong, brand sites) is reflected in the platform selector. Confirm loading states, validation errors, and API error states are handled gracefully. Note: this task corresponds to existing integration task a83f74c4 — if already covered, skip.

Depends on:#29#10#35#23
Waiting for dependencies
AI 50%
Human 50%
High Priority
1 day
Tech Lead
#68

Integrate Multi-Platform End-to-End

To Do

As a Tech Lead, verify the end-to-end integration between the multi-platform frontend UI updates and the extended multi-platform scraping backend. Ensure new platforms (Snapdeal, Myntra, Jabong, Sony India, boAt, Noise, Firebolt) appear correctly in the search form selector, comparison table, filter bar, and alternative products sections. Verify platform-specific data (price, MRP, discount, delivery, seller) from the extended scraper flows correctly into all UI components. Confirm 'Not listed' handling displays gracefully when a product is unavailable on a given platform. Verify buy links for brand sites open the correct product pages.

Depends on:#62#67
Waiting for dependencies
AI 45%
Human 55%
Medium Priority
2 days
Tech Lead
#69

Integrate Landing Search Navigation

To Do

As a Tech Lead, verify the end-to-end integration between the Landing page hero search bar (13ad8c9e) and the Search page SearchForm (b1ed2bde). Ensure clicking a category star in the LandingHero 3D galaxy or submitting the hero search bar correctly navigates to /Search with query params (q, p) pre-populated. Verify SearchForm's useEffect correctly reads these URL params on mount and pre-fills the product and platform fields. Confirm the CTA buttons in LandingCTA (a7847d12) navigate to /Search correctly.

Depends on:#2#10
Waiting for dependencies
AI 45%
Human 55%
Medium Priority
1 day
Tech Lead
#71

Integrate ResultsHeader with API

To Do

As a Tech Lead, verify the end-to-end integration between the ResultsHeader frontend section (Results page: c79fcb40) and the POST /api/v1/search backend endpoint. Ensure ResultsHeader replaces static productData (name, image, bestPrice, bestPricePlatform, lowestPrice, averageRating, reviewCount, platforms) with live data from the search API response. Verify platform badge chips render correctly for all supported platforms (including new ones). Confirm breadcrumb navigation from /Landing → /Search → /Results works correctly with live product name in the heading.

Depends on:#23#16
Waiting for dependencies
AI 50%
Human 50%
High Priority
1 day
Tech Lead
#33

Integrate Results Page End-to-End

To Do

As a Tech Lead, verify the end-to-end integration between the Results page frontend implementation and the backend APIs. Ensure the Results page receives search context (from SearchForm navigation or URL params) and uses it to call the product search API, price history API, and AI verdict API. Verify ResultsHeader, ComparisonTable, AIVerdictCard, PriceHistoryChart, ResultsFiltersBar, and AlternativeProducts all correctly render live backend data. Confirm filter bar interactions (platform toggle, rating, delivery, price range) correctly filter the live API response data client-side. Verify buy links point to live platform URLs returned by the API. Note: depends on frontend tasks (c79fcb40, 227d131e, bcbb3aaf, 8f843e9c, ede78ee8, 6a0c6085, 3dd8f6fe) and backend tasks (temp_backend_search_api, temp_backend_price_history_api, temp_backend_ai_verdict_api, temp_frontend_api_client).

Depends on:#18#19#20#25#29#23#16#21#17#22#24
Waiting for dependencies
AI 40%
Human 60%
High Priority
1.5 days
Tech Lead
#52

Integrate PriceHistory Chart API

To Do

As a Tech Lead, verify the end-to-end integration between the PriceHistoryChart frontend components (Search page: 34bbeb59, Results page: ede78ee8) and the GET /api/v1/price-history backend endpoint. Ensure chart components replace static mock/generated data with live API responses from the price history service. Verify date labels, platform price arrays, all-time low/high stats, and range selectors (7d/14d/30d) all correctly reflect API data. Confirm error and loading states are handled gracefully when price history is unavailable.

Depends on:#24#19#29#14
Waiting for dependencies
AI 30%
Human 70%
Medium Priority
1 day
Tech Lead
#53

Integrate AIVerdict Card API

To Do

As a Tech Lead, verify the end-to-end integration between the AIVerdictCard frontend components (Search page: 80aa70aa, Results page: 8f843e9c) and the POST /api/v1/ai-verdict backend endpoint. Ensure both AIVerdictCard instances replace hardcoded verdict data with live API responses routed through LiteLLM to GPT-5.4. Verify verdict type (buy/wait/avoid), confidence percentage, reasoning text, best platform, and insight bullets all render correctly from API response. Confirm the confidence bar animation (IntersectionObserver trigger) still functions with dynamic data. Confirm error handling when AI verdict endpoint is unavailable.

Depends on:#26#25#29#20#48#13
Waiting for dependencies
AI 35%
Human 65%
High Priority
1 day
Tech Lead
#54

Integrate ComparisonTable with API

To Do

As a Tech Lead, verify the end-to-end integration between the ComparisonTable frontend components (Search page: 5c2eb167, Results page: bcbb3aaf) and the POST /api/v1/search backend endpoint. Ensure both ComparisonTable instances replace static PLATFORM_DATA / mock products arrays with live normalized product data from the search API response. Verify price, MRP, discount, rating, review count, delivery info, seller name, buy URL, and best-deal flag all render correctly from API data. Confirm sort controls (Price / Discount / Rating), best-deal badge, and 'Buy Now' links to live platform URLs function correctly with dynamic data.

Depends on:#23#12#29#18
Waiting for dependencies
AI 30%
Human 70%
High Priority
1 day
Tech Lead
#56

Integrate EMIDetails with API

To Do

As a Tech Lead, verify the end-to-end integration between the EMIAndDetails frontend section (Results page: 6b0d88fe) and the GET /api/v1/emi backend endpoint. Ensure EMI tab panels (Flipkart/Amazon/Meesho) render live EMI plan data from the API instead of static EMI_DATA. Verify the EMI calculator's calcEMI() function remains client-side (no API call needed for calculation). Confirm seller info and return policies sections still render correctly. Verify loading and error states when the EMI endpoint is unavailable.

Depends on:#55#29#45
Waiting for dependencies
AI 30%
Human 70%
Medium Priority
0.5 days
Tech Lead
#58

Integrate Alternatives Sections API

To Do

As a Tech Lead, verify the end-to-end integration between the AlternativeProducts/AlternativesSection frontend components (Results page: 6a0c6085, Search page: 27824525) and the GET /api/v1/alternatives backend endpoint. Ensure both sections replace static ALTERNATIVE_PRODUCTS / alternatives arrays with live API data. Verify product cards render correctly with live price ranges, ratings, platform pills, and savings badges. Confirm '/Results?q=<encoded-product-name>' navigation links are correctly derived from live API product names.

Depends on:#21#57#15#29
Waiting for dependencies
AI 30%
Human 70%
Medium Priority
0.5 days
Tech Lead
#64

Integrate ResultsFiltersBar API

To Do

As a Tech Lead, verify the end-to-end integration between the ResultsFiltersBar frontend components (Results page: 227d131e, Search page: f8ae9a55) and the GET /api/v1/filter backend endpoint. Ensure filter state (platforms, rating, delivery, price range) correctly constructs API query params and calls the filter endpoint. Verify filtered results update ComparisonTable and other result sections dynamically. Confirm active filter pills reflect applied filters from live API responses. Verify the AccentLine Three.js shader animates correctly when live filters are active.

Depends on:#63#17#40
Waiting for dependencies
AI 50%
Human 50%
Medium Priority
1.5 days
Tech Lead
#66

Integrate EMI Calculator API

To Do

As a Tech Lead, verify the end-to-end integration between the EMIAndDetails frontend section (Results page: 6b0d88fe) and the GET /api/v1/emi backend endpoint. Ensure EMI tab panels render live EMI plan data from the API instead of static EMI_DATA. Verify the EMI calculator's calcEMI() remains client-side. Confirm seller info and return policies render correctly. Verify loading and error states when the EMI endpoint is unavailable. Note: this task corresponds to existing integration task 25c07d9b — check for duplication before executing.

Depends on:#45#55
Waiting for dependencies
AI 50%
Human 50%
Medium Priority
1 day
Tech Lead
Landing design preview
Landing: View Best Deals
Search: Enter Product Name
Search: Set Max Budget
Search: Select Any Platform
Results: Sort by Lowest Price
Results: View Discount Percentages
Results: Check Price History Low
Results: Read AI Verdict
Results: Filter by Rating
Results: Click Cheapest Buy Link