CardCore
Back to Blog

Building CardCore - March 26, 2026 - Trilogy Overhaul, Five Bugs Crushed, and Convention Gear Is Coming

March 26, 20268 min readBy Dan Vohasek
building-in-publicstar-wars-unlimiteddeck-builderbug-fixesuxconventiontrilogy

What shipped today

Today was one of those marathon sessions where you start with a bug report and end up rebuilding an entire feature. 7 files changed, 650+ lines of code added across two major commits. The deck builder got its biggest upgrade since launch.

Trilogy format - completely redesigned

The headline item: the Trilogy deck builder got a full UX overhaul (COREAPP-690). A user named Doctor submitted a detailed bug report explaining that Trilogy was basically broken from a usability standpoint. And honestly? They were right.

For context, Trilogy is a format where you build three linked decks simultaneously. Each deck has its own leader and base, but all three decks share a combined 3-copy limit for every card. If you run 2 copies of a card in Deck 1, you can only run 1 copy across Decks 2 and 3 combined.

The old experience? You'd create a Trilogy group, get dropped into Deck 1's editor, build your 50 cards, hit save, and then... nothing. You'd land back on the deck list staring at three disconnected deck cards with zero guidance on what to do next. No indication you were building a linked group. No way to see what cards were shared across decks. No navigation between siblings. Just vibes and confusion.

Here's what shipped:

  • Group view page - new /decks/group/[groupId] page with a rules banner, three deck panels side-by-side, and a cross-deck card usage table that shows exactly which cards are shared and how many copies are allocated where. Cards at 3/3 get highlighted in amber.
  • Deck nav bar - when editing any Trilogy deck, a tab bar at the top shows all three decks with their card counts. One click to switch between them. You always know where you are.
  • Cross-deck usage badges - searching for cards now shows "2/3 across decks" badges in real-time. If a card is maxed out across all three decks, it's grayed out and unclickable. No more adding cards and getting a validation error after the fact.
  • Guided creation flow - creating a new Trilogy group now takes you to the group overview first, not straight into Deck 1. The rules are front and center before you start building.

The backend for all of this already existed - deck groups, sibling card fetching, cross-deck validation. The infrastructure was solid. It was the UX that was completely missing. Today fixed that.

Card preview sheet

Bug #59 - players couldn't preview a card before adding it to their deck. You'd see a tiny thumbnail and a name, and that was it. If you weren't sure about a card, tough luck.

Now you can tap any card image or name in the search results and a bottom sheet slides up with the full card image (landscape for leaders and bases, portrait for everything else), all the attributes, pricing info, and dedicated "Add to Deck" and "Add to Sideboard" buttons. It's the kind of thing that should have been there from day one.

Sideboard button

Bug #61 - there was no way to add a card directly to the sideboard. You had to add it to the main deck first, then manually move it. Now there's an "SB" button right next to the add button in search results for Premier and Eternal formats. One tap, card goes to sideboard. Simple.

Set codes on deck cards

Bug #62 - deck cards didn't show the set code or card number. If you're cross-referencing your physical collection, you need to know that your Boba Fett is specifically 251/257 from Twilight of the Republic. Now every card in the deck list shows its set code and set name in subtle secondary text.

Rotation filter fix

Bug #54 - Premier format wasn't defaulting the rotation filter on, which meant out-of-rotation cards could sneak into decks without any warning. Fixed with a simple auto-enable when Premier is selected.

Leader/base orientation fix

Bug #55 - leader and base card images in the Collection Cards tab were getting cropped into portrait frames. They're landscape cards. They should display in landscape. Now they do.

Meta deck placement badge

The SWU Meta Stats section on the decks page had placement numbers (#1, #2, #3) overlaid on top of the card images, blocking them. Moved the badge to sit next to the deck name instead.

What broke (or almost did)

Bug #51 was a fun one - a user reported that "Drop In" from Twilight of the Republic was completely missing from the database. Sounded serious. I went into the DB, checked the cards table, checked card_attributes - the card was there. ProductId 586714, Event type, Heroism aspect, Common rarity. Search API returned it perfectly.

Turns out the user was searching in the Collection Cards tab, which only shows cards they already own. The card wasn't missing from the database - it just wasn't in their collection. Closed it with an explanation. Not every bug is a bug, but every report deserves investigation.

Behind the scenes

The cross-database enrichment for set codes was an interesting technical challenge. Deck cards live in the customer database (PostgreSQL on the customer hub), but set codes and card numbers live in the cards database (separate PostgreSQL instance for the card catalog). Can't do a cross-DB join.

The solution: after fetching deck cards, fire a second query to the cards DB with all the product IDs, build a lookup map, and merge the results. It's a lightweight batch lookup - SELECT DISTINCT ON (productid) productid, extnumber, groupname FROM cards WHERE productid = ANY($1) - and it adds maybe 5ms to the deck load. Worth it for the UX improvement.

Also fired off Discord notifications to the #bugfixes channel for all five closed bugs. The bug reporting system has a "fixed" status that triggers a Discord embed with the resolution notes and Plane ticket reference. Users who reported the bugs get to see their feedback turned into shipped features the same day. That feedback loop matters.

Convention prep update

Beyond the code, today was also a big day for convention logistics. We ordered our custom table cover with the Card Core logos - the kind that drapes over the front of a 6-foot table and immediately makes your booth look professional instead of "guy with a laptop." First impressions at conventions are everything, and showing up with branded gear signals that this is a real platform, not a hobby project.

And the polos are coming in too. Custom Card Core polos for the team. When you're running a booth at a Star Wars Unlimited tournament, you need to look the part. Players need to be able to spot staff instantly, and there's something about matching polos that says "we've got our act together."

On top of that, we picked up a Square Terminal - a dedicated credit card machine for taking payments at events. No more fumbling with phone card readers or asking people to Venmo. A real terminal sitting on the table next to real inventory. Tap, swipe, done. It's the kind of thing that sounds basic, but having a professional payment setup at a convention booth changes how people perceive you. You're not a guy selling cards out of a binder - you're a store.

Between the branded table cover, the polos, the Square Terminal, and the convention tools we've been building (event analytics, check-in system, promo management, queue tracking), we're going to show up to our first major event looking like we've been doing this for years. The reality is we've been building for months, but the perception gap matters.

What's next

The deck builder is in a genuinely good place now. Trilogy works properly, card preview exists, sideboard flow is smooth, and set codes are visible. The remaining deck builder work is mostly polish - the card preview could show more attributes, the Trilogy group page could support renaming, and there's a feature request for adding entire decks to your collection in one click.

But the bigger priority is convention readiness. Every feature we ship between now and our first event needs to directly serve the booth experience. That means tournament tools, live inventory updates, and making sure the whole platform holds up when 50 players are hitting it simultaneously on convention WiFi.

650 lines of code. 5 bugs closed. 2 Plane tickets shipped. Custom gear ordered. Not a bad Wednesday.