[08] FULL-STACK · 2026
Farmer to Fridge — Web & Commerce API
Commerce backend and mobile API layer for a farm-to-consumer marketplace, built on Craft CMS and Craft Commerce: guest checkout, payments, premium membership and search.
- PHP
- Craft CMS
- Craft Commerce
- Twig
- Alpine.js
- Stripe

01 — OVERVIEW
Farmer to Fridge is a client e-commerce platform that connects local farms directly with consumers. The web storefront runs on Craft CMS and Craft Commerce, and also serves as the backend for the companion iOS/Android app. I owned most of the mobile commerce API surface and a series of checkout, payment and search improvements on the web side.
02 — MY ROLE: BACKEND & API ENGINEER
Designed and shipped the mobile-facing API on top of the existing Craft Commerce stack: route configuration, request validation, cart and order handling, payment-amount consistency, membership endpoints and app-friendly response contracts. Mobile behaviour was added through dedicated endpoints rather than by changing web controllers, so the existing web checkout and premium flows stayed untouched. I documented the API for the mobile team alongside the code.
03 — CHALLENGE: PAYMENT TOTAL CONSISTENCY
After coupons, fees and shipping were applied, the total the app displayed and the amount sent to the payment gateway could differ by one cent because of rounding. I compared the expected mobile total with the Commerce-calculated total in minor units, accepted the app amount only within a one-cent tolerance, and aligned the payment-fee adjuster with that amount. Checkout no longer failed or confused customers on rounding edges.
04 — CHALLENGE: GUEST CHECKOUT WITHOUT A WEB SESSION
The web checkout assumed a session-backed user, while app guests have none. I added guest address and account-status endpoints and resolved carts by cart ID, cart number, email and user ID, with ownership checks so a client can never read another customer's cart or order.
05 — KEY FEATURES
- 01Mobile guest checkout API with guest address and account-status endpoints
- 02Cart and active-order lookup by cart ID, cart number, email or user ID, with ownership validation
- 03Fixed a one-cent rounding mismatch between app total and payment gateway amount after coupons
- 04Payment-fee adjustment aligned with the expected payment amount
- 05Coupon calculation fixes and premium-coupon upgrade CTA in cart and quick-cart drawer
- 06Manual and general bank-transfer payment support for app checkout
- 07Bearer-auth premium membership APIs: coupon validation, Stripe Checkout creation, activation and cancellation
- 08Mobile Member Zone endpoint and fixed app subscription redirect flow
- 09Web premium endpoints kept unchanged while adding mobile-specific behaviour
- 10Order-confirmation responses with subtotal, shipping, discount, fees, line-item prices and totals
- 11Product image fallback from product fields, line-item snapshots and options
- 12Mobile search optimization and advanced search filters shared between web and app
- 13Discount and compare-at price metadata in search and product-finder responses
- 14Out-of-stock product visibility for the mobile app
- 15Email delivery-status check API
- 16Admin notification manager and search-log UI rebuilt with Alpine.js filtering, pagination and sticky headers
- 17Responsive fixes for dropdown, carousel, product finder and address-bar overflow
- 18Mobile shop API documentation maintained alongside route changes