{{ toastMessage }}

OPBinder.com

{{ (currentUser.display_name || currentUser.username || currentUser.email || 'U')[0] }}
{{ currentUser.display_name || currentUser.username || currentUser.email }}
{{ (viewingProfile.display_name || viewingProfile.username || 'C')[0] }}

{{ viewingProfile.display_name || viewingProfile.username }}

Public View

@{{ viewingProfile.username }}

{{ totalCards.toLocaleString() }} cards
Format & Rotation Blocks
Or Select Specific Blocks:
Filter by Set
Card Ownership & Playset
Card Color
Card Type
Storage Box Filter
Sort Cards By
Active: Standard Block {{ b }} {{ s === 'P' ? 'Promo' : s }} {{ col }} {{ t }} {{ currentOwnershipLabel }} Box: {{ selectedStorageLocation }} Sort: {{ currentSortLabel }}

Loading cards from inventory database...

No cards match your current filters

Page {{ currentPage }} of {{ totalPages }}
✓
{{ card.block_number }}
{{ card.card_set_id || card.card_id }}
{{ card.rarity === 'P' ? 'Promo' : (card.rarity || 'C') }}

{{ card.card_name }}

{{ card.card_type }}
${{ card.market_price.toFixed(2) }}
Total Owned: {{ card.owned_count || 0 }}
Page {{ currentPage }} of {{ totalPages }}
{{ selectedBatchCards.size }} selected
Move to:

Saved Decks Gallery {{ savedDecks.length }} Saved

Browse your decks or create a new one. Mark decks as Built or Not Built to track cards.

No Saved Decks Yet

Build a custom deck from your inventory or paste a decklist from OPTCG Sim!

No Leader

{{ d.name || 'Untitled Deck' }}

{{ d.leader_name || (d.leader && d.leader.card_name) || (d.leader_id ? d.leader_id : 'No Leader') }} ({{ d.leader_color || (d.leader && d.leader.card_color) }})

Shares cards with {{ getCompetingDeckNames(d) }}

{{ d.total_cards }}/51 cards No Leader 100% Owned
{{ currentDeck.name || 'Untitled Deck' }}
Total Cards: {{ totalDeckCardCount }} / 51 (1 Leader + 50 Main) {{ currentDeck.leader.card_name }} ({{ currentDeck.leader.card_color }}) No Leader Selected Leader Missing (Deck Incomplete) Need {{ deckStats.total_missing }} more {{ deckStats.total_missing === 1 ? 'copy' : 'copies' }} 100% Owned! Ready to play! {{ totalDeckCardCount }}/51 Cards Deck Value: ${{ deckMarketValue.toFixed(2) }}
Physical Card Conflict ({{ currentDeckConflicts.length }} card{{ currentDeckConflicts.length > 1 ? 's' : '' }} already in other Built decks)

You only own enough copies to have one deck physically assembled. Swap cards when playing or make this deck primary.

{{ copyNotification }}

Deck Cards (Leader + Main Deck)

Ready Partial In Other Deck Missing
{{ currentDeck.leader.block_number || '1' }}
LEADER
IN OTHER DECK Owned: {{ currentDeck.leader.owned_count }} 0 Owned (Missing)

{{ currentDeck.leader.card_name || currentDeck.leader.card_id || 'Deck Leader' }}

{{ currentDeck.leader.card_set_id || currentDeck.leader.set_id || currentDeck.leader.card_id }} ${{ currentDeck.leader.market_price.toFixed(2) }} {{ currentDeck.leader.card_color }}
In {{ currentDeck.leader.competing_decks[0].deck_name }}
+ Select Leader Click to choose your Deck Leader
{{ card.block_number }}
{{ card.card_cost !== null ? 'Cost ' + card.card_cost : card.card_type }}
IN OTHER DECK ({{ card.other_built_qty }}) {{ card.needed }} / {{ card.owned_count }} {{ card.available_in_storage }}/{{ card.needed }} (Need {{ card.missing_copies }}) 0 in storage (Own {{ card.owned_count }}) 0 / {{ card.needed }} (Missing)

{{ card.card_name }}

