Workflow

Strategy Pipeline (Strategist)

The Strategist is your primary operator tool — a whole-portfolio allocator that proposes how every card in your collection should be routed across channels. You review the proposal, approve, and one click ships hundreds of cards to their assigned destinations with the right metadata.

What it does

  1. Reads every card in your personal channel that's not already engaged elsewhere
  2. Scores each card across multiple dimensions (price, recency, sport, comp confidence, sales velocity)
  3. Routes each card to the recommended channel using configurable thresholds
  4. Builds lots from the routed cards (city, team, player, set, sport groupings)
  5. Renders the proposal in a 4-quadrant view (eBay / ToT / Showcase / Repack pools)
  6. One click commits — every card lands on its target channel with theme metadata, transfer codes, and webhook fan-out

The macro presets

PresetBehaviorWhen to use
MIX Balanced default. Cards routed by score across all channels. Lots built where natural groupings exist. Most weeks. Lets the engine decide.
STOREFRONT Premium-first. High-value cards route to Storefront direct-buy. ToT gets mid-tier. Repacks absorb low-value. You have a strong storefront and want it loaded with hero cards.
AGGRESSIVE PULL Sub-$15 cards route as Pull-only singles (lots disabled). ToT gets max volume. You're building Pull stack inventory for a marketing push.
💡 Presets are starting points

Each preset stamps a default config; every field is editable before commit. Think of presets as "give me a sane starting point" — then tune the thresholds for your shop's specifics.

The four quadrants

1. eBay pool

Cards scored as best-fit for eBay (typically: high comp confidence, mid-tier price band, broad buyer appeal). Default range: $0 - $15 individual, lots up to $75 total. Adjustable via ebay_min / ebay_max.

2. ThisOrThat pool

Cards scored for the marketplace games (singles + lots). Default range: $10 - $50 per card. Lots are built when 4+ cards share city/team/player/set theme.

3. Showcase Breaks pool

Cards reserved for break-style sales. Operator picks a preset (Starter / Standard / Premium) and quantity. Strategist fills each break with a balanced card mix.

4. Repack pool

Sealed-pack candidates. Cards under tot_min_value with too little theme-density to lot (scattered teams, single-card-per-set) flow here. Operator picks pack templates and quantities.

The allocator engine

Lives at backend/services/strategist/allocator.js. The flow:

  1. Score every card via backend/services/channel-scoring/index.js (returns recommended channel + confidence)
  2. Filter to cards with valid pricing (asking_price or comp_value > 0)
  3. Bucket by recommendation
  4. Run buildLots() on the ToT bucket: city → team → player → set → sport priority
  5. Run buildLots() on the eBay bucket separately (different sizing)
  6. Apply target caps if set
  7. Return four buckets + portfolio_economics rollup

The commit

Hits POST /api/curator/strategist/commit with this payload shape:

{
  channels: ['thisorthat', 'ebay', 'showcase', 'repack'],
  thisorthat: {
    singles: [{ card_id, asking_price, comp_value, ... }, ...],
    lots: [{
      kind: 'city',
      label: 'Dallas Multi-Sport Lot',
      card_ids: [12, 47, 89, ...],
      total_value: 84.50,
      theme_key: 'dallas',
      theme_label: 'Dallas',
      theme_sports: ['football', 'basketball'],
      theme_teams: ['Dallas Cowboys', 'Dallas Mavericks'],
    }, ...],
    spread: 0.25,
  },
  ebay: { singles: [...], lots: [...] },
  showcases: [{ template, card_ids, ... }, ...],
  repacks: [{ template, card_ids, ... }, ...],
  spread: 0.25,
  pull_singles_eligible: true,
  pull_lots_max_eligible: 5,
  flip_eligible_floor: 15,
}

The endpoint:

  1. Validates — duplicate card_ids across groups → 400; cards already on a non-personal channel → 409
  2. Generates a transfer code (e.g. ST-A7BX9KQR)
  3. For each channel, calls the satellite's webhook (POST {satellite}/api/webhook/ingest)
  4. Each satellite stages cards into its local schema AND auto-publishes Listings (since the latest update — see ToT app)
  5. Inserts card_channels rows for every committed card with the appropriate channel slug
  6. Returns a per-channel results summary with transfer codes + webhook ack status

Triage + Lot Builder — focused entry points

The Strategist is comprehensive. For day-to-day work, two narrower tools branch off it:

Production gotchas

Code references