No description
  • JavaScript 55.1%
  • HTML 35.7%
  • Rust 7.9%
  • CSS 1%
  • Dockerfile 0.3%
Find a file
2026-03-04 16:09:13 +01:00
public Remove em-dash where unnecessary 2026-03-04 13:57:29 +01:00
src More redirects 2026-03-04 16:09:13 +01:00
.dockerignore Initial 2026-03-04 12:43:17 +01:00
.gitattributes Initial 2026-03-04 12:43:17 +01:00
.gitignore Initial 2026-03-04 12:43:17 +01:00
app_config.toml Initial 2026-03-04 12:43:17 +01:00
Cargo.lock Initial 2026-03-04 12:43:17 +01:00
Cargo.toml Initial 2026-03-04 12:43:17 +01:00
Dockerfile Initial 2026-03-04 12:43:17 +01:00
products.toml Initial 2026-03-04 12:43:17 +01:00
README.md Improve logging 2026-03-04 14:33:03 +01:00

Ox Shop game plan

Ox shop is a (mostly headless) backend designed for the metrum/sonnet webshop.

Features

  • Order flow
    • Create/modify shopping cart (client-side, w/ server-side validation)
    • Add (available) products to shopping cart
    • Checkout {mollie} (email req.)
      • Partially validate shipping address(?)
    • Order status page
  • Fulfillment flow
    • List pending orders with status
    • When paid send email to customer & internal fulfillment address
    • (Future: generate sendcloud things)
    • (Future: add/sync order with erpnext)
    • [Employee] Update order status (with email on trigger)
  • (Future: Product creation flow)
    • Employee login
    • Create new product (image, variants, price, etc)
    • Update properties
    • Template pages with properties (or api)
    • Query products (for lists and slideshows, etc)
    • Sync/set stock level & availability

Development guidelines

  • Database compatibility
    • We want to minimize migrations, and to do that we should use append-only structs with something like musli-wire
  • Security
    • Store the minimum amount of information, and require authentication for all non-public information

Project Structure (v0)

  • Frontend framework
  • Config toml; compiled into the binary?
    • Mollie config stored inside the config toml file
    • Email config stored inside a config toml file
  • Product list (pricing) is stored inside a toml file; these are used to validate & populate cart/product information
  • Orders stored in feox-db as a semi-flat struct
  • Order status page using only 'uuid' of order
  • Sessioned endpoints (ephemeral)
    • Cart checkout
    • Cart validate
    • Order/Cart status
  • Authenticated endpoints (static token)
    • Order update endpoint
    • List order endpoint
    • Update order status

Migration Status

  • Optimization
    • Image-sets with backend-transcoding
  • Product Pages
    • Attachments
    • Multi-image preview
    • Add missing accessories
    • Add (restructured) tech faq
    • Cart interaction
    • (Check mollie) add currency/locale option
  • Blogs
    • Add missing newsletters
    • Add RSS feed
  • Reviews page
  • Contact page
  • Add support pages/info
  • Add terms and conditions
  • Add social media links (footer)
  • Add content to landing page
  • (Optional) add quick search

Product navigation/layout

Coming from https://oat.ink/ and https://www.schiit.com/products I'm inclined to go with the sidebar navigation. Compared with https://gradolabs.com which has more traditional ecommerce layout, it's significantly less clear and slower to navigate.

Thus it provides significantly quicker navigation. Two downsides I've noticed from shiit:

  1. Mobile/small-screen navigation sucks
  2. Parameteric search non-existent/upsell is very passive (i.e. a customer will only see price difference not the benefit)

Not everyone will use parametric search, so upsell-by-comparison is likely a better option, but requires per-product eval.

One other downside of quicker navigation is lower time-wise retention, this would best be solved by adding depth to the products (e.g. measurement plots, calculators, etc)