Backend — WordPress + WooCommerce¶
What's running right now on A2¶
| Package | Version |
|---|---|
| WordPress | 6.9.4 |
| WooCommerce | 10.7.0 |
| PHP | 8.2.30 (upgraded from EOL 7.4 on 2026-04-24) |
| MySQL | 8.0.39 |
| WP-CLI | 2.12.0 |
| Host | LiteSpeed @ az1-ts106.a2hosting.com |
Active plugins (21, post-cleanup)¶
| Plugin | Version | Role |
|---|---|---|
| WooCommerce | 10.7.0 | Commerce engine |
| WooPayments | 10.7.1 | Stripe wrapper — Apple Pay #1 method (34% of orders) |
| Woo Subscriptions | 8.6.1 | Migration bridge until Stripe Billing (Phase 2) |
| fruitplug-api (ours) | 0.1.0 | Custom REST + 7 wp_fruitplug_* tables |
| ShipStation for Woo | 5.0.2 | Fulfilment engine |
| Woo Shipment Tracking | 2.7.1 | Tracking number + URL on orders |
| Local Delivery Drivers | 2.0.0 | Driver queue (NW10 delivery) |
| Custom Order Status Manager | 2.0 | Driver Assigned / Out for Delivery / Fruit Plug Delivery / Customer Collection |
| Customer Reviews for Woo | 5.107.0 | 218 reviews @ 4.76★ |
| WooCommerce.com Update Manager | 1.0.3 | Paid-plugin updater |
| Mailchimp for Woo | 6.0.2 | Email marketing sync |
| Google for Woo | 3.6.1 | Merchant Center feed |
| Meta for Woo | 3.6.3 | Facebook + Instagram pixel + CAPI |
| TikTok for Business | 1.4.0 | Pixel + catalogue sync |
| Redirection | 5.7.5 | URL redirect manager |
| Jetpack Protect | 5.0.0 | Vulnerability scanner |
| Easy Hide Login | 1.6 | Hides /wp-login.php |
| Yoast SEO | 27.4 | Legacy SEO meta |
| CMB2 | 2.11.0 | Custom meta-box framework (dependency check pending) |
| Jetpack | 15.7.1 | Under evaluation — remove unless Backup is used |
| Akismet | 5.7 | Under evaluation — no public WP comments needed |
Compared to audit baseline of 38 active plugins, we're down 45%. See A2 runbook for the exact cleanup history.
APIs the PWA consumes¶
Woo Store API — /wp-json/wc/store/v1/¶
Session-based (Cart-Token + Nonce headers). No credentials needed.
| Endpoint | Purpose |
|---|---|
GET /products |
Catalogue (filters: category, tag, on_sale, search, price) |
GET /products/{id} |
PDP data including full attributes + descriptions |
GET /products/categories |
Top-level categories |
GET /cart, POST /cart/add-item, /update-item, /remove-item |
Cart ops |
POST /checkout |
Place order (with payment_method) |
fruitplug-api — /wp-json/fruitplug/v1/¶
Our custom plugin. Provides what Woo doesn't.
| Endpoint | Auth | Purpose |
|---|---|---|
GET /health |
public | Plugin + WP + WC + PHP + DB version snapshot |
GET /loyalty/me |
logged-in | Points balance + streak tier + passport stamps |
GET /box/templates |
public | Full box-template list (shape matches the TS types) |
POST /box/price |
public | Validate + price a draft box against its template; HTTP 422 if illegal |
POST /box/save |
logged-in | Persist a named custom box (revalidated server-side) |
GET /box/mine |
logged-in | My saved boxes |
GET /box/{slug} |
public | Shareable box by slug |
POST /push/subscribe |
public | Register a Web Push PushSubscription |
POST /push/unsubscribe |
public | Remove a subscription |
GET /referrals/mine |
logged-in | My referral codes + status |
POST /referrals/code |
logged-in | Lazily create my referral code |
GET /seasonal |
public | Seasonal calendar + current-month in-season slugs |
PUT /seasonal |
admin | Update the calendar |
Woo REST v3 — /wp-json/wc/v3/¶
Admin-only, consumer-key authenticated. Used by server-side code in the PWA for order reads, customer profile reads, subscription management. Never called from the browser.
WP REST — /wp-json/wp/v2/¶
CMS content (pages, posts, media). Used if we keep recipes/about in WP instead of MDX.
What we did to the backend on 2026-04-24¶
Full play-by-play: A2 host runbook.
Summary:
- Backed up DB + plugins + themes + uploads
- Upgraded PHP 7.4 → 8.2 (with extension fix-up)
- Removed 18 frontend-only plugins in verified batches (38 → 20)
- Cleaned 578 wp_posts revisions
- Rebalanced categories (created Rare & Special, zeroed Uncategorised, removed Signature Box duplicate from Fruits)
- Installed + activated fruitplug-api (21 plugins now)
Still to do¶
- HPOS enable (wp-admin → Woo → Settings → Advanced → Features → High-Performance Order Storage) — sync-first migration, one-click
- Stripe Billing subscription migration (Phase 2 — replaces Woo Subscriptions for the 1 active + win-back to 25 dormant)
- Re-evaluate Jetpack (remove unless Backup is used) + Akismet (remove — no WP comments)
- Fruit descriptions rewrite — 26 fruits × ~80 words each, based on the existing Preparation Guide content