Dashboard
π Orders by Status
π Daily Sales Trend
π Top Selling Products
| Product | Orders | Revenue |
|---|---|---|
| Loading... | ||
π Top Selling Brands
| Brand | Orders | Revenue |
|---|---|---|
| Loading... | ||
π¦ Product Stats
β οΈ Low Stock Alert
| Product | Brand | Stock |
|---|---|---|
| Loading... | ||
Quick Actions
| Product | SKU | Brand | Company | Cost | Price | Stock | Status | Actions |
|---|---|---|---|---|---|---|---|---|
| No products. Import from Aerial Vision first. | ||||||||
Global Markup
Default markup applied to all products without brand-specific settings. Brand overrides below take priority.
Brand Markups
One custom markup per brand. Brand rules override the global default for all products in that brand.
Example: 150% markup on a $100 cost β $250 selling price ($100 Γ 2.5).
| Brand | Markup | $100 cost β | Actions |
|---|---|---|---|
| No brand markups set | |||
π Price Change History
| Date | Product | Brand | Previous AV Cost | New AV Cost | Change | New Shopify Price |
|---|---|---|---|---|---|---|
| No price changes recorded | ||||||
| Shopify Order | AV Order | Company | Customer | Items | AV Total | Total | Status | Tracking | Date | Actions |
|---|---|---|---|---|---|---|---|---|---|---|
| No orders found | ||||||||||
Search a Shopify order and manually add it to AV. If AV has stock, fulfillment is moved to AV and local availability is zeroed.
Orders still OOS after processing β partial (refund OOS lines only) or full (cancel + refund whole AV-only order). Shown here regardless of the auto-refund toggle.
Switch to this tab to loadβ¦
Disputes, chargebacks, and financial holds are never sent to AV or auto-refunded. Use Try AV only when staff intentionally overrides the hold.
| Order | Hold reason | Financial | Fulfillment | Disputes | Staff status | Updated | Actions |
|---|---|---|---|---|---|---|---|
| Switch to this tab to load⦠| |||||||
Step 1: Import from Aerial Vision
Fetch products from Aerial Vision API and save to local database.
Step 2: Sync to Shopify
Create/update products in Shopify from local database.
Sync History
| Type | Status | Created | Updated | Failed | Date |
|---|---|---|---|---|---|
| No sync history | |||||
Shopify Inventory Location
Set the Shopify location ID where product inventory will be synced.
AV Out-of-Stock Refund Window
Days to wait from order placed date before sync-missing may refund or cancel (see Sync Missing Orders cron for the auto-refund toggle).
AV Null / Unknown Recreate Window
Days from order placed date before an AV order with null or unknown status is cancelled and re-submitted to AV (status sync cron).
Product Status
Set the default status for products when syncing to Shopify.
Note: Applies to new products created in Shopify from AV. Stock sync does not change product status.
β° Cron Jobs
Enable or disable automated background tasks.
Checks AV for order updates, syncs tracking to Shopify (every 30 min; queued if stock sync is running)
Updates stock
from AV to database and Shopify (cron: every 60 minutes on production; see repo scripts/crontab.production.example. Other cron jobs wait in queue while stock sync runs.)
Loadingβ¦
Creates pending AV products in Shopify in batches (cron: once daily, e.g. 5:00 β set in server crontab)
When ON: checks Solstice All-In stock before routing to AV β qty Solstice can handle is held in queue, remainder goes to AV. When OFF: orders are routed directly to AV without Solstice evaluation, and the waiting orders cron is skipped.
Re-checks order_line_queue rows in 'waiting' status by calling Solstice All In App endpoint (every hour). Creates AV orders for qty approved since last check.
Sends C1 AV orders to Solstice All-In as purchase orders, grouped by order date. Also re-syncs cancelled batches. (cron: daily at 3 AM)
Checks Shopify fulfillment status for C1 AV orders and marks shipped + tracking in DB. Solstice fulfills C1 orders directly in Shopify, so this keeps our DB in sync without hitting the AV status API. (cron: 5 AM & 9 PM EST)
Manual triggers:
Catalog Reconcile
For synced AV products: detect divergence on Shopify for price,
compare-at price (AV Italy price), vendor (brand),
required tags (aerial-vision_feed, OUTLET,
aerial-v_confirmed), and company tag (aerial-vision-company-1 / aerial-vision-company-2). Full catalog uses Shopify Bulk Operations
(one job at a time; queued if another is running).
Console: reconcileCatalog({ dryRun: true, limit: 5 }),
reconcileCatalog({ dryRun: false, limit: 5, startFrom: 11 }),
reconcileCatalogStatus()
Aerial Vision Companies
Company IDs to query from Aerial Vision. Company 2 is always primary β if two companies carry the same SKU, Company 2 wins. Additional companies fill in SKUs not carried by Company 2.