A final-year project that scrapes a fashion retailer's sale pages, tracks every product's price history in MongoDB, and labels each discount as real, fake or unverified.


SaleSniffer checks whether online sale prices are genuine. It tracks products from Sapphire, a Pakistani fashion retailer, records every price it sees over time, and uses that history to judge whether a discount is a real price drop or a markup followed by a markdown. Shoppers can browse verdicts or paste a product link to check it.
This was a two-person final-year project. My teammate wrote the original Sapphire scraper and the rule-based verification engine with its unit tests. I built the Next.js frontend end to end, added the FastAPI service that exposes products, verdicts and admin jobs, extended the scraper with single-product lookups and image handling, wrote the price-history seeding and data clean-up scripts, and merged both codebases into one monorepo.
The backend is Python: requests and BeautifulSoup parse the server-rendered listing pages, PyMongo writes to MongoDB, and FastAPI serves a paginated, filterable REST API. The verification engine turns each price history into features (average, minimum, maximum, standard deviation, number of price changes, a recent-spike check and the real discount against the original price), weighs real against fake signals, and declines to judge when there are fewer than three data points. The frontend is Next.js 16 with React 19, Tailwind CSS 4, SWR for data fetching, Recharts for price charts and GSAP for landing-page animation.