boboko / customer accounts · competitive survey

What customer accounts elsewhere can do that boboko can't yet

A feature-by-feature pass across Shopify, WooCommerce, and PrestaShop's account layer — sourced, not recalled from memory — checked against what Lunar's Customer/Address/CustomerGroup models actually support today and what exists (or doesn't) in boboko-core and 3dealer right now. For deciding what to design next, not a build order.

● have ◐ partial ○ missing
01

Whether an account exists at all

The storefront-facing account experience, as distinct from staff/admin auth in Modules\Core\Auth.

Customer↔User linking (data model)
have
Fully modeled by Lunar core — Customer::users() / User::customers() via customer_user pivot (LunarUser trait), plus User::latestCustomer().
Customer record auto-created on signup
have
Modules\Core\Customer\Listeners\CreateCustomerForUser attaches a new Customer to every User on UserCreated, gated by config('core.auto_create_customer_for_user').
Storefront login / registration UI
missing
3dealer has no auth scaffolding at all — no Breeze/Fortify/Sanctum in composer.json, no login/register views, nothing in routes/web.php. Only Modules\Core\Auth's Filament staff panel login exists.
Account/profile page (name, addresses, orders)
missing
No AccountController, no account/profile route, no matching Blade views anywhere in 3dealer's app/ or resources/views — confirmed by exhaustive grep.
Account nav link in header
missing
resources/views/components/header.blade.php has a cart icon and a search button but no account/login link at all — not even a dead one. The cart icon itself links to /cart, which also has no matching route, matching this codebase's known stubbed-UI pattern.
02

Order history & tracking

Letting a customer see and follow their own orders without contacting support.

Order history data (per customer)
have
Fully modeled — Customer::orders() and User::orders() both exist (Lunar\Models\Order), with status, line items, addresses, and transactions already relational.
Self-service order history / status page
missing
No storefront route or controller reads Order for a logged-in customer — the data exists, nothing surfaces it. Shopify's rebuilt (2026) customer-accounts UI and PrestaShop's order-detail tracking page are both native; WooCommerce ships this in My Account by default.
Shipment tracking numbers surfaced to customer
missing
No tracking-number field found on Order/OrderLine/shipping models in vendor/lunarphp/core; PrestaShop's tracking module patches this same gap with a third-party add-on, so it isn't a "native everywhere" bar either.
Reorder / buy-again from order history
missing
Needs an order-history UI to exist first (see above) plus a "re-add these lines to cart" action — Lunar's Cart::add() already supports the mechanics, nothing wires an Order line back into a new cart.
03

Saved addresses

What a returning customer doesn't have to retype.

Multiple saved addresses per customer
have
Customer::addresses() (HasMany) — Lunar\Models\Address has no cap on count.
Separate default shipping / billing address
have
Address::shipping_default and billing_default booleans; AddressObserver auto-unsets the previous default when a new one is flagged, so only one of each can be true at a time.
Self-service address book (add/edit/delete UI)
missing
Only Filament's staff-facing AddressRelationManager (src/Customer/RelationManagers/AddressRelationManager.php) touches addresses today — that's an admin back-office view, not a storefront one. No customer-facing CRUD exists.
Address autocomplete / validation at entry
missing
Nothing in lunarphp/core or boboko-core wires a geocoding/validation service — this is a storefront-only concern layered on top of the plain line_one…postcode fields.
04

Login & identity

How a customer gets in, and how forgiving that path is.

Email + password login
missing
No storefront auth guard/routes configured — see 01. Modules\Core\Auth\Services\OtpService/UserOtpService exist but are wired to staff/Filament login, not a customer-facing flow.
Passwordless / magic-link / OTP login
partial
UserOtpService and UserOtpMail already implement an OTP-by-email mechanism for the staff panel — the building block for a customer-facing passwordless flow exists, just not exposed to a storefront route. Shopify ships this as sign-in links (6-digit email code) by default in its 2026 customer accounts.
Social login (Google / Apple / Facebook)
missing
No laravel/socialite in either composer.json. Shopify offers Google/Facebook sign-in and "Sign in with Shop" natively; this would be a from-scratch integration here.
Guest checkout → account conversion
missing
No storefront checkout flow exists yet in 3dealer to convert from — this depends on checkout being built before it's meaningful. Lunar's Cart::user_id/customer_id nullable-until-claimed design would support it once a checkout and account UI exist.
05

Payments & saved methods

Whether a returning customer can skip re-entering card details.

Saved payment methods on account
missing
No tokenized-card storage model found in lunarphp/core or boboko-core's payment integration. Even Shopify gates this behind Enterprise; WooCommerce's version depends entirely on gateway-level tokenization (e.g. Stripe), not a core feature.
06

Wishlist & saved items

Keeping track of products outside the cart.

Wishlist / saved-for-later products
missing
No wishlist model, table, or reference anywhere in src/ or vendor/lunarphp — grep confirms zero hits. Shopify also has no native wishlist (third-party apps like Flits fill the gap); WooCommerce/PrestaShop are the same story via plugins, so this is a genuinely common gap, not a boboko-specific one.
07

Groups, pricing & B2B

Where boboko is already ahead of a typical single-tenant storefront — Lunar's CustomerGroup does real work here.

Customer groups for differentiated pricing/visibility
have
CustomerGroup model plus HasCustomerGroups trait — Product::customerGroup() scope and Price's polymorphic customer-group awareness are both real, shipped behavior, not scaffolding.
Scheduled group availability (time-boxed access)
have
HasCustomerGroups::scheduleCustomerGroup() / unscheduleCustomerGroup(), backed by CanScheduleAvailability — supports a starts_at/ends_at window per group, e.g. early access for wholesale.
Multi-user company / B2B accounts
partial
Customer::users()->sync([...]) already supports attaching several Users to one Customer record — the data model allows a shared company account today, but nothing (invite flow, role/permission split between company users, storefront switch-account UI) is built on top of it. PrestaShop's "Multi-User Customer Account" add-on is the closest native comparison, and it's a paid third-party module there too.
Self-service customer-group selection at registration
missing
Groups exist and are assignable (HasCustomerGroups::bootHasCustomerGroups() auto-syncs default groups on creation), but nothing lets a customer request/select a group like "wholesale" at signup — that's currently a staff-only Filament action via CustomerResourceExtension.
08

Loyalty, retention & data rights

Longer-tail account features — noted for completeness, not depth (data rights specifically overlaps a separate Privacy survey).

Loyalty / rewards points program
missing
No points/loyalty model anywhere in lunarphp/core or boboko-core — Discount's BuyXGetY type is the closest primitive, but it's a promo mechanic, not an accruing balance. PrestaShop and WooCommerce both rely on third-party modules for this too (Knowband, Webkul, Yith).
Self-service data export / account deletion
missing
The only related tool is boboko:anonymize — a local-environment-only dev command that scrubs users/lunar_customers for testing, not a customer-facing GDPR flow. WooCommerce's closest native equivalent is also a paid add-on (Data Privacy Manager); flagged briefly here, full treatment belongs to the separate Privacy survey.
Subscription / recurring-order management
missing
No subscription model, billing-cycle field, or recurring-cart concept found in lunarphp/core. This is WooCommerce Subscriptions/Shopify-app territory on the platforms researched too — not a core-package feature anywhere.