How to configure, calibrate, and understand your storefront pricing
The VinylPac pricing module consists of two parts that work together: an Admin page where you configure all pricing settings, and the customer-facing Configurator that reads those settings and calculates prices in real time.
All settings are stored in your browser's local storage. Changes on the Admin page apply the next time the Configurator loads — no code changes required.
Every price shown to a customer comes from a single formula:
| Variable | What it means | Where it comes from |
|---|---|---|
unitPrice(qty_tier) | Base cost per sticker at 2"×2" white vinyl | Quantity Tiers table |
sizeMult | Multiplier for the selected size (larger = higher) | Size Options table, or auto-calculated for Custom |
materialMult | Multiplier for the selected material finish | Material Multipliers table |
markup | Your margin on top of the base cost (0 = match cost) | General Settings |
qty | Number of stickers ordered | Customer input |
Customer orders 100 qty of 3"×3" Holo stickers at 0% markup:
| Field | Description | Default |
|---|---|---|
| Minimum Order Qty | Smallest number of stickers a customer can order. The Configurator enforces this as a floor — the quantity input will not go below it. | 10 |
| Global Markup % | 0 = match your cost. Positive = charge more. Negative = undercut. Applies equally to all materials and sizes. | 0% |
| Base Material | Label for the reference material (mult = 1.00). Informational only — does not affect calculations. | White Vinyl |
| Starting Order Number | Sets the counter used to generate order references (e.g. ORD-1001). The Configurator uses this as the next order number and increments it automatically per session. Saving resets the counter to the value entered here — use this when you want to re-sync with your actual Shopify order count. | 1000 |
Each row defines the per-unit price that applies once a customer's order reaches that quantity. The Configurator always uses the highest tier the customer's quantity qualifies for.
These prices are for the base size (2"×2") and base material (White Vinyl). Size and material multipliers are applied on top of these values.
| Min Qty | Unit Price ($/ea) | Source |
|---|---|---|
| 10 | $1.7000 | White vinyl 2"×2" (custom qty) |
| 20 | $1.5000 | White vinyl 2"×2" (custom qty) |
| 50 | $1.2000 | Confirmed |
| 100 | $0.7300 | Confirmed |
| 200 | $0.4750 | Confirmed |
| 300 | $0.3833 | Confirmed |
| 500 | $0.3040 | Confirmed |
| 1,000 | $0.2320 | Confirmed |
| 2,000 | $0.1855 | Confirmed |
| 3,000 | $0.1653 | Confirmed |
| 5,000 | $0.1446 | Confirmed |
| 10,000 | $0.1225 | Confirmed |
Use + Add Tier to add a row, × to remove one. Tiers are sorted by quantity automatically when you save.
Each row defines a size option in the customer's size dropdown. The multiplier scales the base unit price for larger sizes.
| Size | Multiplier | Source |
|---|---|---|
| 2" × 2" | 1.000 | Base — all other sizes are relative to this |
| 3" × 3" | 1.200 | Calibrated |
| 4" × 4" | 1.450 | Calibrated |
| 5" × 5" | 1.733 | Calibrated |
| Custom | Formula | Auto-calculated from entered dimensions — see below |
When a customer selects "Custom," width and height inputs appear (in inches). The size multiplier is calculated automatically:
This formula was calibrated from market pricing data across standard and custom sizes. It is most accurate in the 3–25 sq in range typical of most orders. Very large custom sizes (above 30 sq in) may be slightly underpriced.
| Example size | Area | Formula result |
|---|---|---|
| 1" × 3" | 3 sq in | (3/4)^0.30 = 0.92× |
| 2" × 2" | 4 sq in | (4/4)^0.30 = 1.00× (base) |
| 3" × 4" | 12 sq in | (12/4)^0.30 = 1.37× |
| 5" × 5" | 25 sq in | (25/4)^0.30 = 1.73× |
| 10" × 5" | 50 sq in | (50/4)^0.30 = 2.09× |
Applied on top of qty-tier price × size multiplier. White Vinyl is the base at 1.00×.
| Material | Multiplier | Status | Notes |
|---|---|---|---|
| White Vinyl | 1.000 | Confirmed | Base material — all SM pricing data is white vinyl |
| Clear | 1.070 | Confirmed | Calibrated — ranges 1.03× (50 qty) to 1.10× (10k qty) |
| Glitter | 1.130 | Confirmed | Calibrated — ranges 1.08× (50 qty) to 1.38× (10k qty). Discounts flatten at high volumes. |
| Holo | 1.150 | Confirmed | Calibrated — avg 1.18×, using conservative 1.15× |
| Mirror | 1.200 | Estimate | Estimate — update when pricing data is available. |
The Packaging Product Sizes section lets you define the selectable sizes for each packaging product (Mylar Bags, Pre-Roll Tubes, Miron Jars, etc.). When a customer picks a size in the Configurator, the side-label and top-label dimensions are auto-filled and used to calculate price.
| Field | Description |
|---|---|
| Size Label | Display name shown in the size dropdown, e.g. "150ml" or "1/8th oz". |
| Side Label W / H | Width and height (inches) of the label that wraps around the body of the package. Used for pricing. |
| Top Label W / H | Width and height (inches) of the label on the lid or top of the package. Used for pricing the lid artwork if uploaded. |
| Required | When checked, the customer must select a size before Add to Cart is enabled. |
| Default | The size pre-selected when the product loads. Leave blank to force the customer to choose. |
Each packaging product has its own set of sizes. Use + Add Size within a product card to add a new option, and × to remove one. Click Save Settings to apply.
The Admin page is protected by Netlify Identity. Users must be explicitly invited — there is no public sign-up. Anyone who visits /admin.html without being logged in will see a login prompt.
| Task | Where |
|---|---|
| Invite a new admin user | Netlify dashboard → Site → Identity → Invite users → enter email |
| Remove access | Netlify dashboard → Site → Identity → find user → Delete |
| Reset a password | User clicks "Forgot password" on the login prompt, or you delete and re-invite |
Set Global Markup % in General Settings to your desired margin. For example, 20 = charge 20% more than cost. -10 = price 10% below your cost basis. Applies uniformly across all materials, sizes, and quantities.
Update Minimum Order Quantity in General Settings and save. The Configurator enforces this as a floor — customers cannot enter a lower number, and the starting price on collection pages updates accordingly.
Use + Add Size to add a new row, fill in the label, dimensions, and multiplier, then save. The new size appears in the customer's size dropdown immediately. Use × to remove a size.
Mirror is currently the only material without a calibrated multiplier. To calibrate it:
If your Shopify order count has moved ahead (e.g. you took orders directly in Shopify), update Starting Order Number in General Settings to match your latest Shopify order number + 1, then click Save Settings. The counter resets immediately and the next Add to Cart action will use the new number.
Click Reset to Defaults in the top-right corner of the Admin page. You will be asked to confirm. This restores all tiers, sizes, and multipliers to the values documented here.
The Admin page saves all settings as JSON to your browser's local storage under the key vinylpac_pricing. The Configurator reads this key every time a customer changes a size, material, or quantity — so price changes are live without a page reload.
If no saved settings are found (e.g., on a new browser or after clearing storage), the Configurator falls back to built-in defaults that match the values in this guide.
vinylpac_pricing key.
| Task | Where to do it | Takes effect |
|---|---|---|
| Change a unit price | Admin → Qty Tiers → edit price → Save | Next Configurator load |
| Add or remove a qty tier | Admin → Qty Tiers → + Add Tier or × → Save | Next Configurator load |
| Change minimum order qty | Admin → General Settings → Min Qty → Save | Next Configurator load |
| Add a markup / undercut pricing | Admin → General Settings → Markup % → Save | Next Configurator load |
| Add a new size option | Admin → Size Options → + Add Size → Save | Next Configurator load |
| Change a material multiplier | Admin → Material Multipliers → edit → Save | Next Configurator load |
| Calibrate Mirror material | See section 4 — gather mirror pricing data first | After save |
| Reset everything to defaults | Admin → Reset to Defaults → confirm | Immediately on Admin page |
| Re-sync order number with Shopify | Admin → General Settings → Starting Order Number → Save | Next Add to Cart |
| Add a packaging size option | Admin → Packaging Product Sizes → product card → + Add Size → Save | Next Configurator load |
| Invite an admin user | Netlify dashboard → Identity → Invite users | Immediately (email sent) |