Carspace User Dashboard
New carspace-user-dashboard -React
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/samsiani/carspace-user-dashboard/releases/download/v5.11.0/carspace-dashboard-v5.11.0.zipReadme
=== Carspace User Dashboard === Contributors: carspace Tags: dashboard, crm, woocommerce, react, spa, car-dealer Requires at least: 6.0 Tested up to: 6.7 Requires PHP: 7.4 Stable tag: 5.11.0 License: Proprietary License URI: https://artcase.ge
Car dealer CRM dashboard — React SPA with WordPress REST API backend.
== Description ==
Replaces the WooCommerce My Account dashboard with a self-contained React single-page app. Lets dealers see their assigned cars, invoices, port-images, support tickets, and notifications. Admins manage transport prices, auction fees, title codes, and user tiers from the same UI.
- React SPA mounted via the
[carspace_app]shortcode - REST API namespace
carspace/v1powers every screen - Auto-updates from GitHub Releases (no .org plugin directory needed)
== Changelog ==
= 5.11.0 =
- Persist
dealer_fee_paidandcommission_paidper invoice. The form had inputs for "how much of the dealer fee / commission has been paid" since v5.x, but the backend silently dropped them on save andhydrate_invoicereturned0hardcoded — same data-loss pattern as v5.10.0's items / customer fields. Adds DB v2.1: two newDECIMAL(12,2) DEFAULT 0columns onwp_carspace_invoices, idempotent migration, and full create / update / hydrate wiring. - Redesign the print invoice (
InvoicePrint) to match the dashboard's visual language — Geist + Noto Sans Georgian font stack, restrained slate typography, the platform's blue accent on the vehicle row icon, lighter card backgrounds with the same 10 px radius the dashboard uses. Adds@page A4margins, hides empty sections (no vehicle row when there's no car, no notes block when the field is empty). The previous design used a heavy dark-gray brand mark andInter— both replaced. - Bundle Noto Sans Georgian (variable) so Mkhedruli characters render correctly in the dashboard and the printed invoice without any external CDN.
= 5.10.0 =
- Fix invoice round-trip: items / customer email / customer phone / customer company now persist correctly across save → reload → edit. The form's data shape was
{ description, quantity, unit_price, total, paid }per item, but the DB schema only hadmake,amountetc., so on save the API stuffeddescriptionintomakeandtotalintoamount, droppingquantityandunit_priceentirely. On read, those fields came back as the legacy keys, so the edit form sawdescription=undefined, quantity=undefined, unit_price=undefinedand rendered empty. - DB v2.0: add
description VARCHAR(255),quantity DECIMAL(10,2),unit_price DECIMAL(12,2)towp_carspace_invoice_items, andcustomer_email VARCHAR(255)towp_carspace_invoices. Migration is idempotent — INFORMATION_SCHEMA-checked; existing rows keep theirmake/amountvalues, andhydrate_invoicefalls back to those when the new columns are NULL so legacy invoices read coherently. update_invoice_endpointnow also acceptscustomer_phone(writescustomer_personal_id),customer_email, andcustomer_company_name— they were silently dropped before.hydrate_invoicenow returnscustomer_email,customer_phone, and per-itemdescription,quantity,unit_price,total(in addition to the legacymake,amountkeys for any caller still reading those).
= 5.9.2 =
- Dashboard chart:
<ResponsiveContainer width="100%" height="100%">would log "width(-1) and height(-1) of chart should be greater than 0" on first render because parent height resolution from a<CardContent>wasn't immediate. Set the chart's height to a fixed220(matches the wrapperh-[220px]), so recharts no longer needs to ask the parent at all. Cosmetic console warning gone, charts render the same. - Removed redundant
await import('@/stores/car-store')inlib/api.ts— the store was statically imported by 5 other files anyway, so the dynamic import was a no-op that produced a Rollup warning on every build.
= 5.9.1 =
- Fix blank dashboard on v5.9.0 caused by an
Uncaught TypeError: O is not a functionin the recharts chunk. The previous Vite manualChunks config splitrechartsandd3-*into one bucket while their bundled-d3 helpervictory-vendorfell into the catch-allvendorchunk — that chunk boundary in the middle of recharts' cyclical d3 imports broke runtime evaluation. Drops the manualChunks catch-all and lets Rollup attach lazy-route-only deps (recharts → DashboardPage, react-day-picker → date filters, @tanstack/react-table → grids, react-hook-form/zod → forms) to whichever lazy chunk imports them. First paint goes from ~265 KB gz to ~225 KB gz on non-dashboard routes. - No PHP / DB changes.
= 5.9.0 =
- React SPA bundle split. The single 1.6 MB main bundle is gone — first paint now downloads ~265 KB gzipped (main + react-vendor + vendor) instead of ~468 KB. Each route is its own chunk loaded on demand:
recharts(~75 KB gz) only downloads when the dashboard opensreact-day-picker+date-fns(~19 KB gz) only when a date filter mounts@tanstack/react-table(~14 KB gz) only on Cars / Invoices gridsreact-hook-form+zod(~28 KB gz) only on form pages
- Vendor chunks are content-hashed and stable between releases — a code-only update means the browser re-downloads
main(~38 KB gz) and the changed page chunks, not the entire app. - React source is now version-controlled at github.com/Samsiani/carspace-dashboard-source.
= 5.8.0 =
- DB v1.9: add
vin_lowerSTORED generated column onwp_carspace_invoice_itemsplus a new compound index(vin_lower, invoice_id). Every VIN lookup (inget_by_vin,get_buyer_by_vin,batch_vin_lookup, andget_dashboard_stats) was rewritten to compare againstvin_lowerdirectly, removing theLOWER(it.vin)function call that previously defeated the index. The oldidx_vin_invoice (vin, invoice_id)is dropped — it's no longer referenced by any query and was costing write overhead on every invoice item insert. - No data change: the column is computed from the existing
vincolumn at write time by MariaDB itself, so existing rows are populated automatically.
= 5.7.1 =
- Add this readme.txt so WordPress shows the plugin description and changelog on the Plugins page and in update notifications.
= 5.7.0 =
- Auto-updates: ship plugin-update-checker so future releases on GitHub appear automatically on update-core.php.
- DB v1.8: drop redundant indexes (
idx_vinon items,idx_user_statuson notifications) — both were strict prefixes of compound indexes added later, so they cost write overhead with zero read benefit. next_invoice_number()now flushes WP's option cache after the raw atomic UPDATE so callers don't get the pre-increment value.- SPA shell emits
<link rel="modulepreload">for every dynamically-imported chunk in the Vite manifest. - Removed duplicate
global $wpdb;inget_dashboard_stats().
= 5.6.0 =
- Vite manifest cached via
wp_cachewith a version-stamped group; saves onefile_get_contents+json_decodeper SPA page hit. Cache-Control: private, max-age=300on/transport-prices/locations,/auction-fees,/auction-fees/fixed,/title-codes— admin-managed reference data that rarely changes.Carspace_Notification::count_unread()cached per-user (5 min TTL) with precise bust oncreate/mark_read/mark_all_read/delete/bulk_delete. Both the admin-bar badge and/notifications/unread-countREST endpoint benefit.get_carsWP_Queryswitched tofields=idsand skips implicit meta/term cache priming, since the explicit batch primes that follow already do that work.
= 5.5.0 =
- Versioned-key transient cache for
/dashboard/statsand/userswithcarspace_bust_data_cache()busting on invoice mutations,assigned_user/ pricing meta changes, and user create/update/delete. - Removed three
wp_ajax_*handlers inhelpers/notifications.phpthat duplicated REST endpoints. - Pruned ~340 KB of legacy code:
deact-assets/, unusedendpoints/*,endpoints/car-invoices/,helpers/render-table.php+table-parts/,helpers/dashboard-cards.php,helpers/ajax-handlers.php.
= 5.4.0 =
- Initial public release of the React SPA rewrite (production version on artcase.ge).
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v5.11.0 | Apr 28, 2026 | carspace-dashboard-v5.11.0.zip | 0 |
| v5.10.0 | Apr 28, 2026 | carspace-dashboard-v5.10.0.zip | 0 |
| v5.9.2 | Apr 28, 2026 | carspace-dashboard-v5.9.2.zip | 1 |
| v5.9.1 | Apr 28, 2026 | carspace-dashboard-v5.9.1.zip | 1 |
| v5.9.0 | Apr 28, 2026 | carspace-dashboard-v5.9.0.zip | 1 |
| v5.8.0 | Apr 28, 2026 | carspace-dashboard-v5.8.0.zip | 1 |
| v5.7.1 | Apr 28, 2026 | carspace-dashboard-v5.7.1.zip | 1 |
| v5.7.0 | Apr 28, 2026 | carspace-dashboard-v5.7.0.zip | 0 |
| v5.6.0 | Apr 28, 2026 | carspace-dashboard-v5.6.0.zip | 0 |
| v5.5.0 | Apr 28, 2026 | carspace-dashboard-v5.5.0.zip | 0 |