← All projects

Advanced project · Week 7

Product Search Dashboard

Combine API data, debounced search, filters, sorting, pagination, modules, and tests.

The problem

This project is the closest thing to a real production feature in the whole course — the exact combination of concerns a junior developer ships in their first few months.

User stories

  • As a user, I want to search products as I type, without spamming requests, so results feel responsive but efficient.
  • As a user, I want to filter and sort results, so I can find what I need quickly.
  • As a user, I want paginated results, so large result sets stay fast and readable.

Planning checklist

  • Split the app into modules: api, state, filters, rendering
  • Decide the debounce delay and how it interacts with loading state
  • Define the sort and filter options and their data contracts

Suggested data structure

const dashboardState = {
  query: "",
  filters: { category: "all", minPrice: 0 },
  sort: "relevance",
  page: 1,
  results: [],
};

UI requirements

  • A debounced search input
  • Filter controls (category, price range) and a sort selector
  • Pagination controls and a results grid

Build milestones

Check off each milestone as you complete it — saved to this device.

…

0%

Testing checklist

  • Filtering and sorting compose correctly together
  • Pagination shows the correct slice of results for each page
  • Debounce prevents a request from firing on every keystroke

Completion criteria

…

0%

Progressive support

RequirementsPlanningStarterHintsReference Solution
Bonus features
  • Persist filters/sort in the URL query string
  • Add a 'no results, try broadening your filters' suggestion
  • Virtualize the results grid for very large datasets