boboko / analytics · competitive survey

What analytics elsewhere can do that boboko can't yet

A feature-by-feature pass across Shopify, WooCommerce Analytics, and PrestaShop's stats modules — sourced, not recalled from memory — checked against what Lunar's admin Dashboard actually ships today and what raw data already sits in lunar_orders/lunar_carts unused. This is genuinely new territory for boboko — most rows below land on partial or missing, and that's an honest read, not an undersell.

● have ◐ partial ○ missing
01

Sales & revenue dashboard

What loads the moment staff open the admin panel — this is the one area where Lunar ships more than expected.

Revenue / order-count stat cards with period-over-period trend
have
Verified from source: OrderStatsOverview widget — today vs. yesterday, last 7 vs. prior 7, last 30 vs. prior 30 days, both order count and sub-total, with up/down trend icons. Registered by default on Lunar's Dashboard page, and boboko's panel (3dealer/app/Providers/PanelServiceProvider.php) registers the stock panel with no pages()/Dashboard override — this ships as-is.
Sales-over-time chart (revenue + order count, 12-month trend)
have
OrdersSalesChart — ApexCharts area chart, monthly buckets over the trailing year, dual y-axis (order count / sub-total). Same "no override" reasoning as above applies to every widget on this page.
Average order value (AOV) trend, segmented by customer group
have
AverageOrderValueChart — one series per CustomerGroup plus a synthetic guest series, monthly average of sub_total over the trailing year.
New vs. returning customer split
have
NewVsReturningCustomersChart reads Order::new_customer, a real boolean column set by Lunar\Jobs\Orders\MarkAsNewCustomer (true when no prior order existed for that customer at placement time) — not a cosmetic flag.
Live/latest-orders feed on the dashboard
have
LatestOrdersTable — last 10 placed orders, 60s polling, reuses OrderResource's own table columns.
Real-time dashboard vs. scheduled email reports
partial
The dashboard widgets above poll every 60s (near-real-time, pull-based) — there is no scheduled/emailed report anywhere in Lunar or boboko-core. Industry pattern researched: real-time suits operational checks, scheduled digest suits weekly/monthly strategic review — boboko only has the first half.
02

Product & catalog performance

Which products are actually selling, and what's about to run out.

Best-sellers / top-products report
have
PopularProductsTable — groups lunar_order_lines by product identifier over the trailing 12 months, ranked by quantity sold, with revenue (sub_total) alongside. Physical products only (whereType('physical')).
Per-product detail stats (views, conversion, revenue for one SKU)
missing
PrestaShop's statsproduct module was researched as the comparison point (per-product page-view + sales detail) — boboko has no page-view capture at all (see 04), so even the sales half of this can't be built without the traffic half.
Catalog-wide statistics (active/inactive counts, category breakdown)
missing
PrestaShop's statscatalog module researched as the reference. No equivalent surface in Lunar or boboko-core — would be a straightforward aggregate over lunar_products/lunar_collections, just not built.
Inventory / stock-turnover report
missing
ProductVariant::$stock is a plain point-in-time integer column — no stock-movement ledger or history table exists in lunarphp/core (grepped the models and migrations directories). Turnover reporting needs a time series of stock levels or receipts/sales deltas; today's schema only has "current stock," so there's nothing to compute turnover from yet, not just a missing report.
Low-stock / reorder alerting surfaced in a report
missing
The Cart survey already noted ProductIndexer's in_stock field exists for search/listing purposes — nothing aggregates it into a "low stock" admin view or report.
03

Customer analytics

Value and behavior at the level of one shopper, or a group of them.

Per-customer order count / average spend / lifetime spend
have
Verified from source: CustomerStatsOverviewWidget on the customer view page — total orders, average spend, and total spend, computed live from orders()->sum()/average(). This is per-customer lookup, not an aggregate report across all customers.
Customer Lifetime Value (CLV) as a store-wide metric/segment
partial
The per-customer total-spend figure above is the raw ingredient, but there's no store-wide CLV report, no ranking of customers by CLV, and no predictive/forward-looking CLV — WooCommerce Analytics' Customer Analytics extension (researched) computes this plus churn and RFM segments, none of which exist here.
Cohort retention analysis
missing
Researched as a WooCommerce/Metorik feature (retention rate by signup-month cohort). No cohort concept, table, or query exists anywhere in Lunar or boboko-core.
04

Behavioral & funnel tracking

What happens before an order exists — the storefront side neither repo instruments at all.

Page-view / product-view event capture
missing
Grepped both repos for gtag/dataLayer/GA4/any client-side event tracker — zero hits. No storefront event of any kind is dispatched, captured, or stored anywhere.
Conversion funnel (view → add to cart → checkout → purchase)
missing
Shopify's funnel report (researched) needs a session-scoped event stream across all four stages. boboko has only the last stage as durable data (a placed Order) — no view or add-to-cart events exist to build the earlier steps from, consistent with the Cart survey's finding that Lunar dispatches zero cart events.
Abandoned-cart aggregate value/rate reporting
partial
Distinct from the Cart survey's per-cart admin lookup (CartResource, already shipped) — this is a rolled-up metric: total abandoned value this week, abandonment rate as a percentage of carts started. The underlying rows exist in lunar_carts/lunar_cart_lines (same query CartResource's Abandoned tab already runs), but nothing aggregates them into a rate or a trend — it's list-only today.
Traffic-source / campaign attribution (UTM-based)
missing
No UTM capture, no marketing/session table anywhere in either repo. Researched as the backbone of Shopify's/GA4's acquisition reporting — would need a session table capturing utm_source/medium/campaign at first touch, tied forward to the eventual order.
05

Tax, accounting & export

Getting numbers out of boboko and into someone else's books.

Tax / VAT breakdown captured per order
have
Verified from source: lunar_orders migration stores both tax_breakdown (JSON, per-rate detail) and tax_total as real columns on every placed order — this is genuine underlying data, not inferred.
Tax / VAT report for accounting (e.g. by tax zone, by period)
partial
The per-order data above is complete enough to build this from, but nothing aggregates tax_breakdown/tax_total across orders into a filing-ready report by TaxZone or period — no such widget, page, or query exists in Lunar or boboko-core.
CSV / accounting-software export of orders or sales data
missing
Grepped for Exporter/ExportAction/Excel:: across lunarphp/lunar and boboko-core's src — no hits. Filament ships export actions as a first-party feature elsewhere in the ecosystem; nothing here wires one up for orders.
Sales by channel
partial
Order::channel_id is a real, always-populated foreign key (verified in the lunar_orders migration) — every order already knows its channel. No report groups by it; the dashboard's charts are all channel-blind.
06

Audit trail vs. analytics

A distinction worth being explicit about, since it's easy to mistake one for the other.

Activity log (Spatie activitylog) on core models
have
Verified from source and docs/lunar.md's Activity Logging section: Lunar\Base\Traits\LogsActivity covers Order, Cart, Product, Customer, and 15 other models, recording only dirty attributes per change under the lunar log name.
This counts as analytics
missing
It doesn't, and isn't listed as "have" anywhere above for that reason — activity log is a per-record change history for compliance/support ("who edited this order's shipping address"), not aggregate reporting ("how much revenue this month"). No row in this survey is satisfied by activity-log data.