Dashboard
Overview of store performance — last 30 days, synthetic demo data.
Revenue (30d)
$48,210
+12.4%
Orders
1,284
+6.1%
New customers
312
+3.8%
Refund rate
1.9%
-0.4%
Recent orders
View all| Order | Customer | Status | Total | Date |
|---|---|---|---|---|
| #10482 | AV Anna Vovk | Paid | $142.00 | Sep 7 |
| #10481 | JK John Keller | Pending | $89.50 | Sep 7 |
| #10480 | MS Maria Solis | Paid | $212.30 | Sep 6 |
| #10479 | TB Tom Baxter | Refunded | $54.00 | Sep 6 |
| #10478 | EL Ewa Lis | Paid | $318.90 | Sep 5 |
Top products
Wireless earbuds82%
Canvas backpack61%
Steel water bottle47%
Desk lamp33%
Under the hood — PHP Laravel
This stand isn't just static markup — the layout mirrors real Laravel structure: Blade components for the UI, an Eloquent-backed controller for the data. Drop it into an existing app or scaffold a new one on top.
resources/views/components/stat-card.blade.php
{{-- Reusable stat card, used on every dashboard/report page --}} @props(['label', 'value', 'trend' => null]) <div class="stat-card"> <span class="stat-label">{{ $label }}</span> <span class="stat-value">{{ $value }}</span> @if(!is_null($trend)) <span class="stat-trend {{ $trend >= 0 ? 'up' : 'down' }}"> {{ $trend >= 0 ? '+' : '' }}{{ number_format($trend, 1) }}% </span> @endif </div>
app/Http/Controllers/OrderController.php
public function index(Request $request) { $orders = Order::with('customer') ->when($request->status, fn ($q, $status) => $q->where('status', $status) ) ->latest() ->paginate(15); // $stats is computed once and cached for 5 minutes $stats = Cache::remember('dashboard_stats', 300, fn () => $this->metrics->forLast30Days() ); return view('orders.index', compact('orders', 'stats')); }