CardCore
Back to Blog

Day One of Being Findable - SEO, QR Codes, and Hiring QA

March 22, 20265 min readBy Dan Vohasek
building-in-publicseofeaturemobile

The problem nobody tells you about

You can build the most feature-complete trading card game platform on the internet. Real-time pricing, deck builder, collection tracking, peer-to-peer trading, tournament brackets, a repack system with pack-opening animations - all of it. And none of it matters if nobody can find you on Google.

That was CardCore's situation this morning. 500+ hours of development. Over 200 API routes. 400 automated tests. A live store with real inventory. And if you searched "CardCore" on Google, we were buried under a Steam game, a payment processor, and a collector's club.

Making Google notice us

Today was about fixing that from the ground up. Here's what shipped:

Structured data - we added three JSON-LD schemas to the marketing site. An Organization schema tells Google who we are. A WebSite schema with SearchAction means Google can eventually show a search box right in the results that queries our card catalog. And a SoftwareApplication schema lists every major feature - deck builder, collection tracker, trading platform, tournament system - so Google understands what category we belong in.

Dynamic sitemap - both cardcore.gg (marketing) and store.cardcore.gg (the app) now have sitemaps that auto-generate from our pages and blog posts. Every card product page, every blog post, every static page - all indexed and prioritized.

Per-page SEO - before today, every page on the store had the same generic title. Now each page has unique titles, descriptions, and OpenGraph metadata. When someone shares a card page on Discord, the preview shows the card image, name, set, and price.

Cross-site linking - the marketing site and store app now reference each other properly. Google treats them as the same entity, which compounds the authority of both domains.

The blog you're reading - this blog is the content engine. Fresh, unique content that nobody else can write because nobody else is building this exact thing. Google rewards consistency, so the plan is at least one post per week going forward.

The favicon situation

A small thing that matters more than you'd think - we had no favicon. Every browser tab showed a generic globe icon. Every Google search result had no brand mark. Today we designed and shipped a gold card-stack icon with "CC" at the bottom. It shows up in browser tabs, search results, bookmarks, and it's the same icon across both sites. We generated it at every size from 32px to 1024px so the marketing team has assets for social media, app stores, and print.

QR code pickup verification

This one came from watching real customers at the store counter. Someone places an online order, shows up to pick it up, and then fumbles through their email looking for the confirmation. The staff has to match names, check order numbers, verify items. It's slow and error-prone.

The QR code claim ticket system fixes this. When your order is ready for pickup, you get a unique QR code. Walk into the store, staff scans it, order is verified instantly. No searching through emails, no name confusion with similar orders. Scan, confirm, done.

Hiring our first QA team

Here's an honest admission - I've been building CardCore almost exclusively on desktop. The mobile experience has been an afterthought, and for a platform where most users are on their phones at a game store, that's a problem.

We have 400+ automated tests including mobile viewport checks, but automated tests don't catch "this button is technically tappable but my thumb can't hit it" or "this flow takes seven taps when it should take three."

So I hired a professional QA team through Fiverr. Their job is simple - test every player-facing flow on iPhones and Android devices. Sign in with Discord, browse cards, build a deck, set up trades, place orders. Every flow a real player would use at a real game store. For anything broken or awkward, they write it up with steps to reproduce, device info, and screenshots.

Our first event is April 12th. The QA team has until then to find everything that needs fixing. It's tight, but having external eyes on the mobile experience is worth more than another month of me testing on desktop and hoping for the best.

Getting cards into the system

Behind the scenes, the card data pipeline has been a massive ongoing effort. Star Wars Unlimited now has seven sets - Spark of Rebellion (SOR), Shadows of the Galaxy (SHD), Twilight of the Republic (TWI), Jump to Lightspeed (JTL), Legends of the Forces (LOF), Secrets of Power (SEC), and the newest one just released, A Lawless Time (LAW). Each set has hundreds of cards across multiple variants - Standard, Hyperspace, Foil, Showcase. Every card needs images, pricing data, attributes, subtypes, and set metadata.

The pipeline pulls from TCGPlayer's market data daily, syncs pricing across the entire catalog, and handles edge cases like presale cards without established market prices and "squeeze" conditions where the low price exceeds the market price. Getting this right matters because every other feature - collections, trading, deck building, store inventory - depends on accurate card data.

What's next

The immediate priority is the Google Search Console setup. The sitemaps are built, the structured data is in place, but we need to formally submit everything and verify ownership through Cloudflare DNS. After that, it's a waiting game for Google to start crawling.

On the product side - mobile bug fixes from the QA team will start rolling in within days. We'll also be shipping more blog posts about how specific features work under the hood. The deck builder architecture, the tournament Swiss pairing algorithm, how the repack system prevents duplicate pulls - there's a lot to write about.

If you're building something in the TCG space, or you're a store owner curious about what a modern platform looks like, check out store.cardcore.gg. And if you want to follow along as we build - you're already here.