pbs-obsidian-vault/PBS/Tech/Sessions/pbs-woocommerce-store.md

7.9 KiB

project type status tags created updated path
pbs-woocommerce-store session-notes active
pbs
wordpress
woocommerce
ecommerce
stripe
paypal
apple-pay
redis
staging
production
essential-blocks
css
ghostscript
wordfence
2026-03-21 2026-03-21 PBS/Tech/Sessions/

WooCommerce Store Setup — Session Notes (March 21, 2026)

Session Summary

Full WooCommerce cookbook store built from scratch — staging tested and production deployed in a single day. Both Stripe and PayPal payment processing working. Shop page custom-built with Essential Blocks for full layout control. Test purchases confirmed on both staging and production. Apple Pay domain verification placed on production server.

Key Decisions Made

Commerce Platform: WooCommerce (Lean Approach)

  • WooCommerce over Shopify — seamless on-site experience for Sunnies, no monthly platform fee, full data ownership
  • WooCommerce is a stepping stone — long-term plan is custom commerce backend (Flask/Go/Rust) with direct Stripe API integration
  • Free plugins only — WooCommerce core + Stripe Gateway + PayPal Payments, no premium dependencies

Key Concepts Clarified

  • Shopify vs WooCommerce — Shopify is a platform (competes with WooCommerce), not a payment processor
  • Shop Pay is Shopify's digital wallet (exclusive to Shopify stores), not available on WooCommerce. Not a dealbreaker — Apple Pay, Google Pay, and PayPal cover the same need
  • Stripe and PayPal are payment processors (cash registers); WooCommerce and Shopify are platforms (the store)
  • Custom commerce is realistic — Flask/Go/Rust backend with direct Stripe API is within reach (estimated: a month of weekends). Stripe handles PCI compliance, fraud, chargebacks. Your code just says "charge $24.99"
  • WooCommerce doesn't lock you in — all product/order data lives in MySQL, migrateable when custom build is ready

Payment Setup

  • Stripe — primary payment processor, handles credit cards, Apple Pay, Google Pay
  • PayPal — secondary option, works alongside Stripe on checkout page. Initially hijacked checkout with Smart Buttons; resolved by letting Stripe own card fields and PayPal display as separate option
  • Apple Pay — domain verification file placed on production at /.well-known/apple-developer-merchantid-domain-association, ownership set to www-data. Verified through PayPal's Apple Pay integration. Note: file lives inside WordPress container — needs volume mount or re-creation on container rebuild

Shop Page Architecture

  • Custom page with Essential Blocks Woo Product Grid — not the WooCommerce default shop page
  • WooCommerce's shop page template overrides custom block layouts when a page is designated as the "Shop page"
  • Workaround: Keep WooCommerce shop page as default, point site navigation to custom page, set up redirect from /shop to custom page slug via Redirection plugin
  • Essential Blocks uses different CSS classes than native WooCommerce blocks (eb_selector prefix, .eb-woo-product classes)

Redis + WooCommerce

  • Redis Object Cache v2.7.0 by Till Krüss on production
  • Redis is an object cache (not page cache) — WooCommerce is designed to work with it and handles its own cache invalidation
  • No manual exclusions needed — just flush Redis after WooCommerce install
  • Source: Pressidium article confirms WooCommerce benefits from Redis for carts, sessions, and checkout queries

Completed Tasks — Staging

  • WooCommerce installed and configured
  • Stripe set up in test mode, successful test purchase
  • Declined card test passed (proper error message displayed)
  • PayPal set up and working alongside Stripe on checkout
  • Essential Blocks Woo Product Grid configured with custom layout
  • Product card hover CSS (lift + scale + PBS green shadow rgba(62, 107, 65, 0.35))
  • Cookbook PDF compressed from 51MB to 2.6MB with Ghostscript /ebook setting
  • Digital download verified working
  • Mobile checkout tested
  • Guest checkout enabled, account creation optional at checkout

Completed Tasks — Production

  • Apple Pay domain verification file placed and verified
  • WooCommerce installed and configured
  • Stripe set up with live credentials
  • PayPal configured
  • Shop page built with Essential Blocks product grid + hover effects
  • Custom page set as shop (via navigation, not WooCommerce shop page setting)
  • Redis cache flushed after WooCommerce install
  • Test purchase completed successfully
  • Wordfence IP lockout resolved (phone hotspot trick)

Technical Notes

Cookbook PDF Compression

  • Original Canva export: 51MB
  • Compressed with Ghostscript: 2.6MB
  • Command: gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=cookbook_compressed.pdf cookbook_original.pdf
  • Quality verified — 150 dpi sufficient for phone/tablet viewing

Custom Hover CSS (Essential Blocks Product Grid)

eb_selector .eb-woo-products-gallery .eb-woo-product {
    transition: transform 0.3s ease, box-shadow 0.3s ease;
    border-radius: 8px;
}

eb_selector .eb-woo-products-gallery .eb-woo-product:hover {
    transform: translateY(-8px) scale(1.02);
    box-shadow: 0 12px 32px rgba(62, 107, 65, 0.35);
}

Apple Pay Verification File

  • Location: /var/www/html/.well-known/apple-developer-merchantid-domain-association
  • Ownership: www-data:www-data
  • ⚠️ File is inside WordPress container — will be lost on container rebuild. Needs volume mount added to compose file for persistence

Server Health (Observed During Session)

  • Memory: 77%, Swap: 100% — VS Code Remote SSH was a contributing factor
  • 1 zombie process (non-critical)
  • System restart required (kernel updates pending)
  • 6 apt updates available
  • Recommendation: close VS Code Remote when not actively editing, schedule reboot

WooCommerce Account System

  • WooCommerce customer accounts are WordPress user accounts (same wp_users table)
  • Assigns "Customer" role by default
  • Will need role strategy when Ultimate Member is activated (future task)
  • No conflict for now since Ultimate Member isn't active

Wordfence Lockout Recovery

  • Production site returned 503 due to Wordfence IP block
  • Fix: logged in via phone mobile hotspot (different IP), removed firewall exception
  • Action item: whitelist home IP in Wordfence → Firewall → Whitelisting

Known Gaps / Action Items

  • Verify order confirmation emails working on production (WP Mail SMTP is configured there, wasn't on staging)
  • Add volume mount for Apple Pay verification file in Docker compose (persistence across rebuilds)
  • Whitelist home IP in Wordfence
  • Set up redirect from /shop to custom shop page (if not done)
  • Apply pending server updates and reboot (sudo apt update && sudo apt upgrade -y && sudo reboot)
  • Close VS Code Remote SSH sessions when not in use to free server memory
  • Monitor Linode memory — consider 4GB upgrade as store traffic grows
  • Configure PayPal for production with live credentials (if not completed)
  • Eventually: add n8n order automation workflows (Phase 2 of project plan)

Discussion Highlights

  • WordPress regret is real — WooCommerce is a pragmatic compromise, not a long-term commitment
  • Django/Flask would have been ideal for someone with Travis's skillset, but doesn't serve Jenny's immediate need
  • Rust explored as future option — great for systems programming but overkill for a commerce backend; Go is the more natural fit for web services
  • Building a custom frontend with direct Stripe API is a realistic project — the store UI is the easy part, payment processing is Stripe's problem
  • The "WooCommerce plugin tax" kicks in at subscriptions/memberships/courses — but that's 6+ months out and may be custom-built instead

Session: March 21, 2026 Project: Plant Based Southerner — Commerce Maintained by: Travis with Claude