Hi
–Total products
–Units available
–Products out of stock
–Last stock change
Catalog
Every product in Shopify, and what is on
the shelf right now. Click one for its stock, history and sales.
–Products out of stock
–Held at another store
–Product types
Out of stock
Daily email
Each store's list, emailed every morning.
Customers
Everyone Shopify holds, mirrored here so the rest of
the portal can name and reach them.
Orders
Every Shopify order the portal holds, with what it
was worth and who placed it.
All stores
By store
Channels
Where the money came in.
Product types
What is carrying the range: the one
that decides what gets bought next.
Top products
By revenue in the selected range.
Profit over time
Each group's profit by period, at what each sale cost when it sold.
Discount codes
What each code brought in, and what it gave away.
Order now
Selling products by weeks of stock left, against how long their vendor takes to deliver.
Aged stock
On the shelf, and not sold in 60 days or more.
Demand waiting
Back-in-stock signups on the website, and product requests in the last 90 days.
Customer value
Lifetime, not the selected range.
Top customers
By lifetime spend.
Wulf Pack: before and after
Members' monthly spend in the six months before joining, against since.
Across stores
Customers in the range who used more than one place (online counts).
Launches
Allocated units against what was collected; no-shows once the pickup window is over.
Pre-orders
Open, and shipped in the last 60 days, against their caps.
Events
Attendance, and what checked-in players spent in the 30 days either side.
By platform
Spend against orders tagged as that platform's, and what the platform claims for itself.
Campaigns
By spend in the range.
Where online orders came from
By the last visit's source before the order.
Retention
Each row is everyone whose first order landed in
that month, and how many of them came back later.
The mirror
These reports read a local copy of Shopify orders,
kept current by webhooks and refreshed nightly.
How the figures are worked out
Launch allocations
Decide who gets a high-demand release: pick the launch’s
products from the catalog, prioritise by customer tags, narrow by store and
recent orders, and get one ranked list for everything on hand.
Email variables
What each Klaviyo email can use. The portal sends an event; a
Klaviyo flow triggered by that event's metric sends the email. In the template,
a variable is
{{ event.name }}, and a list is looped with
{% for item in event.products %}. Launch events and drops send
different metrics, so each can have its own flow and template; the variables
are the same.Loading…
Purchase orders
Order from vendors, then receive what arrives. Receiving adds the stock in
Shopify at the order's store and updates each product's cost per item.
Loading…
Vendors
Who purchase orders go to. A distributor that ships from several
warehouses has each one as a branch beneath it, with its own account and email; what
it carries is kept for the distributor as a whole, filled in by every order placed.
Loading…
Received into SortSwift
Tick the product types SortSwift counts. When a delivery of one is
received, its stock is sent to SortSwift only, never to Shopify — SortSwift
syncs it to Shopify itself. Everything else goes to Shopify as now. Changing this
moves the lines of orders not yet closed; what has already been received stays
where it went.
Loading…
SortSwift stores
Each store's SortSwift key, and the portal's copy of its SortSwift stock,
refreshed every five minutes. Products of the ticked types are paired with their
SortSwift row by SKU as soon as the copy has them; the rest are chosen by hand the
first time they're received.
Limits by product type
The most of each product of a type one order may hold: Booster Box = 2
allows 2 of every booster box, not 2 booster boxes in all. Leave it blank for no limit.
Shopify stops a cart or checkout over the limit and tells the customer why. Per order
only — a customer can still place a second order.
Loading…
Limits on single products
A product's own limit replaces its type's, stricter or looser. Each one is
saved to Shopify as soon as you set or clear it.
In-store only
Products whose Hudsonville stock is at or below their in-store threshold.
The website takes them out of carts and checkout refuses them. Checked within a minute of
a stock change, and every hour; Scan all now checks every product with a threshold
straight away.
On pre-order
Customers pay in full at checkout and Shopify holds each order as
Scheduled until the ship date. Pre-orders stop on the end date, or on the ship date when
there isn't one, or once the cap is sold. Sold counts online pre-orders only, less
cancellations. Give a new one a start to open it later instead of now.
Loading…
Scheduled to start
Not on the store yet: no pre-order option, Continue selling or Pre-Order tag
until the start; the product page only says when it opens. Each opens within five
minutes of its time, as whoever scheduled it. With Wulf Pack early access it opens that many hours sooner to customers tagged
The Wulf Pack only (checkout refuses everyone else), who are emailed through Klaviyo;
everyone can order from the start.
Ended
The last 50 pre-orders that ended, and how many each sold.
Customer emails
The portal sends Klaviyo an event and a Klaviyo flow triggered by that metric
sends the email, so the wording and design live in Klaviyo. Cancelled and test orders send
nothing. No flow yet? Send a test: it creates the metric in Klaviyo so a flow can be built
on it.
Confirmation
Pre-order Placed
Within a few minutes of an order that takes a pre-order, once per order:
the order, each pre-ordered product and its ship date. Not for orders over a day old.
Running behind
Pre-order Delayed
At 10 AM the day after the ship date, each order is checked once: if a
pre-ordered item hasn't shipped or been set out for pickup, the customer is told it's
running behind. Moving the ship date later before then sends nothing until the day
after the new date.
New product from a link
Paste the product's page — the maker's, a distributor's or a shop's. Claude reads
it and drafts the Shopify product: title, a description in our own words, vendor, type, tags,
barcode, price, photos and release date. Nothing is made until you check it and press Create.
Recent drafts
Every draft and what it cost, whether or not it became a product.
Waiting for stock
Shoppers who asked to be told when a sold-out product is back. When it can be
bought on the website again — in stock and, for a product with an in-store threshold,
Hudsonville above it — each of them gets a Klaviyo event and your flow emails them.
Checked within a minute of a stock change, and every hour.
Loading…
Sent in the last 30 days
Back in Stock events sent to Klaviyo, by product.
Back in stock reports
What back-in-stock emails sold, and which products people ask for.
By product
Emails sent in the period, and what the people told went on to buy.
Loading…
By month
By the month the email went out.
Latest orders
Orders counted as coming from a back-in-stock email.
Requests by product
Every Notify me signup made in the period, by product: how many asked, how
many are still waiting, were told, bought or were removed.
Loading…
The Wulf Pack
The membership: who is a member, signups online and at the till, and billing.
Members
Everyone with a live membership, whoever bills it. Open one for its charges and history.
Loading…
Payments failing
Renewals the portal could not charge. Each is tried again on the retry schedule; the member is
emailed, and for a card problem Shopify sends them a link to update it. After the last try the membership ends.
Signups
Every order that sold the membership. One whose membership never showed up a couple of hours
later, or that was sold without the monthly plan, needs a look.
Store credit to check
A month's credit Shopify refused or did not answer clearly. Check the customer's store credit in Shopify, then settle it.
Settings
In Shopify
The membership product, its plans, and the member discount, as Shopify has them.
Wulf Rewards
Points for spending, redeemed as store credit online and at the till.
Customers
Search by name, email or phone. With nothing typed, the biggest balances.
Loading…
Redemptions
Points turned into store credit. One Shopify did not answer clearly holds its points
until someone checks the customer's store credit in Shopify and settles it here.
Settings
Product type rates
A product type earning a multiple of the base rate: 2 is double points, 0 is none.
Applies to orders from when it is saved; orders already counted keep their rate.
My training
Trainings assigned to you. Read the SOP, then pass its quiz to finish it.
Loading…
Library
Every SOP, to look something up when you need it.
Assign training
Choose people and trainings, and when they should be done by. They finish a
training by passing its quiz.
Progress
Everyone you assign to, and how they're getting on.
Loading…
Write & approve
Claude drafts each SOP from the portal’s own documentation, your reference
files, Shopify’s help center and TCGplayer’s guidelines. Nothing reaches staff until
someone here checks it and publishes it.
Loading…
Reference material
Old SOPs, guidelines and notes Claude writes from. Upload a PDF or Word file, or
paste text. A reference with a category is used for that category’s drafts; one without, for
all of them.
Discrepancies
Deliveries that came in short, or over, what the purchase order was still
expecting — at a store or here. Clear each one once it’s sorted out, saying how.
A short clears itself when the rest arrives.
Loading…
Barcode changes
Barcodes staff paired with a product while receiving at the till, because
the box scanned with a barcode nothing on its purchase order had. A product with no barcode
got it straight away; one that already had a different barcode waits here. Approve to write
it to the product in Shopify (the old one stops scanning), or reject it. SortSwift products
are never changed.
Loading…
Product requests
Products customers have asked us to get. Purchasing
answers each one — can get or can’t get — and what
is written in the answer is what the customer will be told.
Store hub
Needs doing
Store sales
What your store has sold, from Shopify. Online orders belong to no store.
Loading…
Receiving
Orders placed for your store. Open one when it arrives, count what came,
and receive it: the stock is added to Shopify straight away.
Loading…
Store staff
Add the people who work at your store and choose what each of them can do.
They sign in with Google, or with a username or email and the password they set from a
sign-in link. Switch someone off when they leave.
Loading…
My account
The username and password you sign in to the store portal with.
Change them whenever you like.
Loading…
Organized play logins
Sign in to the store's EventLink, Play! Pokémon, Bandai TCG+ and
other organized play accounts to run events. The site opens in a new tab and signs in
for you; the password is never shown.
Loading…
Sales channel logins
Sign in to the store's TCGplayer, eBay, Amazon, Whatnot and other selling
accounts. The site opens in a new tab and signs in for you; the password is never shown.
A site that asks for a verification code still needs one from whoever has the account's
phone or email.
Loading…
Events
Everything on every calendar. Choose a day to add an event, or an event to open it.
Loading…
Recurring events
Each series makes its dates 90 days ahead and keeps going. Changing one
changes every date from today on, except dates edited on their own.
Event products
Every upcoming event's products, added up per store, against what the store has
available and what is on order for it. Pair products with an event in its form.
Loading…
Check-in
Scan a player's ticket with the camera or a barcode scanner, or find them in the list.
Players
Choose an event.
Calendars
Each calendar has its own public page and embed. Switch a store's calendar to
"Website calendar" to show these events on wulfgaming.com in place of its Google Calendar.
Rooms
Spaces in a store. Two events can't be booked into one room at once.
Templates
Saved setups to start an event from. Save one from any event's form.
Promo loop
Trailers and promo images, played in this order on every screen
they are set for. Videos play muted, full length; images for the seconds set.
Upload 16:9 — 4K is best, and 1080p screens play a lighter copy.
Screens
Each TV runs its own link. Open it in the display's browser, full
screen. If a link gets out, give the screen a new one — the old one stops working.
What the screens show
The side panel and the ticker. Events come from each store's calendar.
A full-screen slide of the cards whose prices
went up most, built from the price tracker and slotted into the loop. It sits next to
the buylist QR, so a card going up points straight at selling it to you.
–Last fetched
BoardGameGeek
Board games carrying a
bgg.id metafield
get their rating, weight, player counts, mechanics and categories
filled in from BoardGameGeek. Link a game below or set the id in
Shopify; everything else arrives on its own. Runs every five
minutes, and refreshes ratings weekly.Product changes
Every mirrored field that moved, as the catalog sync
saw it. Metafields are not here — they change far more often
and would bury a price change; BoardGameGeek imports has the
bgg.* half.Template changes
Every product the template scripts moved onto a theme
template — singles and graded cards onto
product.single,
board games onto product.boardgame, sealed product onto
product.sealed — newest first. Dry
runs are not here — they changed nothing.Decklist orders
Orders with at least one card added by the decklist
search. Each gets the order tag
decklist, plus one per
game (decklist-pokemon, decklist-mtg,
…), within five minutes of checkout. The cards themselves carry
a hidden _decklist property customers never see.Price changes
Every price that moved on a tracked product type,
per variant. Imported rows came across from the
old tracker’s metafields; everything else was recorded here.
Click a product for its chart, its full history and its recent
sales.
BoardGameGeek imports
Every fetch, including the ones that found nothing
to change. A week with no entries at all means the job is not
running – which looks the same as a quiet week until you look
here.
Store events
Each store’s upcoming events come from its
Google Calendar, linked from the location’s
custom.events_calendar metafield in Shopify
(Settings › Locations). Every calendar below is checked live
against Google. The website caches events for up to ten minutes,
so a fix here can take that long to show there.Backfills
The long imports, and where each has got to. They
walk one page at a time and survive being interrupted; a paused
one is waiting to be picked up, not broken.
Products
Backfill brings in any Shopify product the catalog doesn't have yet,
whatever the product type. Re-fetch photos re-reads every product's picture, for when
artwork was replaced in Shopify.
Background jobs
Scheduled integrations, and what each last did.
–On Card Singles
–Waiting to assign
–Needs a look
Assign singles to the Card Singles profile
New singles are queued automatically by the Shopify webhook.
Backfill is for the ones that existed before that webhook did.
–Assigned, last 24h
–Assigned, last hour
–Last webhook
–Waiting
Recent activity
Queued and assigned variants, newest first.
Anything here that is not a single means the allowlist is wrong.
Profile tag backfill
Adds the profile-complete tag to every customer
whose account carries enough to reach them. Scanning changes nothing —
read the numbers, then apply.
An address record existing is not
enough on its own. Shop Pay and Login with Shop create addresses holding
only country and ZIP.
These arrive with real names and
real shipping addresses but relay emails at connectebay.com that cannot receive
marketing. They pass every check above. Leave both off for the first scan to see
how many there are.
Recent runs
Every scan and every apply, newest first.
–Last customer webhook
–Tagged, last 24h
–Untagged, last 24h
–Waiting to write
Keep the tag correct automatically
Shopify tells us whenever a customer is created or edited.
Each one is judged by the rules on the Backfill tab, and the
profile-complete tag is added or removed to match.
–
Judges that
customer against the rules above and does exactly what a webhook would.
The quickest way to prove this is wired up without editing a real account.
Webhook activity
Every tag this rule has moved, newest first.
–Changes, 24h
–From orders, 24h
–Still pairing
–Last change
All stock changes
Every change to available stock, for every product at
every store, with the order that caused it. Orders are matched from
the orders database: sales, and the restocks of cancellations and
refunds. Anything else — a hand correction, a transfer — shows as
unexplained: Shopify's API has no adjustment history to say who.
Staff access
Each person gets exactly the permissions you tick.
What store managers can give
Store managers — anyone with Manage store staff and see store sales
— can add people to their own stores and give them the store portal permissions ticked
here, but only the ones they have themselves. Store portal permissions work on the store
portal only, and office permissions never work there. Make someone a store manager by ticking
it on their row above, with the store portal permissions they need, and assigning their stores.
Price tracker
Records every price change on the tracked
product types, and keeps the storefront’s price chart
(
custom.price_history) and recent sales
(custom.transaction_history) up to date.Refresh one product
Reads one product from Shopify now, imports its
existing history if that has not happened yet, logs any price that
moved, and rewrites both metafields. The safe way to try the whole
path on a single product before turning the tracker on — a
dry run shows what it would do without writing anything.
Tracked product types
One per line, spelled exactly as Shopify spells the
product type. A type added here is picked up by the next morning
read; a type removed stops being recorded but keeps its history.
Recent runs
Scheduled runs are the morning read,
which records a point for every product. Queue runs
publish what changed; one appears within five minutes of a price
edit or a sale.
Sales channel updates
Why a product was taken off, or put back on, its
marketplace sales channels — with the stock level and threshold
behind each decision. Search by name, or paste a Shopify product
ID.
Sales channel rules
Each rule takes some product types off some sales
channels when store stock reaches that product's in-store
threshold. The threshold itself lives on the product, in the
custom.instore_threshold metafield — a rule
decides which channels, not when.
Rules are matched top to bottom and the first one that covers a product's type wins. A product no rule covers is left alone.
Rules are matched top to bottom and the first one that covers a product's type wins. A product no rule covers is left alone.
Safety settings
Two settings that decide how the rules are applied,
rather than what they say. Both are saved with the rules.
This must match the In store Inventory Utility
channel. That channel hides the add-to-cart button on
the website from the same metafield. If it hides the button at
“at or below” and this gates at “below”,
there is a window where a marketplace still lists the product
and the page it links to cannot be bought from.
If a scheduled or manual run would change more products than
this, it stops and changes nothing — and
the run detail lists what it would have done. This is what
catches a threshold set wrong across the catalog before it
pulls everything off five channels.
A dry run ignores it on purpose, so a preview always shows you the real number. Raise this before a first baseline run if the dry run says more products would change than the limit, then put it back.
A dry run ignores it on purpose, so a preview always shows you the real number. Raise this before a first baseline run if the dry run says more products would change than the limit, then put it back.
Scripts
Automations that change the live Shopify store. A
script that is off is turned on in three steps: preview what it
would change, check one product, then turn it on.
Run history
Every execution, including the dry runs. Click a run
to see what it decided about each product.
–Products gated
–Waiting to be decided
–Gave up retrying
–Gate
Currently gated
Products the gate has taken off its marketplace
channels because store stock reached their threshold. All of them are
still on the Online Store, the till, and the in-store utility channel
— the product page works, the buy button is what the theme
hides.
Integrations
Checked live, every time you open this tab.

Wulf·Tools