Variant/Finish Model (Prestige, Serialized)
| Date | 2026-03-24 |
| Status | Accepted |
| Decision Makers | @benjaminW78 |
Context and Problem Statement
Star Wars: Unlimited has 8 distinct card variants on TCGPlayer: Standard, Standard Foil, Hyperspace, Hyperspace Foil, Showcase, Standard Prestige, Foil Prestige, and Serialized Prestige. We need to map these to our two-dimensional model of variant (art/frame treatment) and finish (physical card treatment).
The tricky part is Prestige. The official SWU article “The Art of Unlimited” describes three tiers of Prestige cards: Standard Prestige (Tier 1), Foil Prestige (Tier 2), and Serialized Prestige (Tier 3). Should Prestige be a variant, a finish, or something else?
Decision Drivers
- Variant should represent what the card looks like (art treatment, frame style)
- Finish should represent how the card is physically produced (foil treatment, serialization)
- The model should be intuitive for users browsing and filtering inventory
- TCGPlayer treats each combo as a separate product, so we need unique IDs for each
- Serialized cards are individually numbered — a physical characteristic, not an art variant
Considered Options
- Prestige as variant, Serialized as finish: Variants = Standard, Hyperspace, Showcase, Prestige. Finishes = Normal, Foil, Serialized.
- Prestige tiers as separate variants: Variants = Standard, Hyperspace, Showcase, Prestige, Prestige Foil, Prestige Serialized. Finishes = Normal, Foil.
- Flat 8-value enum: A single “variant” enum with all 8 TCGPlayer variants, no separate finish dimension.
Decision Outcome
Chosen option: Prestige as variant, Serialized as finish, because it cleanly separates the art/frame treatment (Prestige) from the physical production method (Normal, Foil, Serialized).
The mapping from SWU API variantType to our model:
SWU API variantType | Our Variant | Our Finish |
|---|---|---|
| Standard | Standard | Normal |
| Standard Foil | Standard | Foil |
| Hyperspace | Hyperspace | Normal |
| Hyperspace Foil | Hyperspace | Foil |
| Showcase | Showcase | Foil |
| Standard Prestige | Prestige | Normal |
| Foil Prestige | Prestige | Foil |
| Serialized Prestige | Prestige | Serialized |
enum StarWarsUnlimitedVariant {
STANDARD = "Standard",
HYPERSPACE = "Hyperspace",
SHOWCASE = "Showcase",
PRESTIGE = "Prestige",
}
enum StarWarsUnlimitedFinish {
NORMAL = "Standard",
FOIL = "Foil",
SERIALIZED = "Serialized",
}Variant/Finish Mapping Diagram
Impacted Files
| File | Key Symbols | Role |
|---|---|---|
packages/backend/domains/game-importer/src/lib/importers/star-wars-unlimited/star-wars-unlimited.types.ts | StarWarsUnlimitedVariant, StarWarsUnlimitedFinish | Enum definitions for Variant and Finish |
packages/backend/domains/game-importer/src/lib/importers/star-wars-unlimited/star-wars-unlimited.game.ts | Game config | variants and finishes arrays used in game registration |
packages/backend/domains/game-importer/src/lib/importers/star-wars-unlimited/star-wars-unlimited-importer.ts | variantTypeToFinish, variantTypeToVariant | Static maps that perform the variantType-to-model conversion |
packages/i18n/src/locales/en.json | Translation keys | Display labels for variant and finish values |
packages/i18n/src/locales/fr.json | Translation keys | French translations for variant and finish values |
Consequences
Positive
- Clean two-dimensional model: variant describes art, finish describes physical treatment
- Prestige is clearly an art/frame variant — all Prestige cards share the same premium art style regardless of finish
- Serialized is a physical characteristic (individually numbered) which fits naturally as a finish
- Users can filter by variant (show me all Prestige cards) or by finish (show me all Foil cards) independently
- The model scales if new finishes or variants are added in the future
Negative
- Serialized as a finish is debatable — FFG officially calls it “Tier 3 Prestige” rather than a separate finish category
- Adds a third finish value (
Serialized) that only applies to one variant (Prestige), creating a sparse matrix - Showcase always has
Foilfinish — the variant/finish separation doesn’t fully apply there, but it’s still correct (Showcase cards are physically foiled)