Octolize shipping plugins for every scenario

Shipping illustration Explore plugins

Shipping Configuration for a Jewelry Store (Bracelets, Necklaces, Rings)

Anthony Calandrelli S9al8aIiVNU Unsplash
Author Grzegorz Rola
Updated:
2025-02-26
Reading time:
6 minutes read

In the fast-paced world of e-commerce, precise and flexible shipping options are essential for delivering a seamless customer experience. At Octolize, we pride ourselves on delivering tailored solutions that address our clients’ unique shipping challenges. In this article, we dive into a real-world scenario where we worked closely with one of our clients, the owner of a jewelry store, to streamline their shipping process, reduce costs, and enhance delivery reliability.

By leveraging our expertise and our best-selling Flexible Shipping PRO plugin, we tackled the client’s specific challenges head-on. Read on to discover how we transformed a common shipping challenge into a success story, providing tangible benefits for our client.

If you run a similar business, this case study could provide valuable insights to help you refine your shipping strategy.

Original shipping scenario provided by the store owner:

I run a jewelry store where I sell three categories of products—bracelets, necklaces, and rings. Shipping just bracelets costs $15, and just necklaces cost $10. If a customer orders both bracelets and necklaces together, I can ship them in the same package, but they require extra protection, so shipping is $30 if the total weight is under 6 kg, or $45 if it’s over. Rings, on the other hand, are small enough to fit inside other jewelry boxes, so to encourage purchases, I reduce the shipping cost by $5 for each ring ordered. However, there’s one special engagement ring that I don’t ship at all due to its value—it’s only available for in-store pickup. It’s so expensive that even Frodo wouldn’t dare carry this one to Mordor. Additionally, for all shipped orders, I add an insurance fee of 15% of the order value. For orders over $500 shipping is free. How do I piece all this together?

Analysis of the Shipping Scenario

In this scenario, we have several moving parts:

  • Bracelets only: $15 shipping.
  • Necklaces only: $10 shipping.
  • Bracelets + Necklaces together:
    • If the total weight is up to 6 kg: $30 shipping.
    • If the total weight is over 6 kg: $45 shipping.
  • Rings: For every (regular) ring in the order, reduce the shipping cost by $5. Rings are small enough to ship in another jewelry box.
  • Special engagement ring: Not shipped at all — if it’s in the order, the shipping method should be canceled (pick-up only).
  • Insurance fee: 15% of order value, charged for all shipped orders.
  • Free shipping on orders over $500: If the order’s total value is at least $500, shipping is free.

We need to implement the above logic in a set of rules. However, rule-based shipping tables typically process from top to bottom, summing up costs from every matching rule, unless a rule’s special action stops further evaluation or cancels the method.

Key points and edge cases:

  • If the order has the special engagement ring, shipping must be canceled (no shipping option offered).
  • If the order is $500 or more, shipping is free (in a literal sense). To keep it completely free, we stop further rule processing so that no other fees apply.
  • Otherwise, we add a 15% insurance fee on the order value, then account for ring discounts and the base shipping cost scenario (bracelets, necklaces, or both). This can be tricky because “stop” actions skip rules below. One has to choose the order carefully.
  • If a customer orders both bracelets and necklaces, we normally want $30 or $45 total (depending on weight). We still want to factor in ring discounts and the 15% insurance, so we have to arrange the rules carefully.
  • Orders consisting only of rings would end up paying just the 15% insurance minus $5 for each ring. If that goes negative, the final shipping cost is treated as $0 (the plugin typically does not charge negative amounts).
  • Orders mixing rings with other products will first add the 15% insurance, then subtract $5 per ring, then add the base shipping for bracelets, necklaces, or both. If the final sum is negative, it becomes 0.
  • For an order over $500, we force shipping to $0 and end further processing (meaning no ring discounts or insurance get added). This strictly enforces the “free shipping over $500” condition.

Step-by-step Cases

  • Case 1: Special engagement ring in the cart
    The first rule checks for the “engagement ring” product ID. If present, special_action is cancel, meaning no shipping method is offered. The rest of the rules do not matter.
  • Case 2: Order total ≥ $500 (no special engagement ring)
    The second rule sets the shipping cost to 0 and uses a stop action, ensuring that no further shipping cost or insurance is applied. The result is pure $0 shipping.
  • Case 3: Lower-value order that includes normal rings
    The third rule (Insurance) adds +15% of the total order value. The fourth rule (Ring Discount) subtracts $5 per ring. Then the subsequent rules handle shipping cost for bracelets and/or necklaces. If the sum dips below zero, it is interpreted as zero cost in the plugin.
  • Case 4: Bracelets + Necklaces together
    After the insurance and ring discount have been applied, either rule #5 or #6 sets a base cost of $30 (if ≤ 6 kg) or $45 (if > 6 kg) on top. We have put a stop action on those rules in this configuration, so single-product rules do not add more cost. (Because if we did not stop, we might add $15 for bracelets plus $10 for necklaces, which we do not want.)
  • Case 5: Bracelets only
    If the order has bracelets but no necklaces, rule #5/#6 will not be met, so eventually rule #7 adds +$15 shipping. That combines with the insurance from rule #3 and any ring discounts from rule #4.
  • Case 6: Necklaces only
    Similarly, if the order has necklaces but no bracelets, it will not trigger the “both” rule, and thus rule #8 adds +$10 shipping, plus the insurance from #3, minus ring discounts, if any.

