Rob's Issue Planning Notes #73

Open
opened 2026-06-29 08:36:18 +00:00 by rob · 1 comment
Owner
No description provided.
rob added the Planning label 2026-06-29 08:36:18 +00:00
Author
Owner

eStack GitLab Issues — Full Backlog

Issues are grouped by type. Each is a separate GitLab issue.


🐛 BUGS & FIXES


Issue 6: Products — retail shipments picked page (missing route)

/products/:id/retail-shipments/picked returns 404. Build this route — should show retail shipments for the product filtered to status = picked.


Issue 7: Purchase Order detail — three fixes

7a. No green SKU links on PO detail
On /purchase-order/1157, SKUs render as plain text. Apply es-cell-mono es-sku link style.

7b. Qty column missing/empty
Qty values not displaying. Investigate view model.

7c. Cannot submit empty PO guard
Prevent sending a PO with zero line items or zero quantities. Add controller guard + client-side validation.


Issue 8: SKU widget — thumbnail position

Move product thumbnail from the top of the SKU widget popup to either the bottom or the left side (beside the SKU title). Gives more prominence to text/data immediately.

Component: .es-sku-widget in _components.scss


Issue 9: Remove Stock — missing location causes page error

Submitting Remove Stock without selecting a location throws a server error. Add validation: show es-error-block inline if no location selected, don't crash.



Issue 13: Product images — drag and drop multi-upload broken

