# WooNooW Customer SPA Architecture & Master Plan

**Version:** 2.0.0  
**Status:** Production Ready

This document consolidates the architectural decisions, deployment modes, UI/UX standards, and routing strategies for the WooNooW Customer SPA. It is the single source of truth for frontend development on the customer-facing side.

---

## 📋 Table of Contents

1. [Architecture Decision: Hybrid Approach](#architecture-decision-hybrid-approach)
2. [Deployment Modes](#deployment-modes)
3. [Routing Strategy: HashRouter](#routing-strategy-hashrouter)
4. [SEO & Tracking Strategy](#seo--tracking-strategy)
5. [UI/UX Design Standards](#uiux-design-standards)
6. [Implementation Roadmap](#implementation-roadmap)

---

## 1. Architecture Decision: Hybrid Approach

We previously debated whether the `customer-spa` should be built into the core plugin or sold as a separate standalone theme.

**The Decision: Option C (Hybrid Approach)**

We build the Customer SPA into the WooNooW core plugin alongside the Admin SPA.
```text
woonoow/
├── admin-spa/              (Admin interface ONLY)
├── customer-spa/           (Customer Storefront + My Account)
└── includes/
    ├── Admin/              (Backend logic for admin-spa)
    └── Frontend/           (Backend logic for customer-spa)
```

**Benefits:**
- Better user experience (one product to install).
- Highest revenue potential (core plugin covers 60% of users, premium themes can be sold separately for agencies).
- Maximum flexibility.

---

## 2. Deployment Modes

To accommodate all store owners (from small businesses using traditional themes to enterprises wanting App-like experiences), the Customer SPA supports flexible deployment:

### Mode 1: Shortcode Mode (Default / Recommended)
**Use Case:** Works with ANY WordPress theme (Divi, Elementor, Flatsome).
**How it works:** Basic components are injected via shortcodes (`[woonoow_cart]`, `[woonoow_checkout]`). 
**Benefit:** Zero theme conflicts, progressive enhancement.

### Mode 2: Full SPA Mode
**Use Case:** Maximum performance, standalone app-like experience.
**How it works:** WooNooW takes over the entire frontend routing via a dedicated settings toggle.
**Benefit:** Offline PWA support, fastest page transitions.

### Mode 3: Hybrid Rendering
**Use Case:** Best of both worlds for SEO and speed.
**How it works:** Product/Category pages use traditional WordPress PHP templates (SSR) for robust SEO, while Cart/Checkout/MyAccount use full SPA rendering for interactivity.

---

## 3. Routing Strategy: HashRouter

Direct SPA URLs (like `https://woonoow.local/product/foo`) conflict heavily with WordPress's native rewrite rules. We cannot reliably override WordPress routing without breaking standard themes or SEO canonicals.

**The Solution: HashRouter for SPA interactions**

```text
https://woonoow.local/shop#/product/edukasi-anak
                          ↑
```

### Why HashRouter?
- **Zero WordPress Conflicts:** WordPress loads the base `/shop` page template. React Router takes over everything after the `#`. 
- **Direct Access Works:** Users can bookmark or share the URL, and it will load flawlessly.
- **Consistent with Admin SPA:** Both Admin and Customer SPAs utilize memory/hash routing to prevent 404s and permalink crashes.

*(Note: For strict SEO product pages in Hybrid mode, the actual WooCommerce Product URL is indexed, while internal SPA browsing uses the HashRouter).*

---

## 4. SEO & Tracking Strategy

### Hybrid SEO Compatibility
Because pure SPAs hurt SEO (empty HTML sent to crawler), we utilize Hybrid Rendering:
1. **Product Pages = SSR:** WordPress outputs full HTML with schema markup using standard hooks so Yoast / RankMath work perfectly.
2. **Checkout/Cart = CSR:** These pages don't need SEO indexing, so they are pure React.

### Analytics Tracking
To ensure compatibility with Google Analytics, PixelMySite, Facebook Pixel, etc., the React components **trigger standard WooCommerce jQuery events**.

```javascript
// Example: Triggering a native woo event inside React
jQuery(document.body).trigger('added_to_cart', [product.id, quantity, product.price]);
```
This guarantees that 3rd-party tracking plugins installed on the site continue to function out-of-the-box without requiring custom API webhooks for the storefront.

---

## 5. UI/UX Design Standards

Our frontend philosophy: **Pragmatic, not dogmatic.** Follow e-commerce conventions for learned behaviors (e.g. swiping), rely on UX research when conventions are broken, and prioritize mobile-first performance.

### Core Layout Rules
- **Typography:** Hierarchy is `Title > Price`. We optimize for Brand Stores, not chaotic Marketplaces.
- **Variation Selectors:** Use Pills/Buttons. **Never** use Dropdowns for variation selection (high friction).
- **Product Information:** Use Vertical Accordions instead of Horizontal Tabs (27% of users overlook horizontal tabs).
- **Images:** 
  - Mobile: Use dots (learned behavior from Amazon/Tokopedia).
  - Desktop: Use small horizontal thumbnails below the main image.

### Buy Section Hierarchy
1. Product Title (H1)
2. Price & Sale formatting 
3. Stock Status Badge
4. Variation Selectors (Pills)
5. Quantity Spinner
6. **Add to Cart (Primary CTA)**
7. Trust Badges (Shipping, Returns)

---

## 6. Implementation Roadmap

### Phase 1: Core Commerce (MVP)
- Basic Product listing / catalog with filters.
- Shopping Cart sidebar/drawer (state managed by Zustand).
- Single-page checkout (HashRouter).
- My Account dashboard (React Router).

### Phase 2: Trust & Conversion
- Wishlist / Save for later functionality.
- Product reviews integration with WooCommerce comments.
- Related Products and Cross-Sells carousels.

### Phase 3: Advanced
- Subscriptions & Memberships UI.
- Digital Downloads manager in My Account.
- Progressive Web App (PWA) manifest generation and offline Service Worker.
