Implemented 3 key improvements based on user feedback: 1. ✅ PageHeader Mobile-Only Problem: Contextual header showing on desktop was redundant Solution: Added md:hidden to PageHeader component Before: Desktop: Shows "Store Details" header (redundant with nav) Mobile: Shows "Store Details" header (good!) After: Desktop: No contextual header (clean!) Mobile: Shows "Store Details" header (perfect!) Result: Cleaner desktop UI, mobile gets contextual clarity 2. ✅ Contextual Headers on All Pages Problem: Dashboard and Payments pages missing contextual headers Solution: - Added usePageHeader to Dashboard - Fixed SettingsLayout to always set header (not just when onSave exists) Before: - Dashboard: No header (confusing) - Payments: No header (confusing) - Store Details: Has header (only one working) After: - Dashboard: "Dashboard" header ✓ - Payments: "Payments" header ✓ - Store Details: "Store Details" header ✓ - All settings pages: Contextual headers ✓ Result: Consistent UX across all pages! 3. ✅ Re-added .ui-ctrl to Button Problem: Removed .ui-ctrl earlier, but it's needed for mobile sizing Solution: Added .ui-ctrl back to Button component Why .ui-ctrl is Good: - Mobile: 44px height (good touch target) - Desktop: 36px height (compact, efficient) - Responsive by default - Follows UI/UX best practices Result: Buttons properly sized for touch on mobile! Mobile Layout (Final): ┌─────────────────────────────────┐ │ Dashboard │ ← Contextual header! ├─────────────────────────────────┤ │ Overview | Revenue | Orders ... │ ← Submenu ├─────────────────────────────────┤ │ Last 7 days [Refresh] │ ├─────────────────────────────────┤ │ Revenue │ │ Rp64.500 │ │ 99.9% vs previous 7 days │ │ ( + ) │ ← FAB ├─────────────────────────────────┤ │ Bottom Nav │ └─────────────────────────────────┘ Desktop Layout (Final): ┌─────────────────────────────────┐ │ Header │ ├─────────────────────────────────┤ │ Dashboard | Orders | Products │ ← Top Nav ├─────────────────────────────────┤ │ Overview | Revenue | Orders ... │ ← Submenu ├─────────────────────────────────┤ │ (No contextual header) │ ← Clean! ├─────────────────────────────────┤ │ Revenue │ │ Rp64.500 │ └─────────────────────────────────┘ Files Modified: - PageHeader.tsx: Added md:hidden for mobile-only - Dashboard/index.tsx: Added contextual header - SettingsLayout.tsx: Always set header (not just with onSave) - button.tsx: Re-added .ui-ctrl class Result: ✅ Mobile: Contextual headers on all pages ✅ Desktop: Clean, no redundant headers ✅ Buttons: Proper touch targets (44px mobile, 36px desktop) ✅ Consistent UX across all pages! 🎉
WooNooW
WooNooW is a modern experience layer for WooCommerce — enhancing UX, speed, and reliability without data migration.
It keeps WooCommerce as the core engine while providing a modern React-powered interface for both the storefront (cart, checkout, my‑account) and the admin (orders, dashboard).
Three Admin Modes:
- Normal Mode: Traditional wp-admin integration (
/wp-admin/admin.php?page=woonoow) - Fullscreen Mode: Distraction-free interface (toggle in header)
- Standalone Mode: Complete standalone app at
yoursite.com/adminwith custom login ✨
🔍 Background
WooCommerce is the most used e‑commerce engine in the world, but its architecture has become heavy and fragmented.
With React‑based blocks (Checkout, Cart, Product Edit) and HPOS now rolling out, many existing addons are becoming obsolete or unstable.
WooNooW bridges the gap between Woo’s legacy PHP system and the new modern stack — so users get performance and simplicity without losing compatibility.
🚀 Key Principles
- No Migration Needed – Woo data stays intact.
- Safe Activate/Deactivate – revert to native Woo anytime, no data loss.
- Hybrid by Default – SSR + React islands for Cart/Checkout/My‑Account.
- Full SPA Toggle – optional React‑only mode for max performance.
- HPOS Mandatory – optimized datastore and async operations.
- Compat Layer – hook mirror + slot rendering for legacy addons.
- Async Mail & Tasks – powered by Action Scheduler.
🧱 Tech Stack
| Layer | Technology |
|---|---|
| Backend | PHP 8.2+, WordPress, WooCommerce (HPOS), Action Scheduler |
| Frontend | React 18 + TypeScript, Vite, React Query, Tailwind (optional) |
| Build & Package | Composer, NPM, ESM scripts, Zip automation |
| Architecture | Modular PSR‑4 classes, REST‑driven SPA islands |
🧩 Project Structure
woonoow/
├── admin-spa/
│ ├── src/
│ │ ├── components/
│ │ │ ├── filters/
│ │ │ │ ├── DateRange.tsx
│ │ │ │ └── OrderBy.tsx
│ │ │ └── CommandPalette.tsx
│ │ ├── hooks/
│ │ │ └── useShortcuts.tsx
│ │ ├── lib/
│ │ │ ├── api.ts
│ │ │ ├── currency.ts
│ │ │ ├── dates.ts
│ │ │ ├── query-params.ts
│ │ │ ├── useCommandStore.ts
│ │ │ └── utils.ts
│ │ ├── pages/
│ │ │ └── orders/
│ │ │ ├── partials
│ │ │ │ └── OrderForm.tsx
│ │ │ ├── Orders.tsx
│ │ │ ├── OrdersNew.tsx
│ │ │ └── OrderShow.tsx
│ │ ├── routes/
│ │ │ └── Dashboard.tsx
│ │ ├── types/
│ │ │ └── qrcode.d.ts
│ │ ├── App.tsx
│ │ ├── index.css
│ │ └── main.tsx
│ └── vite.config.ts
├── includes/
│ ├── Admin/
│ │ ├── Assets.php
│ │ └── Menu.php
│ ├── Api/
│ │ ├── CheckoutController.php
│ │ ├── OrdersController.php
│ │ ├── Permissions.php
│ │ └── Routes.php
│ ├── Compat/
│ │ ├── HideWooMenus.php
│ │ └── HooksShim.php
│ └── Core/
│ ├── DataStores/
│ │ ├── OrderStore_HPOS.php
│ │ └── OrderStore.php
│ ├── Mail/
│ │ ├── MailQueue.php
│ │ └── WooEmailOverride.php
│ ├── Bootstrap.php
│ └── Features.php
├── woonoow.php
└── docs (project notes, SOP, etc.)
⚙️ Development Workflow
- LocalWP / Docker setup with WordPress + WooCommerce.
- Activate plugin:
WooNooWshould appear in the admin menu. - Build SPAs:
npm run build - Package zip:
npm run pack - Upload
dist/woonoow.zipinto WordPress → Plugins → Add New → Upload.
🧭 Vision
“WooCommerce, reimagined for now.”
WooNooW delivers modern speed and UX while keeping WooCommerce’s ecosystem alive.
No migration. No lock‑in. Just Woo, evolved.