Dragging and dropping more than one image at a time on the Product Detail image upload area only processes the first file. Fix the drop handler to iterate event.dataTransfer.files (it's a FileList, not a single file):

// Wrong — only handles first file
var file = e.dataTransfer.files[0];

// Correct — iterate all dropped files
Array.from(e.dataTransfer.files).forEach(function(file) { /* upload */ });

Issue 14: Supplier tab — layout improvements needed

The Supplier tab on Product Detail needs a better layout. Current display is too cramped/unstructured. Specific improvements:

  • Fields should use the standard two-column es-form-row grid
  • Supplier name should link to the supplier record
  • Add/remove supplier should be more clearly separated from the supplier detail fields

(Awaiting design direction from Rob before implementing)


Issue 16: B2B Shipments — multi-carton support (EasyPost, UPS, FedEx, ShipStation)

Multi-carton B2B shipments are not fully supported through EasyPost, UPS, FedEx, and ShipStation. The cartonization page exists (built in BS5 migration) but the carrier API calls need to support multiple parcels per shipment request.

Each carrier's multi-parcel approach:

  • EasyPost: Pass array of parcel objects to the shipment
  • UPS/FedEx: Multi-piece shipment with package-level detail per piece
  • ShipStation: Multiple packages per order

(Requires carrier-specific implementation — scope with Van before estimating)


Issue 17: Create Shipment action on Orders — status guard

The "Create Shipment" action on the Retail Orders list/detail should only appear after the order reaches a certain status. Proposed rule:

Show "Create Shipment" only when order status is Picked or Complete.

Rationale: if an order is still in Initial/New, creating a separate shipment for forgotten items is premature. Once an order is Picked and sealed, a separate shipment makes sense.

Rob to confirm exact status threshold before implementing.


⚙️ FEATURES & ENHANCEMENTS


Issue 18: Global units preference — metric/imperial display

Add a global display preference in Settings for metric vs. imperial units. Decision:

For now: Unit toggle is display-only. The system stores everything canonically in oz (weight) and inches (dimensions). If a user selects grams or cm, values are converted from oz/inches for display only — the stored value remains in imperial.

Implementation:

  • Add "Unit Display" setting to Settings page (Imperial / Metric)
  • Store as a user or store preference
  • On all pages that display weight or dimensions, read the preference and convert for display
  • Form inputs still accept either unit and convert on save

Note: This affects a large number of pages. Rob to confirm which pages are in scope before Van implements. At minimum: Product Detail (weight/dimensions fields), Purchase Orders, Shipping Rules, Packaging.


Issue 19: Direct Orders — totals per page and overall

On B2B Direct Orders:

  • Add a subtotal row at the bottom of each page (sum of line item totals for visible rows)
  • Add an overall order total (sum across all pages)
  • Totals should update when filters are applied — filtered total reflects only filtered rows

URL: /direct-orders


Issue 20: Purchase Orders — currency column + FX totals

On the PO list (/purchase-orders):

  • Add a Currency column per row (since different suppliers may invoice in different currencies)
  • Add FX-converted totals using live FX API rates (see Issue 23 for FX API)
  • Fix NaN% display bug in existing totals/variance columns
  • Improve the Vendor/Supplier selector UI (currently too basic — needs typeahead/search)

Issue 21: EasyPost — allow updating return address on labels

Add the ability to change the return address on an EasyPost label after it's been generated (or during creation). Currently the return address is fixed to the store's default. Some shipments may need a different return location.


Issue 22: Security — verify identity before showing API credentials

Before revealing stored API keys or secrets (when "Show" is clicked on credential fields in Channel Setup), send a verification code to the account owner's email. User must enter the code to reveal the value.

Applies to: Amazon, eBay, Walmart, ShipStation setup pages.


Issue 23: Avery label template selection for Print Jobs

(Deferred — post BS5 migration)

Add the ability to select an Avery label template when printing labels from the Print Job page. Requires mapping shipment data (tracking number, address, weight, dimensions) to label fields per template.

This is a deeper integration with the print system. Not a priority until BS5 migration is complete and other functions are finished. Rob to scope separately.


🤖 AI / FUTURE PLANNING

(Not GitLab issues yet — planning notes only)


Planning: AI product listing creation

Use an AI API to generate Amazon/eBay/Shopify product listings from product data (title, description, images, specs). Output: fully formatted listing copy optimized per channel.


Planning: Amazon catalog + competitive research

Connect to Amazon catalog data (via SP-API Product Catalog API) to power:

  • Product recommendations
  • Competitive pricing research
  • Listing gap analysis

Planning: AI-powered PO generation from BRR/JIT

Connect an AI engine to the Burn Rate Report and JIT Purchase Order Generator to automatically draft POs based on velocity data, stock levels, and lead times. Human review step before submission.


Planning: FX API integration

Integrate a live FX rate API for multi-currency PO and DO totals. Evaluate cost:

  • xe.com API — established, reliable, paid
  • Open Exchange Rates — lower cost
  • AI/LLM API with rate lookup — not recommended for financial data; accuracy and latency not suited to live FX

Recommendation: use a dedicated FX API (xe or Open Exchange Rates) rather than an AI API for currency conversion. AI APIs are not reliable sources of live financial data.


Planning: SOC 2 Type II certification (PII Data)

Scope and begin the SOC 2 Type II process for handling PII data. This requires:

  • Data inventory and classification
  • Access controls audit
  • Logging and monitoring
  • Vendor risk assessments
  • Engagement with a certified auditor

(Long-term initiative — separate from product roadmap)

Screenshot_2026-06-24_at_12.27.51_AM (1).png

Shipment Details card too wide.. address scrunched up because of it

Screenshot_2026-06-24_at_12.30.29_AM.png

  • WM Diret is using the PO # as teh eStack Chanel ID. We should use the Order number, not PO #. PO# 129117755368982 is Order# 200014807791284, for example.
  • Add Ireland to Add Amazon Seller Central Account. which other countries?
  • Fix shipment statuses so they are marked shipped and the orders can be marked complete.
  • SKU alias, remove UPC and EAN fields, repalce with teh GTIN like Add Products page
    • remove customer SKU on b2b pages
  • Get UPS and FedEx working via Easypost. then Royal Mail
  • Hide option for inactive / deactuivated stores on Settings > Store Settings > Channel Accounts
  • https://primabrands-llc.estack.com/stores/1/amazon-account/19/edit — allow re-establish connection to channel
  • FBA Restock — Most Urgent -- id SKU is discontinued in eStack don;t show it. show the top 5 that are not discontinued in the system
  • Discontinued SKUs can show up ion SKU alias SKU picker
  • RetailShipping ConnectorsShipStation - move disabled to the bottom and show deactivated sign
  • Dark mode on retail orders: https://primabrands-llc.estack.com/retail/orders/63092. Cancel button needs to be fixed. Make style guide for buttons across site dark/light modes
  • SKu must be unique warning on adding new peroduct when SKU exists.. needs to be more clear (not green text) and more attention grabbing.
  • Multi-warehouse support via Shipping Rules adding or restricting locations
  • DisableAmazon USA? Orders will no longer be imported from this channel. You can re-enable it at any time. — fizx this modal

update messages without file name looking text:
20% Complete
Requesting merchant-listings report from Amazon
29% Complete
Waiting for Amazon to generate the report (status: IN_QUEUE)
33% Complete
Waiting for Amazon to generate the report (status: IN_PROGRESS)
92%
Report ready. Downloading and importing SKUs...

  • https://erwan.estack.com/stores/1 placeholder text improvements
  • Add date range to Retail Orders
  • https://primabrands-llc.estack.com/products/1458/inventory -- too many Allocated old orders
  • Orders Fetch button modal; add the time range it's checking
  • GB needs to be separated to per EU country for SKU Sales tab and other locations
  • Multi instance visibility - Show/share SKU and stock values but not others. Allow order routing to other instances' stock with mutual permission on Pickable stock.
  • Invoice tool with company detials for any order (retail or b2b). Nice templates with options

-- LATER:

  • 3PL fulfillment fee billing based on number of shipments - can charge postage and fulfillment or just fulfillment
  • Search DOs and b2b Shipments by customer, SKU, reference, etc.

https://primabrands-llc.estack.com/retail/shipments/5337

Pending reship has no Finalize Shipment button

Screenshot_2026-06-27_at_12.55.04_AM.png

# eStack GitLab Issues — Full Backlog Issues are grouped by type. Each is a separate GitLab issue. --- ## 🐛 BUGS & FIXES --- ### Issue 6: Products — retail shipments picked page (missing route) `/products/:id/retail-shipments/picked` returns 404. Build this route — should show retail shipments for the product filtered to `status = picked`. --- ### Issue 7: Purchase Order detail — three fixes **7a. No green SKU links on PO detail** On `/purchase-order/1157`, SKUs render as plain text. Apply `es-cell-mono es-sku` link style. **7b. Qty column missing/empty** Qty values not displaying. Investigate view model. **7c. Cannot submit empty PO guard** Prevent sending a PO with zero line items or zero quantities. Add controller guard + client-side validation. --- ### Issue 8: SKU widget — thumbnail position Move product thumbnail from the top of the SKU widget popup to either the bottom or the left side (beside the SKU title). Gives more prominence to text/data immediately. **Component:** `.es-sku-widget` in `_components.scss` --- ### Issue 9: Remove Stock — missing location causes page error Submitting Remove Stock without selecting a location throws a server error. Add validation: show `es-error-block` inline if no location selected, don't crash. --- --- ### Issue 13: Product images — drag and drop multi-upload broken Dragging and dropping more than one image at a time on the Product Detail image upload area only processes the first file. Fix the drop handler to iterate `event.dataTransfer.files` (it's a FileList, not a single file): ```javascript // Wrong — only handles first file var file = e.dataTransfer.files[0]; // Correct — iterate all dropped files Array.from(e.dataTransfer.files).forEach(function(file) { /* upload */ }); ``` --- ### Issue 14: Supplier tab — layout improvements needed The Supplier tab on Product Detail needs a better layout. Current display is too cramped/unstructured. Specific improvements: - Fields should use the standard two-column `es-form-row` grid - Supplier name should link to the supplier record - Add/remove supplier should be more clearly separated from the supplier detail fields *(Awaiting design direction from Rob before implementing)* --- ### Issue 16: B2B Shipments — multi-carton support (EasyPost, UPS, FedEx, ShipStation) Multi-carton B2B shipments are not fully supported through EasyPost, UPS, FedEx, and ShipStation. The cartonization page exists (built in BS5 migration) but the carrier API calls need to support multiple parcels per shipment request. Each carrier's multi-parcel approach: - **EasyPost:** Pass array of `parcel` objects to the shipment - **UPS/FedEx:** Multi-piece shipment with package-level detail per piece - **ShipStation:** Multiple packages per order *(Requires carrier-specific implementation — scope with Van before estimating)* --- ### Issue 17: Create Shipment action on Orders — status guard The "Create Shipment" action on the Retail Orders list/detail should only appear after the order reaches a certain status. Proposed rule: **Show "Create Shipment" only when order status is `Picked` or `Complete`.** Rationale: if an order is still in Initial/New, creating a separate shipment for forgotten items is premature. Once an order is Picked and sealed, a separate shipment makes sense. Rob to confirm exact status threshold before implementing. --- ## ⚙️ FEATURES & ENHANCEMENTS --- ### Issue 18: Global units preference — metric/imperial display Add a global display preference in Settings for metric vs. imperial units. Decision: **For now:** Unit toggle is display-only. The system stores everything canonically in oz (weight) and inches (dimensions). If a user selects grams or cm, values are converted from oz/inches for display only — the stored value remains in imperial. Implementation: - Add "Unit Display" setting to Settings page (Imperial / Metric) - Store as a user or store preference - On all pages that display weight or dimensions, read the preference and convert for display - Form inputs still accept either unit and convert on save Note: This affects a large number of pages. Rob to confirm which pages are in scope before Van implements. At minimum: Product Detail (weight/dimensions fields), Purchase Orders, Shipping Rules, Packaging. --- ### Issue 19: Direct Orders — totals per page and overall On B2B Direct Orders: - Add a **subtotal row at the bottom of each page** (sum of line item totals for visible rows) - Add an **overall order total** (sum across all pages) - Totals should update when filters are applied — filtered total reflects only filtered rows **URL:** `/direct-orders` --- ### Issue 20: Purchase Orders — currency column + FX totals On the PO list (`/purchase-orders`): - Add a **Currency** column per row (since different suppliers may invoice in different currencies) - Add **FX-converted totals** using live FX API rates (see Issue 23 for FX API) - Fix `NaN%` display bug in existing totals/variance columns - Improve the Vendor/Supplier selector UI (currently too basic — needs typeahead/search) --- ### Issue 21: EasyPost — allow updating return address on labels Add the ability to change the return address on an EasyPost label after it's been generated (or during creation). Currently the return address is fixed to the store's default. Some shipments may need a different return location. --- ### Issue 22: Security — verify identity before showing API credentials Before revealing stored API keys or secrets (when "Show" is clicked on credential fields in Channel Setup), send a verification code to the account owner's email. User must enter the code to reveal the value. Applies to: Amazon, eBay, Walmart, ShipStation setup pages. --- ### Issue 23: Avery label template selection for Print Jobs *(Deferred — post BS5 migration)* Add the ability to select an Avery label template when printing labels from the Print Job page. Requires mapping shipment data (tracking number, address, weight, dimensions) to label fields per template. This is a deeper integration with the print system. Not a priority until BS5 migration is complete and other functions are finished. Rob to scope separately. --- ## 🤖 AI / FUTURE PLANNING *(Not GitLab issues yet — planning notes only)* --- ### Planning: AI product listing creation Use an AI API to generate Amazon/eBay/Shopify product listings from product data (title, description, images, specs). Output: fully formatted listing copy optimized per channel. --- ### Planning: Amazon catalog + competitive research Connect to Amazon catalog data (via SP-API Product Catalog API) to power: - Product recommendations - Competitive pricing research - Listing gap analysis --- ### Planning: AI-powered PO generation from BRR/JIT Connect an AI engine to the Burn Rate Report and JIT Purchase Order Generator to automatically draft POs based on velocity data, stock levels, and lead times. Human review step before submission. --- ### Planning: FX API integration Integrate a live FX rate API for multi-currency PO and DO totals. Evaluate cost: - **xe.com API** — established, reliable, paid - **Open Exchange Rates** — lower cost - **AI/LLM API with rate lookup** — not recommended for financial data; accuracy and latency not suited to live FX Recommendation: use a dedicated FX API (xe or Open Exchange Rates) rather than an AI API for currency conversion. AI APIs are not reliable sources of live financial data. --- ### Planning: SOC 2 Type II certification (PII Data) Scope and begin the SOC 2 Type II process for handling PII data. This requires: - Data inventory and classification - Access controls audit - Logging and monitoring - Vendor risk assessments - Engagement with a certified auditor *(Long-term initiative — separate from product roadmap)* ![Screenshot_2026-06-24_at_12.27.51_AM (1).png](/attachments/504a2c5e-9678-457d-9cfb-49d00fcc65d6) Shipment Details card too wide.. address scrunched up because of it ![Screenshot_2026-06-24_at_12.30.29_AM.png](/attachments/672552ac-ebb0-468d-8f7a-f0cead6ed662) - WM Diret is using the PO # as teh eStack Chanel ID. We should use the Order number, not PO #. PO# 129117755368982 is Order# 200014807791284, for example. - Add Ireland to Add Amazon Seller Central Account. which other countries? - Fix shipment statuses so they are marked shipped and the orders can be marked complete. - SKU alias, remove UPC and EAN fields, repalce with teh GTIN like Add Products page - - remove customer SKU on b2b pages - Get UPS and FedEx working via Easypost. then Royal Mail - Hide option for inactive / deactuivated stores on Settings > Store Settings > Channel Accounts - https://primabrands-llc.estack.com/stores/1/amazon-account/19/edit — allow re-establish connection to channel - FBA Restock — Most Urgent -- id SKU is discontinued in eStack don;t show it. show the top 5 that are not discontinued in the system - Discontinued SKUs can show up ion SKU alias SKU picker * RetailShipping ConnectorsShipStation - move disabled to the bottom and show deactivated sign - Dark mode on retail orders: https://primabrands-llc.estack.com/retail/orders/63092. Cancel button needs to be fixed. Make style guide for buttons across site dark/light modes - SKu must be unique warning on adding new peroduct when SKU exists.. needs to be more clear (not green text) and more attention grabbing. - Multi-warehouse support via Shipping Rules adding or restricting locations * DisableAmazon USA? Orders will no longer be imported from this channel. You can re-enable it at any time. — fizx this modal update messages without file name looking text: 20% Complete Requesting merchant-listings report from Amazon 29% Complete Waiting for Amazon to generate the report (status: IN_QUEUE) 33% Complete Waiting for Amazon to generate the report (status: IN_PROGRESS) 92% Report ready. Downloading and importing SKUs... - https://erwan.estack.com/stores/1 placeholder text improvements - Add date range to Retail Orders - https://primabrands-llc.estack.com/products/1458/inventory -- too many Allocated old orders - Orders Fetch button modal; add the time range it's checking - GB needs to be separated to per EU country for SKU Sales tab and other locations - Multi instance visibility - Show/share SKU and stock values but not others. Allow order routing to other instances' stock with mutual permission on Pickable stock. - Invoice tool with company detials for any order (retail or b2b). Nice templates with options -- LATER: - 3PL fulfillment fee billing based on number of shipments - can charge postage and fulfillment or just fulfillment - Search DOs and b2b Shipments by customer, SKU, reference, etc. ---- **https://primabrands-llc.estack.com/retail/shipments/5337** Pending reship has no Finalize Shipment button ![Screenshot_2026-06-27_at_12.55.04_AM.png](/attachments/771db3e3-b485-499b-bd51-2f0ae2355805)
Sign in to join this conversation.