Skip to content

Fruit Plug — Engineering Wiki

The source of truth for how Fruit Plug's new stack is built, deployed, and operated.

Where we are

Phase 0 (backend cleanup): complete. Phase 1 MVP (frontend): ~60% shipped. See the Changelog for the full timeline.

What's live right now

Surface URL Status
New PWA (staging) dev.fruitplug.co.uk
This wiki docs.fruitplug.co.uk
Old WordPress site (still the public face) fruitplug.co.uk ✅ (old Butcher theme; cutover pending)
WordPress admin fruitplug.co.uk/wp-admin ✅ PHP 8.2 · WP 6.9 · WC 10.7
fruitplug-api REST fruitplug.co.uk/wp-json/fruitplug/v1/* ✅ 6 controllers · 7 tables

The stack in one diagram

flowchart LR
  U[Customer] -->|HTTPS| Caddy[Caddy · this server<br/>147.12.227.117]
  A[Ops] --> Caddy

  Caddy -->|dev.fruitplug.co.uk| Web[Next.js PWA<br/>fruitplug-web-dev]
  Caddy -->|docs.fruitplug.co.uk| Docs[MkDocs]

  Web -->|Store API<br/>REST v3<br/>fruitplug/v1| WP

  subgraph WPHost [A2 Hosting · 106.0.62.69]
    WP[WordPress 6.9 · WC 10.7<br/>PHP 8.2]
    WP --- Plugins[ShipStation · WooPayments<br/>Subscriptions · Mailchimp<br/>fruitplug-api · 15 more]
    WP --- DB[(MySQL · fruitplu_a2wp705<br/>+ 7 wp_fruitplug_* tables)]
  end

  WP -->|Stripe| Stripe[(Stripe)]
  WP -->|ShipStation API| Ship[(ShipStation)]
  Web -->|Graph API · planned| IG[(Instagram)]

Key numbers (measured, not estimated)

Metric Value Source
Lifetime orders 4,188 (3,546 completed) Woo reports
Customers 2,216 Woo reports
AOV £69.31 (median £61.98) Woo orders sample
Products 46 live (24 fruits · 4 boxes · 10 merch · 3 subs · 5 rare) Woo · post-cleanup
Active plugins 21 (was 38) Post Phase 0
Instagram 64.4k followers · 349 reels · 151.6M plays Instagram Graph API
Active subscriptions 1 · MRR £51.98 Phase 2 will rebuild this
Reviews 4.76★ / 218 Customer Reviews for Woo

Where to start reading

Principles

  1. One source of truth per thing. Persistent data → the WordPress MySQL DB. Brand tokens → globals.css. Environment → .env.local. Don't duplicate.
  2. Don't touch what works. Woo is the commerce engine. ShipStation is the fulfilment engine. We add alongside, we don't replace.
  3. Headless everywhere. The PWA holds zero durable state. Every feature has a REST endpoint or uses one.
  4. Dark-mode-first. The brand is black + magenta. Light mode is an override, not the default.
  5. Mobile-first. 34% of Phase 0 orders paid via Apple Pay. The PWA installs to the home screen.