@php $chartData = [ 'trending' => $trending->values(), 'geo' => $demandByState->map(fn ($row) => ['state' => $row->shipping_state, 'orders' => (int) $row->orders])->values(), ]; @endphp
Trending Products
Ranked by week-over-week growth in views + searches
@if ($trending->isEmpty())

Not enough data yet.

@else @endif
Demand by State
Orders placed, last 30 days · top 6 states
@if ($demandByState->isEmpty())

Not enough data yet.

@else @endif
Top Searched Keywords

A low "Avg. Results Found" means customers are searching for something we don't carry — worth sourcing.

@forelse ($topKeywords as $row) @empty @endforelse
KeywordSearchesAvg. Results FoundResearch
{{ $row->search_term }} {{ number_format($row->searches) }} {{ round($row->avg_results) }} CJ Printful
No searches logged yet.
Out-of-Stock Demand

Products customers are viewing but currently have an out-of-stock variant.

@forelse ($outOfStockDemand as $row) @empty @endforelse
ProductDemand SignalsFind Replacement
{{ $row['title'] }} @if ($row['level'] === 'High') High @elseif ($row['level'] === 'Medium') Medium @else Low @endif CJ Printful
No out-of-stock demand signals.
Forecasting is based on historical MySQL sales & search data (moving averages). This is an estimate, not a guarantee.
@vite(['resources/js/charts-demand.js'])