All projects

M.T.S Work Wear - Custom Print Ordering Platform

Hebrew RTL order wizard for branded work wear: color x size matrix, logo upload with live mockups, Cardcom payment and a full admin.

The goal

Let business customers order printed work wear online on their own - pick garments, colors, sizes and quantities, upload their logo, see how the print will look, and pay - instead of going back and forth by phone and email for every order.

The solution

A Vue 3 + Express + MongoDB platform with a mobile-first Hebrew order wizard: product and category selection, a color x size x quantity matrix, separate front and back graphics per item with free in-browser background removal, a visual mockup of the print on every chosen color, an order summary and Cardcom v11 LowProfile payment with an optional tax-invoice document. Customers get accounts with order history, one-tap reorder and password reset. The business gets an admin panel for orders, customers, products, categories, a reusable print-position library with an interactive zone editor, inventory with low-stock alerts, SMTP settings and Excel exports.

Highlights

  • Customers design, preview and pay for a printed order without talking to anyone
  • Free in-browser logo background removal - no paid image API
  • Live mockup of the print on every color the customer picked
  • Cardcom payment hardened with server-side price checks and verified callbacks
  • Admin runs catalog, print positions, inventory and orders without a developer

The challenge

Customers upload logos as JPGs with white or off-white backgrounds, which look like a white box when printed on a dark garment - and a paid background-removal API would add a per-order cost.

Wrote a free in-browser background remover on Canvas: it detects the dominant color around the whole image border, skips images whose border is not a solid color (photos), and flood-fills only edge-connected background to transparent, so white areas inside the logo survive. Vector files (PDF/AI/EPS) are passed through untouched.

Built a reusable position library with sizes in cm and display order, linked categories to positions so new products are populated automatically, added a sync that backfills existing products, and an interactive zone editor that shows each position on a real product image.

Taking real payments from a browser-built cart means the client could tamper with prices, and the payment callback could be spoofed or replayed.

Prices and stock are recalculated and checked on the server before a Cardcom session is opened, the session id is stored on the order so the callback is verified against that exact session, and orders get a per-order access token against IDOR. Uploads are restricted by extension and MIME type, and SVG uploads were removed to close an XSS path.

After a client meeting the order model changed substantially - multi-color lines and separate front and back graphics - while orders in the old shape already existed.

Moved the Order schema to variants[] and {front, back} graphics with backward-compatible reads, so invoices, stock deduction and the admin keep working on both old and new orders without a data migration.

What was delivered

  • Customer-facing order wizard (Vue 3, mobile-first, RTL)
  • Express REST API with MongoDB models for products, categories, positions, orders, customers and settings
  • Cardcom payment integration with optional invoice document
  • Admin panel with Excel exports and email alerts
  • Serverless deployment configuration with file storage

Results

7

Admin screens

End-to-end

Order wizard

Cardcom

Payment

Hebrew RTL

Layout

What it taught me

  • For a print business the mockup is the product - investing in the preview step mattered more than any admin feature
  • A simple, well-scoped algorithm (border color + edge flood fill) covers most real logo uploads without an external service
  • Designing the order schema with backward-compatible reads made a mid-project requirements change cheap