flowchart TD A[React Frontend] -->|POST /api/products/:id/fetch| B[Node.js Backend] A -->|GET /api/products/:id/reviews| B A -->|GET /api/products/:id/aggregate| B B -->|Fetch reviews on-demand| C[Simulated Scraper Server] B -->|Persist reviews| D[MySQL Database] C --> B D --> B
Multi-Source Product Review Aggregator
Full-Stack Web Application Project
Course lectures and practices for JavaScript full‑stack web development with AI‑assisted workflows.
Objective
Build a full-stack web application that fetches, stores, and displays product reviews from multiple sources.
Real-World Context: E-Commerce & Digital Marketing
In today’s competitive e-commerce landscape, customer reviews are critical decision-making factors. Studies show that:
- 93% of consumers read online reviews before making a purchase
- Products with reviews have 270% higher conversion rates than those without
- Multi-source review aggregation increases buyer confidence by providing diverse perspectives
However, products are often sold across multiple platforms (Amazon, BestBuy, Walmart, etc.), making it difficult for:
- E-commerce managers to monitor brand reputation across channels
- Marketing teams to analyze customer sentiment and identify pain points
- Product managers to prioritize feature improvements based on feedback
- Customers to compare reviews from different sources in one place
Your mission: Build a Multi-Source Product Review Aggregator that solves this problem by centralizing reviews, calculating meaningful statistics, and presenting actionable insights.
Business Value
This type of application is valuable for:
- E-commerce platforms — Enrich product pages with cross-platform reviews
- Brand monitoring tools — Track product reputation across multiple retailers
- Market research firms — Analyze customer sentiment at scale
- Comparison websites — Provide comprehensive product insights
Project Description
You are tasked with developing a web application using React (frontend) and Node.js (backend) that aggregates product reviews from multiple e-commerce platforms. A simulated scraper server will be provided to mimic external sources (Amazon, BestBuy, Walmart). A scrapper is a program that extracts data from websites, here it extracts reviews from e-commerce sites.
Core Functionality
The system works on-demand: reviews are fetched only when a user explicitly requests them (avoiding unnecessary API calls and respecting rate limits). Once fetched, reviews are persisted in a MySQL database so that:
- Aggregated statistics can be calculated and displayed instantly
- Review lists remain available without repeated external calls
- Historical data can be tracked over time
- Duplicate reviews are automatically prevented
Development Approach
This project will be built incrementally across 6 practice sessions, where each session builds upon the previous one:
- Practice 1 — Static HTML/CSS prototypes
- Practice 2 — JavaScript fundamentals and DOM manipulation
- Practice 3 — React components and frontend interactivity
- Practice 4 — Node.js/Express backend and REST APIs
- Practice 5 — MySQL database integration and persistence
- Practice 6 — Full-stack integration with external scraper service
You won’t build everything at once! Each practice focuses on specific skills and gradually assembles the complete application.
LLM-Assisted Development
Throughout the course, you’ll use Large Language Models (GitHub Copilot, ChatGPT, Claude, etc.) to accelerate development. Key skills:
- Write clear prompts with context and requirements
- Critically evaluate generated code for correctness and security
- Iterate and refine outputs to match specifications
- Understand the code you’re using (LLMs help, but don’t replace learning)
LLMs are productivity tools, not replacements for thinking. You must:
- Specify what to build clearly
- Evaluate if the generated code meets requirements
- Debug when things don’t work as expected
- Integrate components into a coherent system
Success = Human judgment + AI assistance
Technical Overview
The following sections provide a complete technical reference for the project. Remember: you’ll implement these incrementally across the 6 practices, not all at once!
Frontend Requirements (React)
The frontend is responsible for displaying products, fetching reviews on-demand, and visualizing aggregated statistics. Suggested components:
ProductPage
- Displays product name and info.
- Button “Fetch Reviews” triggers
POST /api/products/:id/fetch
. - Shows overall average rating and total number of reviews.
SourceBreakdown
- Table or bar chart showing average rating per platform.
ReviewList
- Displays individual reviews with author, rating, comment, and date.
- Supports pagination or filtering by source.
ReviewStats
- Histogram of 1–5 star ratings.
- Optional: timeline chart showing trends over time.
Data fetching hooks
Example:
useProductReviews(productId)
to call backend endpoints:POST /api/products/:id/fetch
→ fetch reviewsGET /api/products/:id/reviews
→ get persisted reviewsGET /api/products/:id/aggregate
→ get aggregated statistics
Backend Requirements (Node.js + Express)
- Fetch on-demand from the simulated scraper server.
- Persist reviews in MySQL for future use.
- Provide the following API endpoints:
Method | Endpoint | Description |
---|---|---|
POST | /api/products/:id/fetch |
Fetch reviews from scraper and store in MySQL |
GET | /api/products/:id/reviews |
Return all persisted reviews for the product |
GET | /api/products/:id/aggregate |
Return overall average, per-source averages, and rating histogram |
MySQL Database Schema (Simplified)
CREATE TABLE reviews (
id INT AUTO_INCREMENT PRIMARY KEY,
VARCHAR(50) NOT NULL,
product_id source VARCHAR(50) NOT NULL,
VARCHAR(50) NOT NULL,
review_id VARCHAR(100),
author INT CHECK (rating BETWEEN 1 AND 5),
rating VARCHAR(255),
title body TEXT,
created_at DATETIME,
fetched_at DATETIME,UNIQUE KEY(product_id, source, review_id)
);
review_id + source + product_id
ensures uniqueness and avoids duplicates.fetched_at
tracks when the review was retrieved.
Frontend → Backend → Scraper Flow
Explanation:
- Frontend triggers backend to fetch reviews on-demand.
- Backend calls the simulated scraper to get reviews from multiple platforms.
- Reviews are persisted in MySQL.
- Frontend fetches reviews or aggregated stats from the backend to display charts, tables, and lists.
Pedagogical Goals
- Backend: Node + Express, REST APIs, MySQL persistence, data aggregation
- Frontend: React, state management, async data fetching, visualizations
- Full-Stack Integration: Connecting frontend, backend, database, and external services
- LLM-Assisted Development: Effective prompt engineering, critical code evaluation
- Real-World Skills: E-commerce data analysis, multi-source integration patterns