E-commerce · 2026

Farm Direct Sales Shop

A shop where the farm handles orders, bank-transfer reconciliation and shipping lists on its own

An online shop and an operations console built so an apple farm can take and process its own orders. Bank-transfer payments are read from the account history and matched to orders automatically, carrying through to confirmation messages and shipping lists.

Client
DMZ1km Apple Farm
Category
E-commerce
Project site
Project site ↗
Storefront listing apple products by variety with a cart summary alongside

Overview

  • A storefront and an operations console for an apple farm selling direct to customers
  • Visitors order products by variety; the farm handles orders, products and members in the same site's admin screens
  • Ordering without signing up, with order lookup and cancellation tied to the phone number verified at checkout
  • Bank transfer only, with status moving from received to payment confirmed, shipping, then delivered
  • Refund-requested, refunded and cancelled kept as separate statuses, excluded from totals
Home screen introducing the farm
Home screen

Challenge

  • Bank transfer as the only payment method → every order needing a manual match between payment and order
  • Orders identifiable only by depositor name and amount, with same-name, same-amount collisions possible
  • Gift orders in the mix → orderer and recipient differing within one flow
  • Phone number as the only lookup credential for guest orders → other people's orders reachable without a check
  • Varieties and pack sizes changing each season → products editable by the farm itself
  • Shipping cost varying with the number of parcels → parcels counted from the volume of what is in the cart

Solution

  • Cart built from the variety list, then a stepped form: review, orderer details, recipient, confirmation
  • Recipient step starting with a choice of "same as orderer" → skipping input entirely for orders to oneself
  • Address chosen by search rather than free text → blocking postcode and address from drifting apart
  • Order number and bank account shown on the confirmation screen, and sent to the orderer by text
  • Members looking up orders through their account, guests through a verification code, with the two scopes kept apart
Product list by variety with a cart summary
Product list and cart
  • Admin screens for adding categories and products, reordering them, swapping photos, toggling sold-out and hidden
  • Order management filtering by status, changing several orders at once, entering tracking numbers

System architecture

Customer

  • Pick products → place order → payment instructions by text → transfer → confirmation by text → delivery

Farm

  • Check what to ship → export to Excel → ship → enter tracking numbers → move to shipping
  • Dashboard showing orders awaiting action, order counts and amounts per period, and totals by variety and product
Trends per period with totals by variety and product
Admin dashboard

Payment reconciliation

  • Bank account history read on a schedule, moving received orders to confirmed when depositor name and billed total both match
  • Operator notified by messenger of confirmations, failed confirmation texts, and multiple candidates
  • Unrelated deposits logged without a notification → keeping alerts that need no action from piling up
  • Unpaid orders left to the operator's daily check, which the automatic matching does not replace

Implementation

  • Amounts shown by the screen first, recalculated by the server at checkout → orders whose products changed in between rejected and returned to a refreshed cart
  • Shipping cost as parcel count times unit price, with volume rounded up to whole parcels; unit price read and set by the operator through a messenger command
  • Oldest order confirmed when several candidates match, with the operator notified and the order history recording it
  • A single processing checkpoint held, so re-reading the same transaction after an interruption never confirms one order twice
  • Processing narrowed by transaction time when the checkpoint is missing → preventing the whole query window from being confirmed at once
  • Excel export covering every row matching the filter rather than the current page, and reporting when the cap truncates it
Order review with the shipping fee rule
Order review

Personal data and permissions

  • Account lockout on repeated login failures, with per-address rate limiting in front of it
  • Unknown IDs and wrong passwords answered identically → never revealing whether an account exists
  • Codes, tokens and phone numbers kept out of logs; customer texts carrying no address or recipient
  • Addresses absent from member lists and present only in a single member's detail → removing any path that returns many addresses at once
  • Uploaded photos re-encoded on the server → stripping capture location and anything appended to the file
  • Admin features split into permission units, with button states as display only and enforcement on the server

Result

  • Products and prices edited by the farm directly, keeping up with varieties as the season turns
  • Payment confirmation feeding the order status without a person in between, with the confirmation text going out alongside
  • Order status, processing history and the basis for each confirmed payment traceable in one place
  • Shipping lists exported to Excel and used as-is to prepare parcels
  • Guests ordering without an account and reaching only their own orders through number verification
  • Visit analytics collected under the farm's own domain → the collecting server's address never exposed to visitors
Mobile storefront
Mobile storefront

Technology

  • Python
  • FastAPI
  • PostgreSQL
  • SQLAlchemy
  • React
  • TypeScript
  • Redis
  • Docker

Screens

Have a problem that needs solving?

From software development to equipment integration and engineering, we can work out the approach that fits what your project needs.

Discuss a project