Wulf Gaming

Wulf Tools

Sign in with your Wulf Gaming Google account to continue.

or
Sign in with Google
Wulf·Tools

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

Reorder by distributor

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

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.

New launch

Nothing is saved or written to Shopify until you say so.
Picks the emails: a drop sends its own Klaviyo events, so it gets the drop templates.
The launch event's pickup window, e.g. the launch weekend. Allocations can only be collected at the till on these days, and anything not collected by the end of the last day is lost. Leave the last day empty for a one-day event. It can be moved later, even after the emails go out.
Every product in the launch, from the catalog. Each has its own quantity and limit, and they share one ranked list: with 24 boxes and 60 playmats, the top 24 get a box and the top 60 a playmat.
Points for each tag a customer carries. Highest total goes first; the tiebreak settles equal totals.
Points for buying products with these tags — event entries, league fees, store play. Counting per week rewards playing consistently: ten entries bought at once count once, one a week for ten weeks counts ten.
Leave the window empty and set “at least” to 0 to ignore orders entirely.

Result

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…

New purchase order

What the order is listed by here and on the store portal's Receiving, where stores look for it.

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.

Pre-order revenue

What customers paid for pre-ordered products, after discounts and refunds and before tax and shipping, by the day the order was placed. Cancelled orders are left out.
to
Latest pre-orders in this range

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.

Check the draft

Preview

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 events

What's on at your stores. Open a calendar in Google Calendar to add or change events; the website picks them up within ten minutes.
Loading…

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.
Download extension
Loading…

Recent sign-ins

Who used which login, newest first. “Not completed” means the extension never collected the login — usually it is not installed on that computer.

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.
Download extension
Loading…

Recent sign-ins

Who used which login, newest first. “Not completed” means the extension never collected the login — usually it is not installed on that computer.

Events

Everything on every calendar. Choose a day to add an event, or an event to open it.
Loading…

Ticket sales to assign

An event's ticket product was sold without saying which event it was for — rung up by hand at the till, or bought from its product page. Choose the event and its seats are made (and the buyer emailed), or dismiss a sale that wasn't a ticket.

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.

Product

Open in Shopify

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.

Needs a look

These stopped retrying. Fix the cause, then put them back.
–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.

Scan results

Nothing has been written yet.
–Customers scanned
–Meet the criteria
–Already tagged
–Will be tagged
Applying writes to Shopify. There is no bulk undo — removing the tag afterwards means another full pass.

Why the rest did not qualify

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.

Needs a look

These writes stopped retrying. Fix the cause, then put them back.

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.

Product

Open in Shopify

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.

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.

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.

Run

–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.