{{ card.card_set_id || card.card_id }} ${{ card.market_price.toFixed(2) }} {{ card.card_type }}
In {{ card.competing_decks[0].deck_name }} ({{ card.competing_decks[0].quantity }})
You own {{ card.owned_count }} • Avail: {{ card.available_in_storage }}
Needed:
{{ card.needed }}

This deck is currently empty

Click "Add / Browse Cards" to select cards from your inventory or paste a decklist from clipboard.

Missing Copies
{{ deckStats.total_missing }} Needed
{{ currentDeck.leader.card_name }} {{ currentDeck.leader.card_id || currentDeck.leader.set_id }} • Leader ({{ (currentDeck.leader.owned_count || 0) === 0 ? 'Not Owned' : 'In Another Built Deck' }})
Need 1
No Leader Selected Deck requires 1 Leader Card to be complete
Need Leader
{{ c.card_name }} {{ c.card_id || c.card_set_id }} • Own {{ c.owned_count || 0 }}/{{ c.needed }}
Need {{ c.missing_copies }}

Complete Deck!

All 51 cards (Leader + 50 Main) in this decklist are in your collection.

Deck In Progress ({{ totalDeckCardCount }}/51)

You own all selected cards so far. Add cards until you reach 1 Leader and 50 Main cards.

Cost Curve Distribution

{{ cnt }}
{{ cst }}

Storage & Inventory Center

Organize physical card storage boxes, track cards allocated to active decks, and identify deck shortages.

{{ storageDeckStatus === 'unbuilt' ? 'Total in Unbuilt Decks' : (storageDeckStatus === 'built' ? 'Total in Built Decks' : 'Total in All Decks') }} {{ rentedCards.reduce((sum, c) => sum + (c.total_allocated || 0), 0) }} {{ storageDeckStatus === 'unbuilt' ? 'Physical copies planned in unbuilt decks' : (storageDeckStatus === 'built' ? 'Physical copies in built decks' : 'Copies across all saved decks') }}
{{ storageDeckStatus === 'unbuilt' ? 'Distinct Unbuilt Cards' : (storageDeckStatus === 'built' ? 'Active Deck Cards' : 'Distinct Deck Cards') }} {{ rentedCards.length }} {{ storageDeckStatus === 'unbuilt' ? 'Distinct card titles in unbuilt decks' : (storageDeckStatus === 'built' ? 'Distinct card titles in active decks' : 'Distinct titles across all decks') }}
{{ storageDeckStatus === 'unbuilt' ? 'Unbuilt Decks (To Build)' : (storageDeckStatus === 'built' ? 'Active Built Decks' : 'Total Saved Decks') }} {{ storageDeckStatus === 'unbuilt' ? savedDecks.filter(d => !d.is_active).length : (storageDeckStatus === 'built' ? savedDecks.filter(d => Boolean(d.is_active)).length : savedDecks.length) }} {{ storageDeckStatus === 'unbuilt' ? 'Decks you want to build' : (storageDeckStatus === 'built' ? 'Decks currently assembled' : 'Built and unbuilt decks') }}
{{ storageDeckStatus === 'unbuilt' ? 'Cards Needed to Build' : 'Deck Conflicts' }} {{ conflicts.length }} {{ storageDeckStatus === 'unbuilt' ? (conflicts.length > 0 ? conflicts.length + ' unowned card shortages' : 'All cards already owned!') : (conflicts.length > 0 ? 'Shortages across decks' : 'Zero card shortages') }}
{{ storageDeckStatus === 'unbuilt' ? `Deck Building Shortage: You need ${conflicts.length} more card title(s) to finish building your unbuilt decks!` : `Inventory Shortage Alert: You have ${conflicts.length} card(s) where ${storageDeckStatus === 'built' ? 'built decks' : 'your decks'} need more physical copies than you own!` }}

Scanning physical deck allocations and storage...

{{ c.card_name }}

{{ c.card_id }} • {{ c.set_id === 'P' ? 'Promo' : c.set_id }} • {{ c.card_color }}

