Active Orders
-
Products
-
Open POs
-
B2B Customers
-
Factories
-

Add Product

Create a new base product

Purchase Orders

Manage factory POs

Customers

B2B customer directory

Settings

Configure system

Orders In Production
Order # Customer Items Status Factory
Loading...
-
All Orders
-
Pre-production
-
Production
-
Shipping
-
Received
-
Completed
Order #PO #CustomerFactoryDisplay NameItemsDateStatusETDTrackingCarrierMsgFilesActions
No orders yet. Orders will appear here once synced from Shopify.
-
Total
-
Base
-
Customer
Code / SKUTypeDescriptionCategoryFactoryCustomerSyncActions
No products yet. Add products to get started.
-
All POs
-
Draft
-
In Production
-
Shipping
-
Delivered
-
Closed
PO NumberFactoryOrdersItemsTotalCurrencyPO StatusOrder StatusesPayment📎💬CreatedETDActions
No purchase orders yet. Create a PO from the Orders page.
CodeBusiness NameMain ContactUsersEmailTypeTagsCurrencyMarkup TierActions
0
Active Factories
CodeFactory NameLocationLead TimeSample CostMOQBase ProductsCustomer ProductsContactActions
Revenue (NZD)
COGS (NZD)
Gross Margin (NZD)
Margin %

Monthly trend

Revenue (purple) vs COGS (light) per month. Margin shown above each bar.

Order
Summary
Line items
SKUQtySellBuyFreightBrandCOGSMargin
Amount due (NZD)
Open payments (NZD)
Outstanding on open (NZD)
Total paid (NZD)
Avg payment (NZD)

Unpaid POs not yet in a payment. Tick POs from the same factory, then create a payment. Enter the reference, FX, banking fees & attachments on the panel that opens.

0 selected
PO #FactoryStatusPayment TotalNZD ETDCreated
Loading…
Run #StatusPOsFactory MethodReference TotalNZD PaidCreated
No payment runs yet.
Payment
Quote #RecipientStatusItemsTotalValid untilCreated
Loading…
Quote
0 selected

Line items on open POs not yet in a shipment. Tick items across any POs/factories, then create a shipment. Selecting part of a PO splits it automatically.

PO #Order #CustomerStyleQtyvol m³/unitVolume m³Factory
Loading…
Shipment

Admin Users

Each admin signs in with their own email + password. Tick what they can access; the Owner always has full access. Use "Send password link" to email a one-time link to the user.

UserAccessStatusActions
Loading…

Add a user

Demo Accounts — logins for the demo at /demo

Quickly disable or reset the throwaway logins for the demo (/demo/admin, /demo/factory, /demo/customers). Shown in plain text on purpose — these are demo-only accounts.

Current demo password:
Email the demo logins (all 3 portals + current password) to someone:
Reset all demo orders, products, POs & customers back to the original sample data:
PortalEmailStatus
Loading…

Vendors — brands shown as tiles in the customer portal Stock area

Loading…

Order Statuses

Status options for Orders (OMS). Drag to reorder.

Status Colors

Color coding for order statuses in table view.

Purchase Order Statuses

Status options for Purchase Orders. Drag to reorder.

Payment Statuses

Payment status options for Purchase Orders.

Order Views

Tab views for filtering orders by Shopify tag. Each view filters the Orders(OMS) table by the specified tag.

Product Categories

Technique

Colours

Neckline / Waist

Gender

Stock Product Default Tags

Tags added here are auto-applied to every new Stock Product on top of the category/neckline/gender auto-tags.

Auto-fills the Vendor field on every new Stock Product.

Size Groups (max 12 sizes per group)

Group NameSizesActions

Measurement Types (max 6 per product)

Pricing Formula

How sell prices are calculated from buy prices.

Sell Price = ((Buy Price + Freight) ÷ FX) × Markup
Buy Price: Factory cost in USD
Freight: Looked up from freight table based on product vol/m³ weight
FX: Exchange rate (e.g., 0.60 USD/NZD)
Markup: Customer tier multiplier (e.g., 1.60x)
Example Calculation
Buy: $9.44 USD, Weight: 0.05kg → Freight: $0.50 USD (from Sea Freight table)
FX: 0.60 (USD to NZD), Markup: 1.60× (Tier A)
Sell = (($9.44 + $0.50) ÷ 0.60) × 1.60 = $26.51 NZD

Default Carrier Options

Available carriers for purchase orders.

These are the DEFAULT markup tiers and FX rates. This entire table is used for any customer that does not have their own custom markup tiers configured.

Default Markup Tiers

This entire table is the default. Used for customers without custom markup tiers.

Default Table — applies to all customers without custom tiers
CodeMarkup %Multiplier

Default FX Rates

Exchange rates from USD. Used in pricing calculations. Compare with live rates.

CurrencyManual RateLive RateLast Updated

Shopify B2B Catalogs OFF

Master kill switch for the B2B Catalog sync. OFF means existing product sync behaves exactly as today. Flip ON only after catalogs are created in Shopify and a test order has been verified.

Plan doc: project-documentation/B2B-CATALOGS-PLAN.md

B2B Catalog
Not linked
Stock B2B Catalog
Not linked
— pushes every already-Shopify-synced product to its catalog. Long-running. Master flag must be ON.

Shopify Sync Audit

Compare every OMS product against its Shopify record. Read-only — no changes to Shopify or the OMS.

Loading…

Database Backups

Daily automatic backup at 02:00 NZT. Backups are stored in ImageKit under /db-backups.

Loading…

Shopify Integration

Loading...
-
Connected

Metafield Mapping

Map Shopify product metafields to OMS fields. These are pushed when syncing products to Shopify.

Loading metafield mappings...

Email Settings (SMTP)

SMTP credentials are stored securely as Heroku environment variables. Set them via the Heroku CLI or dashboard.

SMTP Host
Port
Username
Password
From Address

Email Notification Templates

Customise the subject and body of each automated email. Use {{variable}} placeholders — see each template's variable list. The SourceEZ purple header/footer is added automatically and isn't editable here.

Loading templates…

Inbox
Loading messages...
Select a message
Pick a conversation from the inbox
Select a conversation from the inbox.
Send to:
DateFactoryTypeReferenceChangesStatusActions
No pending approvals
Leads
0
Emailed
0
Replied
0
Converted
0
Sent (30d)
0
Open rate
Name / CompanyEmailStatusSentLast sentActions
Loading…

Every send, with delivery + tracking. Opens are unreliable (image proxies/pre-fetch); clicks and replies are the signal.

WhenLeadSubjectStatusOpensClicksTemplate
No sends yet.

Applied to the bottom of every lead email. Use the HTML block and/or an uploaded image.