## old:
1. [x] set up additional variant metafields
  - [x] Estimated ship date
  - [x] Swatch colors list
2. [x] set up a new product metafield
  - [x] Addon type -- *will drive line item rendering in the cart*
3. [x] add cart-related fields to the Addon Type metaobject
  - [x] Cart: Presentation
  - [x] Cart: Show Price (T/F)
  - [x] *all addons should decidedly never have qty control or trash can btn*
4. [x] Create a new metaobject for Shipping Milestones
  - [x] *will drive a Flow that changes `variant.metafields.store.ship_date` according to sold qty*
  - [x] Title - internal ref. title. should describe intended product, sales qty, and new date
  - [x] QTY Threshold - no. sales required for the new date to be assigned
  - [x] Set Date - The date that will be assigned once the qty threshold of sales is passed
5. [x] Set up another new variant metafield which accepts a list of Shipping Milestones
6. [x] ~~set up additional order metafields~~
  - [x] decided we don't need new order metafields. remove the existing one + deactivate the relevant Flow
7. [x] Write the real code to the text file's pseudocode, putting all needed vars in BigData & state
- [x] Get addon options rendering on the product page using the new data architecture
- [x] Implement population of `BigData.product.selectedAddons[]`
- [x] Fix `BigData.product.selectedAddonGroups` and `.selectedAddons` not updating as the user's product variant selection is changed
- [x] Have addon select groups update their selected state on page load
- [x] Have addon select groups update their selected state (to addonGroup's default) whenever variant is changed & doesn't offer the selected option
- [x] Style addon option groups according to their addon type params
  - [x] Need to set up a `data-ui-style` attribute on **.addon-options**
  - [x] For **Color Swatch**
  - [x] For **Product Photo**
  - [x] For **Variant Name**
- [x] Update "Add to Cart" btn
  - [x] Have btn text update according to latest ship date across the selected variant and addons (derive ship dates from BigData)
  - [x] Add multiple SKUs to cart according to presence of addons
  - [x] Set `_addon_variants` property as a list of all addon VIDs added to cart by this click
  - [x] For each addon, set `_addon_parent_variant` property as variant ID of main product. Indicates to cart renderer that this variant should be presented according to the props of its addon type
  - [x] Set `_est_date` and `_est_msg` properties according to latest estimated date across core product and selected addons
    - [x] Should always set `_ship_date` and `_ship_msg` for any line item where the product has an assigned ship date, so CS can see estimated ship dates of all order line items
- [x] Test adding __potato__ to cart in different configurations. Ensure no bugs with text display, adding to cart, or line item properties once in cart
  - [x] With variants (as it is now)
    - [x] With/without shipping dates
  - [x] Without variants
    - [x] With/without shipping dates
- [x] Update cart code so inventory qty selector is dynamic, only permits values up to `lineItemQty + (product.metafields.cart.qty_limit - netQty)`

## tuesday:
- [x] Set up & test the shipping milestones Flow
  - [x] Needs to update ship_date & ship_msg metafields for variants that reach their milestones
  - [x] Try to have it trigger on other events aside from **new order**. For instance, trigger on product updated/saved

## wednesday:
- [x] Add `"Information": "Addon for [selectedProductVariant.title]"` line item property to addons in the cart
- [x] Update `Add to cart` btn so all `addon_type.prop_key`s are used and populated onto the parent product's line item. Value should be the corresponding addon's variant title
- [x] Add `addon_group.ephemeral_variants` to define variants which *won't* add line items to the cart (i.e. whatever the default shell color ends up being?)
- [x] Add boolean `variant.metafields.addon.ships_separately` + corresponding functionality which ensures addons with this set don't affect parent product's conveyed ship date

## arda:
- [x] Order testing
- [ ] Acquire more knowledge & start a plan for integrating BS2 into Arda
  - [x] Use an Obsidian Canvas to diagram interdependent code files & draft notes about what would need changed in each
  - [ ] Explore the definition for `FabricatorAdminApi.createBigOrderInternal()` and diagram the key things it does pertaining to the BigscreenBeyondV1 product
- [ ] Think of/find and diagram any other unique ways that BigscreenBeyondV1 product is handeled
  - [ ] Inventory (scan in by SN, matching to orders, etc.)
  - [ ] Auto assignment in BigShipper. Expect to need to unwind some of the IPD parsing & pairing code for BS2

## store:
- [x] Add a new GUI style (?) for addon groups where each item is toggleable
    - [x] In metaobjects
        - [x] Addon type: **accessories-multi**
        - [x] UI Style: `Toggle + Photo`
- [ ] Cart styling
  - [ ] Set up rendering cases for all addon types
  - [x] Ensure products only render as addons if their line item has the `_addon_parent_variant` prop
  - [x] Ensure removal of parent variant also removes its addon products
  - [ ] Ensure you can have an addon product alongside a standard version of itself

## new product page:
- [x] Add variant metafields
    - [x] `store.subtitle` for the gray text beside variant names (single line __list__)
    - [x] `store.info_box` for the product variant desc, a div that changes contents
    - [x] `store.info_link` to define if the variant (hmd model) gets a "Learn more" URL
    - [x] `addon.description` optional. the addon selection box desc
    - [x] `addon.price_text` optional + multi-line. overrides the selection box price display with static text
    - [x] `addon.fine_print` if set, puts a superscript number at the end of the addon name, and matching fine print section below the addons group
    - [x] `addon.linked_variants` if set, the corresponding variant(s)―even across groups―are selected/deselected in tandem (assuming it is also on the page as an addon)
      - "deselected" for non-toggleable groups means changing its chosen option to the default
- [x] Add **addon_group** metaobject fields
    - [x] `header` header text for this group
    - [x] `description` optional. the addon group desc. displayed beneath the header
    - [x] `checked_variants` list of options that default to checked
    - [x] `disabled_variants` list of options whose state cannot be directly modified
- [x] Update web docs
- [x] Set up missing products
    - [x] Personalized Face Cushion
    - [x] Soft strap update (make variant, give it image)
    - [x] Universal Face Cushion
    - [x] Halo Strap + Universal Cushion
- [x] Move `header` and `description` from **addon_group** to **addon_type**
    - [x] Update docs
- [x] Consider (almost certainly *do*) putting a `toggleable` boolean field in **addon_group**
    - [x] Nix the `Toggleable + Photo` UI style option in **addon_type**
    - [x] Update docs
- [x] Consider adding an `eta_tier` integer metafield to **Variants**. For example, a variant with `eta_tier` of **2** but earlier `ship_date` would have priority over a variant with `eta_tier` of **1** and later `ship_date`.
    - [x] Would allow an order with personalized cushion + halo kit to be marked with an earlier ETA
    - [x] **ULTIMATELY** probably better to forego this. If anything, verbally recommend ordering the halo kit separately if it's selected alongside the PFC.
- [x] Disable searchability for all new products
- [x] Verify whether line items' `addon_type.prop_key` comes through the group (A: it does)
- [x] Set up new variant metafields for test HMD variants
- [x] Set up new addon groups
    - [x] **bs-2-cushions**
    - [x] **bs-2-straps**
- [x] Add **Product** metafields
    - [x] `store.selector_header` For the header label text of the variant selector section
    - [x] `store.selector_description` For the desc text of the variant selector section
- [x] Verify whether the shipping threshold system is based on total product sales vs. variant sales
    - [x] A: It's neither. Based on `arda.product_code`
    - [x] If the latter, consider adding a boolean `store.milestones_self_only` field that enables counting only sales of that exact variant
- [x] Update docs
- [x] Handle linked variant activation
- [x] Handle toggleable addon groups
    - [x] Style/will need to act on `checkbox`, not `radio`
    - [x] JS/ensure the line item props can populate with 0 or >1 options
    - [x] JS/ensure multiple line items can be added from the same group, and each gets li props
- [x] In builder: JS/calculate price according to model + addons selected
    - [x] **Ignore** the price of ephemeral addons
- [x] In builder: JS/date calcuation code update for multiselect groups
    - [x] Redirect date calculation updates to the new **Estimated delivery** element
- [x] In builder: JS/add to cart code
- [x] ~~In Shopify Flow: JS/date calcuation code update for multiselect groups~~ (actually probably not necessary as everything will be a line item?)
- [x] In builder: DOM/style
    - [x] Model selector
        - [x] Header/desc
        - [x] Select buttons
        - [x] Info box
    - [x] Addon selector
        - [x] Header/desc
        - [x] Swatch name + fine print superscript + price (desc too?)
        - [x] Swatch buttons
        - [x] Photo buttons w/checkbox + name + fine print superscript + desc + price
        - [x] Text only buttons w/checkbox + name + fine print superscript + desc + price
        - [x] Fine print sections
        - [x] Disabled addons
    - [x] Scrolling product options
    - [x] Sticky "order now" section at bottom
        - [x] `shipMsg` not affected by variants with `metafields.ships_separately == true`
        - [x] `price` not affected by variants in `selectedAddonGroups.ephemeral_variants`
    - [x] Entire product section scrolls once reached bottom of product options
    - [x] Hide price text for ephemeral variants (assuming no price text override is set)
- [x] In builder: JS/change product photo(s) according to variant selected
- [ ] Idea: **Variant** metafield `exclude_variants` (not really needed)
    - [ ] Variants in this list are unchecked (& maybe disabled?) when this variant is checked
    - [ ] This variant is unchecked (& maybe disabled?) when variants in this list are checked

## Launch run-up week
- [x] Update shipping threshold Flow to allow for negatives
    - [x] Triggers on `<= neg`, `>= pos`, or `== 0`.
- [x] Homepage bugfixes
    - [x] many images change the cursor style to `pointer`
    - [x] fix optics anim to start as soon as it comes into view
    - [x] customizer images are (and shouldn't be) lazy-loading
    - [x] customizer content height is fixed, can look bad
    - [x] update mobile accordion (configurator) styles to match figma
        - [x] find a style solution for showing unfolded text clearly when accordion changes?
    - [x] improve BS2 vs. BS2E tabs styling
    - [x] check if webp video needs fallback images
    - [x] do webp images need png fallbacks? (diff. browsers)
    - [x] can we self-host images/webp video? ask David best place/way to upload
- [x] Tablet & mobile-proof homepage
- [x] Product page: Fix deselecting radio options not also switching off linked options
- [x] Tablet & mobile-proofing the product page
- [x] Test the product page against other key product types
    - [x] **Accessories** - soft strap
    - [x] **Shirts** - potato
    - [x] **Prescription lens inserts**
- [x] Cart styling
    - [x] Tablet & mobile-proof the cart
- [x] Set shipping ETA text & thresholds (0-firing) on all existing products
    - [x] Fix shipping milestones Flow code for positive inventory counts (change `>=` to `<=`)
- [x] Order confirmation email w/dynamic shipping date
- [x] Update test products to create their production listings
    - [x] Change page URL for BS2. Check it for other new products
    - [x] Add `marker-new`, `ignore-available` tags to any that will be on the storefront
    - [x] Ensure the proper markets are enabled
    - [ ] Do we have good renders?
    - [x] Update homepage links to link to BS2
- [x] Test purchase flow. Confirm all steps + email looks good
- [x] JP TL for builder/homepage. Research a way to quickly export all English text strings from Builder JSON and leveraging AI to crossfill from the spreadsheet Miyu made

# LAUNCH TASKS!
- [x] Switch all new products to `draft` status
- [x] Update `Home Styles` symbol to have the new color vars (incl. `body` bg)
    - [x] *actually maybe not b/c the white navbar will look bad on pages that don't have the white spacer?*
- [x] Update the press kit links in [site](https://builder.io/content/066feeda406b4fa2bf3c7a14686336b5/edit?activeDesignerTab=3&activeLocale=Default) and [store](https://admin.shopify.com/store/bigscreenvr/themes/132657348825?key=sections%2Ffooter.liquid) footers
- [x] Add new products (that sell standalone) to the storefront collection
- [x] Use bulk editor to simultaneously:
    - [x] Enable the appropriate sales channels for _all_ new products
    - [x] Enable `active` status for _all_ new products
- [x] Publish the new homepage on Builder.io (& move to top of content)
