Shopify’s order confirmation email shows the product name and variant. It does not show Appify CPO selections, and its built-in reorder posts only a variant id.
This article adds both:
Do this in Shopify Admin → Settings → Notifications → Order confirmation → Edit code. You can also start from the Appify CPO dashboard setup card. Shopify does not let apps read this template, so you paste the code yourself (or use Update with AI on the dashboard).
Search for APPIFY CPO PROPERTIES or APPIFY CPO REORDER later if you need to find or remove a block.
Under each customized product they see their options as labeled lines (for example, “Width: 48 inches”). Names that start with _ stay hidden.
Reorder this item opens https://your-store.com/apps/calculator-ai/reorder?state=…, shows a short restore message, then lands on /cart. If the published calculator changed, they review the filled-in options first. The link is hidden when _state is blank (older orders).
Paste both blocks, in this order, at every product-title location below.
Custom options
<!-- APPIFY CPO PROPERTIES -->
{% for property in line.properties %}
{% assign property_first_char = property.first | slice: 0 %}
{% if property.last != blank and property_first_char != '_' %}
<span class="order-list__item-property">
• {{ property.first }}: {{ property.last }}
</span>
{% endif %}
{% endfor %}
<style>
td.order-list__image-cell {
display: flex;
}
span.order-list__item-property {
display: block;
height: max-content;
margin-top: 5px;
padding-left: 1.5em;
}
</style>
<!-- APPIFY CPO END PROPERTIES -->
When the nearby code uses component instead of line, change every line.properties in that block to component.properties.
Reorder
<!-- APPIFY CPO REORDER -->
{% assign st = line.properties._state %}
{% if st == blank %}
{% assign st = line.properties["_state"] %}
{% endif %}
{% if st == blank %}
{% assign st = component.properties._state %}
{% endif %}
{% if st == blank %}
{% assign st = component.properties["_state"] %}
{% endif %}
{% if st != blank %}
<p><a href="{{ shop.url }}/apps/calculator-ai/reorder?state={{ st }}">Reorder this item</a></p>
{% endif %}
<!-- APPIFY CPO END REORDER -->
On an unmodified Shopify default template, make five pastes. If you have edited the template, run the same searches and paste at every match that shows a product title.
{{ line_title }} × {{ line_display }}.</span> and the <br/> on that same title line.It should look like this after the paste:
<span class="order-list__item-title">{{ line_title }} × {{ line_display }}</span><br/>
<!-- APPIFY CPO PROPERTIES -->
{% for property in line.properties %}
{% assign property_first_char = property.first | slice: 0 %}
{% if property.last != blank and property_first_char != '_' %}
<span class="order-list__item-property">
• {{ property.first }}: {{ property.last }}
</span>
{% endif %}
{% endfor %}
<style>
td.order-list__image-cell {
display: flex;
}
span.order-list__item-property {
display: block;
height: max-content;
margin-top: 5px;
padding-left: 1.5em;
}
</style>
<!-- APPIFY CPO END PROPERTIES -->
<!-- APPIFY CPO REORDER -->
{% assign st = line.properties._state %}
{% if st == blank %}
{% assign st = line.properties["_state"] %}
{% endif %}
{% if st == blank %}
{% assign st = component.properties._state %}
{% endif %}
{% if st == blank %}
{% assign st = component.properties["_state"] %}
{% endif %}
{% if st != blank %}
<p><a href="{{ shop.url }}/apps/calculator-ai/reorder?state={{ st }}">Reorder this item</a></p>
{% endif %}
<!-- APPIFY CPO END REORDER -->
{{ line_title }} × {{ line_display }}.</span><br/>.{{ line_title }} × {{ line_display }}.</span><br/>.{{ line_title }} × {{ line_display }}.</span><br/>.Shopify keeps several order-summary layouts in one file. Each of these four titles is a different layout. Paste at all four so every layout shows options and Reorder.
Newer Shopify templates also print the title with component.
{{ component.variant.title }}.{{ component_title }} and {{ component.quantity }}.{% endif %} that closes {% if component.variant.title != 'Default Title' %}.{% endif %}.line.properties to component.properties in the Custom options snippet (the Reorder snippet already checks both).If you have already changed this template and the line number does not match, paste after every {{ component.variant.title }} block that sits under a product title.
New order confirmation emails will show the options and Reorder link.
On the dashboard setup card, choose Order confirmation email, open the Shopify editor, copy the Email body (HTML), paste it into Update with AI, then copy the result back into Shopify and save. Mark the email complete when you are done.