This logical arrangement gives a “best fit” for the scenario, noting that once an order hits $500 or more, the shipping cost is forced to $0 and the process is stopped (no insurance or other adjustments). If you did want to apply the 15% insurance fee even on $500+ orders, you could remove the stop from that free-shipping rule, but then you would have to handle negative costs from ring discounts or more complex logic. The configuration below enforces a strict “$0 means fully free shipping if $500+.”

Proposed JSON Configuration

Below is the JSON configuration for the Flexible Shipping PRO “Rules Table.” It follows the schema from the attached instructions and example configurations. This JSON must validate against the rules-table-schema.json. Copy and paste it into the plugin’s “Paste” feature to import.

{
  "rules_table": {
    "rules": [
      {
        "conditions": [
          {
            "condition_id": "product",
            "operator": "any",
            "product": [
              "engagement_ring"
            ]
          }
        ],
        "cost_per_order": "0",
        "additional_costs": [],
        "special_action": "cancel"
      },
      {
        "conditions": [
          {
            "condition_id": "value",
            "operator": "is",
            "min": "500",
            "max": ""
          }
        ],
        "cost_per_order": "0",
        "additional_costs": [],
        "special_action": "stop"
      },
      {
        "conditions": [
          {
            "condition_id": "none"
          }
        ],
        "cost_per_order": "0",
        "additional_costs": [
          {
            "additional_cost": "0.15",
            "per_value": "1",
            "based_on": "value"
          }
        ],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product",
            "operator": "any",
            "product": [
              "ring"
            ]
          }
        ],
        "cost_per_order": "0",
        "additional_costs": [
          {
            "additional_cost": "-5",
            "per_value": "1",
            "based_on": "item"
          }
        ],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product",
            "operator": "all",
            "product": [
              "bracelet",
              "necklace"
            ]
          },
          {
            "condition_id": "weight",
            "operator": "is",
            "min": "",
            "max": "6"
          }
        ],
        "cost_per_order": "30",
        "additional_costs": [],
        "special_action": "stop"
      },
      {
        "conditions": [
          {
            "condition_id": "product",
            "operator": "all",
            "product": [
              "bracelet",
              "necklace"
            ]
          },
          {
            "condition_id": "weight",
            "operator": "is",
            "min": "6.001",
            "max": ""
          }
        ],
        "cost_per_order": "45",
        "additional_costs": [],
        "special_action": "stop"
      },
      {
        "conditions": [
          {
            "condition_id": "product",
            "operator": "any",
            "product": [
              "bracelet"
            ]
          }
        ],
        "cost_per_order": "15",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product",
            "operator": "any",
            "product": [
              "necklace"
            ]
          }
        ],
        "cost_per_order": "10",
        "additional_costs": [],
        "special_action": "none"
      }
    ]
  }
}

To use this configuration, copy the JSON above and paste it into the “Rules Table” section of Flexible Shipping PRO via the “Paste” button.

Verifying the Edge Cases

Below are a few sample “edge” or “interesting” orders and how the rules combine to produce the final shipping cost:

  1. Order with the special engagement ring: Rule #1 is triggered (product = engagement_ring) → cancel shipping method. No shipping is offered.
  2. Order total $600 with some bracelets/necks/rings, but not the special ring:
    Rule #2 triggers (value >= 500) → cost 0, stop. The method is free and no other rules are applied. Final shipping = $0.
  3. Order of total value $300, containing 1 bracelet, 1 ring, total weight under 6 kg (no necklaces):
    – Rule #1 not triggered (no engagement ring).
    – Rule #2 not triggered ($300 < $500).
    – Rule #3 (insurance) applies: shipping + 15% of $300 = $45 so far.
    – Rule #4 (ring discount) applies: -$5 per ring. There is 1 ring, so new cost = $45 – $5 = $40.
    – Rule #5 and #6 do not apply, because there is no necklace and bracelet combination. (We only have 1 bracelet, no necklace.)
    – Rule #7 (bracelet) applies: +$15. Now cost = $55.
    – Rule #8 (necklace) does not apply, since there is no necklace.
    Final shipping cost = $55.
  4. Order of total value $200, containing 2 bracelets and 2 necklaces, total weight 7 kg, plus 2 rings:
    – Rule #1: no engagement ring, so not triggered.
    – Rule #2: value is under $500, not triggered.
    – Rule #3: insurance +15% of $200 = +$30, total so far = $30.
    – Rule #4: ring discount, 2 rings × -$5 = -$10, so cost = $20.
    – Rule #5: check “bracelet + necklace, weight up to 6.” Not met, because weight is 7 kg.
    – Rule #6: “bracelet + necklace, weight from 6.001 up to infinity.” This is satisfied. cost_per_order= $45 added. So shipping becomes $20 + $45 = $65. stop is invoked, so rules #7 and #8 are not processed further. Actually, #7 and #8 do not matter because we do not want to add single-product shipping fees once B+N have applied. The final cost is $65.

These examples show how the table logic works step by step, matching the store owner’s shipping rules as closely as possible within a straightforward “top-to-bottom” rule structure. If you need to allow the 15% insurance or ring discounts on top of free shipping for $500+ orders, you would remove or rework the “stop” in Rule #2. But that would no longer be true $0 shipping for high-value orders.

We hope this helps you configure the shipping scenario! Simply copy the JSON code above into your Flexible Shipping PRO “Rules Table,” and the plugin should handle the logic for you.