{{ storageDeckStatus === 'unbuilt' ? 'In Unbuilt:' : 'In Decks:' }} {{ c.total_allocated }}x
In Storage: {{ c.in_storage }}x
Shortage: Need {{ c.shortage }} more {{ storageDeckStatus === 'unbuilt' ? 'to build' : 'copies' }} Buy →
{{ storageDeckStatus === 'unbuilt' ? 'Needed for Unbuilt Decks:' : 'Currently in Decks:' }}
{{ d.deck_name }}: {{ d.quantity }}x {{ d.is_leader ? '(Leader)' : '' }} {{ d.is_active ? '(Built)' : '(To Build)' }}

{{ storageDeckStatus === 'unbuilt' ? 'No Cards in Unbuilt Decks' : (storageDeckStatus === 'built' ? 'No Cards Currently in Built Decks' : 'No Cards Found in Decks') }}

{{ storageDeckStatus === 'unbuilt' ? 'You do not have any unbuilt decks saved, or no cards match your search. Create or save a deck you want to build in Deck Builder to inspect needed cards here.' : 'You currently have no built decks allocating physical cards, or no cards match your search. Mark any deck as "Built" in the Deck Builder to allocate your physical cards here.' }}

Selection:
{{ selectedMassBuyCount }} cards ({{ selectedMassBuyTotalCopies }} copies) selected

Calculating missing copies across all saved decks...

{{ c.card_name }}

{{ c.card_id }} • {{ c.set_id === 'P' ? 'Promo' : c.set_id }} • {{ c.card_color }}

Owned: {{ c.owned_count }}x
Missing: {{ c.missing_count }}x
Buy Qty:
{{ getMassBuyQty(c.card_id, c.missing_count) }}
Decks: {{ d.deck_name }} ({{ d.quantity }}x) {{ d.is_active ? '(Built)' : '(To Build)' }}
TCGPlayer →

{{ storageDeckStatus === 'unbuilt' ? 'No Missing Cards for Unbuilt Decks!' : 'No Deck Shortages!' }}

{{ storageDeckStatus === 'unbuilt' ? 'You already own all physical copies required for your unbuilt decks! You have everything ready to assemble them.' : 'You own all physical copies required for your current decks. Want to explore cards you don\'t own to build new decks?' }}

Filter Set:
Selection:
{{ selectedMassBuyCount }} cards ({{ selectedMassBuyTotalCopies }} copies) selected

Loading unowned cards catalog...

{{ c.card_name }}

{{ c.card_id }} • {{ c.set_id === 'P' ? 'Promo' : c.set_id }} • {{ c.card_color }}

Status: 0 Owned
Buy Copies:
{{ getMassBuyQty(c.card_id, 1) }}
{{ c.card_type }} • Cost {{ c.card_cost !== null ? c.card_cost : '-' }} TCGPlayer →

No Unowned Cards Found

No unowned cards match your current search and set filters. Try clearing your filters or searching another set.

Page {{ unownedPage }} of {{ unownedTotalPages }} ({{ unownedTotal }} Unowned Cards)
Total Copies Owned {{ stats.total_owned }} Across all printings
{{ progressMode === 'master_playset' ? 'Playsets Completed' : 'Unique Cards Owned' }} {{ progressMode === 'master_playset' ? (stats.playset_completed_cards || 0) : stats.unique_owned }} {{ progressMode === 'master_playset' ? ('Out of ' + (stats.total_unique_db || stats.unique_cards_owned || 0) + ' cards (4x, 1x Leaders)') : ('Out of ' + stats.total_unique_db + ' in database') }}
In Storage Boxes {{ stats.in_storage }} Unallocated copies
In Built Decks {{ stats.in_decks }} In {{ stats.active_decks_count }} active decks

Collection Progress by Set

{{ progressMode === 'master_playset' ? 'Tracking 4x copies of each card (1x for leaders). Click any set to view owned cards!' : 'Tracking 1x unique copy of each card. Click any set to view owned cards!' }}

{{ s.set_id === 'P' ? 'Promo' : s.set_id }}
{{ progressMode === 'master_playset' ? 'Needs Playset →' : 'View Cards →' }}

Backup & Restore Collection

Export your personal inventory and decks as a JSON file, or restore from a backup.