CardCore
Back to Blog

Building CardCore - April 6, 2026 - Meta Intelligence, 37 Commits, and the VL's Who Made It Happen

April 6, 20265 min readBy Dan Vohasek
building-in-publicstar-wars-unlimitedmetadeck-builderperformanceteam

37 commits. One day. This is what obsession looks like.

Today was one of those days where you sit down at the keyboard and don't look up until it's dark outside. From 1 AM load testing to 10:30 PM meta page polish - 37 commits spanning performance engineering, a brand new meta intelligence system, deck builder upgrades, and a pricing overhaul. I'm going to try to walk through all of it, but honestly, even I'm tired just looking at the git log.

Before I get into the work - I want to give a special shout out to Justin, Denys, and Ryan. These are my VL's - the crew I couldn't do this without. The feedback, the testing, the ideas that turn into features - this platform isn't a solo act anymore, and today's output is proof that having the right people pushing you makes everything better. You three are the reason CardCore keeps leveling up.

Load testing: can we handle a convention?

The day started at 1 AM (yes, really) with a question that's been nagging me: what happens when 100 people hit CardCore at the same time during a tournament?

We built a full synthetic test framework using k6 - load tests that simulate real user behavior across card search, collection browsing, repack opening, and checkout flows. The first run was humbling. Connection pools were too small, cache TTLs too short, and the sync throttle was fighting itself under pressure.

By 9 AM we'd shipped five performance commits: connection pool resizing, a 15-second card search cache, extended cache TTLs across the board, and k6 test fixes to properly simulate multi-game traffic. CardCore now handles 100 concurrent users without breaking a sweat. That's convention-ready.

The /meta page: tournament intelligence for everyone

This was the big one. We shipped a complete meta analysis page at store.cardcore.gg/meta - and it went from "API client" to "fully polished feature" in a single session.

Phase 1 was building the SWUStats API client (COREAPP-950). SWUStats is one of the best community data sources for Star Wars Unlimited tournament results, and we now pull archetype data, tier rankings, and card performance metrics directly from their API.

Phase 2 was the meta page itself (COREAPP-951). This thing has everything: archetype tier lists with win rates, matchup analysis showing how every archetype performs against every other archetype, leader and base card images for visual recognition, tournament deck detail panels you can click into, and dual attribution to both SWUMetaStats and SWUStats for the data.

We fixed bugs in real time as users reported them - rotation filtering issues, matchup name resolution, a crash in the show-all view, and collection dashboard double-counting for Sets 1-3 shared product IDs. By the afternoon, the page was stable and looking sharp.

Meta intelligence in the deck builder

But a meta page that lives on its own tab isn't enough. We wanted meta data to show up where you actually need it - inside the deck builder.

COREAPP-952 brought the meta intelligence panel directly into deck construction. When you're picking a leader and base, CardCore now shows you the current meta context - what's winning, what's popular, and how your archetype stacks up. We added benchmark badges inline in search results so you can see tournament performance while browsing cards.

The benchmark system compares your deck against real tournament builds: how many staple cards you're running, what you're missing, and a confidence label based on sample size. We expanded benchmark depth 5x to cover more archetypes and added filter chips so you can drill into the data without leaving the builder.

COREAPP-953 brought cost and legality integration - every meta deck now shows pricing, cost-to-complete estimates, and Premier format labels. If you want to build the top Sabine aggro list, you can see exactly what it costs and what cards you still need.

Pricing and inventory fixes

A subtle but important fix landed today: floor price must not apply when no market data exists (COREAPP-953). Previously, our pricing safety floor was kicking in even on cards that genuinely had no market price - presales, promos, and newly released cards were getting incorrect pricing. Fixed.

We also shipped an unpriced inventory report (COREAPP-954) that shows store owners which cards in their inventory have no market price, along with pricing suggestions from sibling variants. This is the kind of operational tooling that turns a platform into a business.

Visual polish and UX fixes

The back half of the evening was all about getting the details right. Card images on the meta page got leader and base card art. Detail panel headers now match the horizontal crop style of deck card thumbnails. Tournament results got deduplicated. Price sorting now properly flattens tier groupings into a single cheapest-first list.

We added a "How This Page Works" explainer section to /meta so new visitors understand what they're looking at. And tournament links are now clickable, taking you directly to the melee.gg event page with player counts displayed.

Small things. But small things are what separate a project from a product.

PostHog analytics upgrade

We also enhanced our analytics layer today (COREAPP-949). PostHog now tracks search queries, web vitals, and detailed page-level metrics. This means we can see exactly which searches return no results, which pages are slow on mobile, and where users drop off. Data-driven decisions instead of guesswork.

What's next

The meta page is live and getting positive feedback already. Next up is the deck browse overhaul - we have a batch of tickets (COREAPP-899 through COREAPP-904) that will add price totals, collection percentages, archetype tags, and search to the deck browsing experience. The deck builder is becoming a real competitive tool, not just a list manager.

Convention season is here, and CardCore is ready for it. Load tested, meta-equipped, and built by a team that ships 37 commits on a Sunday.

Justin, Denys, Ryan - this one's for you. Let's keep building.