Building CardCore - April 12, 2026 - The Lab Goes Live (Soft Launch Day)
It's gameday.
I'm writing this at 2 AM. In a few hours, nearly 70 players are walking into TCF Gaming Arena for a Premier Quest - and every single one of them will be touching CardCore. Scanning QR codes. Browsing cards. Trading. Checking prices. Using the system we've been building, live, under pressure, at scale.
This is the soft launch. Not a polished press release with a countdown timer. A real event with real players who will find every rough edge we missed. And I've spent the last two days making sure there are as few rough edges as possible.
28 commits. Two nights finishing after 2 AM. Here's what shipped.
Theory Board is dead - long live The Lab
The biggest visible change: we renamed Theory Board to The Lab (COREAPP-1133) and promoted it from a buried sub-feature to a first-class citizen in the nav. This isn't cosmetic. The name "Theory Board" confused people. "What do I theorize about?" The Lab says what it is - a place to experiment with decks, tier lists, and card evaluation.
But the rename was just the surface. Underneath, we shipped sideboard zones - full backend migration, API, and real-time broadcast support. You can now drag cards between your main board and sideboard, and collaborators see it instantly through the Yjs sync layer. Cross-zone drag merges correctly instead of duplicating cards, which was a fun bug where dragging a card from main to sideboard would leave a ghost copy behind. Fixed.
The export got a complete overhaul too. Streaming-ready export images now include QR codes linking back to the board and stats overlays. The sponsor logo went from a subtle footnote to a dominant 240x240 element - because the sponsors paying for visibility should actually be visible. That logo now appears in the export sidebar, the export footer, and at a size where you can actually read it on a Twitch stream.
The nav makes sense now
We merged Decks and The Lab into a single nav entry because having two separate destinations for "deck stuff" was confusing. Added a mobile top bar with a home link (COREAPP-1135) because somehow we'd shipped a mobile experience where the only way home was the browser back button. Added an "Open in Lab" button directly in the deck editor toolbar (COREAPP-1136) so the path from "I built a deck" to "let me analyze it" is one click.
The Set Checklist printer got re-exposed in the Tools menu after it vanished during a nav reorganization. Small fix, but collectors notice when their print button disappears.
Pull list - the feature that saves 30 minutes a day
The pull list got four commits of polish that sound boring and will change how staff operates at events like today's.
Qty moved inline before card name so when you're scanning the list, the most important number is the first thing you see - not buried after the card name. SWU aspect dots and base-card slot numbers now display on variants so staff can distinguish between the Hyperspace Sabine and the regular Sabine without squinting. Trade-in flags show "In Intake" and "Just Traded" badges so the person pulling cards knows if a card is already being processed through another workflow. And a collapsible Recently Completed section shows the last 24 hours of completed pulls, so if a customer asks "did my order ship?" the answer is right there.
These are the kind of changes nobody writes blog posts about. But when you're standing behind a counter with 70 people in the store and someone asks for their order, the difference between "let me check three screens" and "yes, pulled 20 minutes ago" is everything.
Trade-in tooling for the booth
Today's event will have walk-in players wanting to trade cards. Three commits make that smoother.
The in-store trade-in banner on the traders page now tells walk-in players exactly what to do - no staff explanation needed. The staff trade-in review got search, date range filters, and game filters so reviewing a pile of trade-in submissions doesn't mean scrolling through an unfiltered list. And the card display now splits collector number from card name with an emphasized Qty column, because when you're processing 50 trade-ins during a tournament, readability isn't optional.
Deck editor gets smarter
Two targeted improvements to the deck builder. The aspect filter now has Any/All match mode (COREAPP-1137) - previously, filtering by two aspects meant "cards that have BOTH aspects." Now you can toggle to "cards that have EITHER aspect." Sounds simple. Try building a Cunning/Villainy deck with the old behavior and you'll understand why people asked for this.
The card picker variant key got fixed so selected counts report per subtype correctly. Before this fix, adding a Hyperspace variant and a regular variant of the same card would show "2 selected" on both variants instead of "1" on each. Subtle, but it made quantity tracking unreliable during deck building.
Inventory audit trail
One commit that matters more than it looks: inventory audit rows now get written when confirmOrderByStore deducts stock (COREAPP-1139). Previously, when staff confirmed an order and inventory decreased, there was no audit trail. The count went down, but there was no record of why. Now every stock deduction from order confirmation writes to the inventoryaudit table with the order ID, the user who confirmed it, and the quantity change.
At a busy event with multiple staff members confirming orders simultaneously, "where did that card go?" needs an answer. Now it has one.
Deploy pipeline that catches its own mistakes
The last two commits of the sprint are infrastructure, and they're the ones I'm most relieved to have before today.
Clean .next/ before every prod build (COREAPP-1141) prevents stale manifest crashes. Next.js caches aggressively, and when the build output changes between deploys, leftover chunks from the previous build can cause 500 errors on pages that reference assets that no longer exist. We hit this twice. Now the deploy script nukes the cache before building. Problem eliminated.
Post-deploy smoke test (COREAPP-1142) is a PowerShell script that hits critical pages after every deploy and fails loudly on 500s. If the home page, the card browser, or the API health check returns a server error, the deploy pipeline screams instead of silently serving broken pages to 70 players at a PQ.
These aren't glamorous. They're the difference between "the site crashed during the event and nobody noticed for 20 minutes" and "the deploy told us something was wrong before a single player saw it."
By the numbers
- 28 commits across April 10-12
- 2 nights past 2 AM
- The Lab - renamed, promoted, sideboard zones, streaming export
- 4 pull list improvements for event-day operations
- 3 trade-in tools for walk-in booth flow
- 2 deck editor fixes (aspect filter, variant counting)
- 1 inventory audit trail for stock accountability
- 1 deploy pipeline that tests itself
- 0 hours of sleep that feel adequate
What happens today
In a few hours I'll be at TCF Gaming Arena running the booth. Nearly 70 players. A Premier Quest. Real transactions, real trades, real tournament check-ins, real pressure on every system we've built.
This is what the last three weeks of 2 AM sessions have been building toward. Not a demo. Not a beta. A room full of players using CardCore because it's the best tool available to them.
If something breaks, I'll fix it live. That's the building-in-public promise - you don't get to hide behind "we'll patch it next sprint." The players are here. The system is live. Let's go.
28 commits. Two sleepless nights. One soft launch. Nearly 70 players about to stress-test everything we've built. Today we find out if it holds.