Store detail updates

This commit is contained in:
Greg Kilmer
2026-08-06 12:42:27 -04:00
parent f4a49fe9bc
commit 40b2cc8c5d
2 changed files with 51 additions and 21 deletions
+10 -4
View File
@@ -1,10 +1,16 @@
{ {
"ordersOpen": false, "ordersOpen": false,
"lastUpdated": "2026-08-04", "lastUpdated": "2026-08-06",
"turnaround": "Estimated turnaround: ~2 weeks once a list is confirmed.", "turnaround": "Estimated turnaround: ~2 weeks once a list is confirmed.",
"maxNote": "I take a limited number of orders at a time so each one gets full attention. Slots reopen as current orders finish.", "maxNote": "I take a limited number of orders at a time so each one gets full attention. Slots reopen as current orders finish.",
"slots": { "slots": {
"cards": { "open": 0, "total": 5 }, "cards": {
"deckBoxes": { "open": 0, "total": 4 } "open": 0,
"total": 3
},
"deckBoxes": {
"open": 0,
"total": 3
}
} }
} }
+41 -17
View File
@@ -42,6 +42,21 @@ export interface PriceTier {
note?: string; note?: string;
} }
/**
* A selectable filament/print color for a printed product. Rendered as a
* swatch on the product page and offered in the order form. Flip `inStock` to
* false when a color runs out — it shows as "Out of stock" and is removed from
* the order-form color list.
*/
export interface ColorOption {
/** Display name, e.g. "Midnight Black". */
name: string;
/** Hex swatch color shown in the grid + form, e.g. "#1b1730". */
hex: string;
/** Whether the color is currently available to order. */
inStock: boolean;
}
export interface Product { export interface Product {
/** mdi icon used as the decorative mark. */ /** mdi icon used as the decorative mark. */
icon: string; icon: string;
@@ -64,6 +79,13 @@ export interface Product {
specs: SpecRow[]; specs: SpecRow[];
/** Pricing tiers rendered as a pricing table. */ /** Pricing tiers rendered as a pricing table. */
pricing: PriceTier[]; pricing: PriceTier[];
/**
* Optional selectable print colors (filament). Rendered as a swatch grid on
* the product page and offered in the order form. Add/remove entries here to
* manage available colors; toggle `inStock` per color. Omit for products that
* have no color choice (e.g. proxy cards).
*/
colors?: ColorOption[];
} }
/** /**
@@ -74,7 +96,7 @@ export const cardProduct: Product = {
icon: 'cards-playing', icon: 'cards-playing',
title: 'Proxy MTG Cards', title: 'Proxy MTG Cards',
summary: summary:
'High-quality printed proxy cards for casual play, sized to match real Magic cards and clearly marked as proxies.', 'High-quality printed proxy cards for casual play, sized to match real Magic cards and clearly marked as proxies intended for use sleeved.',
slotKey: 'cards', slotKey: 'cards',
images: [ images: [
{ {
@@ -95,23 +117,25 @@ export const cardProduct: Product = {
], ],
specs: [ specs: [
{ label: 'Size', value: '63 x 88 mm (standard MTG card size)' }, { label: 'Size', value: '63 x 88 mm (standard MTG card size)' },
{ label: 'Thickness', value: '[Greg to fill] (e.g. 300 gsm / 350 gsm cardstock)' }, { label: 'Thickness', value: '0.31mm laminated photo cardstock' },
{ label: 'Back', value: 'Solid white back (clearly not tournament-legal)' }, { label: 'Back', value: 'Solid white back (clearly not tournament-legal)' },
{ {
label: 'Finishes', label: 'Finishes',
value: '[Greg to fill] (e.g. matte, linen, glossy)', value: 'Default matte finish, available in glossy on request',
}, },
{ {
label: 'Double-sided cards', label: 'Double-sided cards',
value: 'Printed as two separate cards and count as 2 card slots', value: 'Printed as two separate cards and count as 2 card slots',
}, },
{ label: 'Art', value: 'Official card art only. No custom or offensive art (see Requirements)' }, { label: 'Art', value: 'Official card art only. No offensive art (custom cards usable if fully provided see Requirements)' },
], ],
pricing: [ pricing: [
{ band: '1-9 cards', price: '[Greg to fill]', note: 'per card' }, { band: 'Individual cards', price: '$1.00', note: 'per card' },
{ band: '10-39 cards', price: '[Greg to fill]', note: 'per card' }, { band: 'Individual foil cards', price: '$2.00', note: 'per card' },
{ band: '40-99 cards', price: '[Greg to fill]', note: 'per card' }, { band: '36 card set', price: '$20.00', note: 'per set of cards' },
{ band: '100+ cards', price: '[Greg to fill]', note: 'per card' }, { band: '60 card deck', price: '$30.00', note: 'per set of cards' },
{ band: '100 card deck', price: '$40.00', note: 'per set of cards' },
{ band: 'Deck Disclosure Card', price: '$2.00', note: 'per card' },
], ],
}; };
@@ -142,16 +166,16 @@ export const deckBoxProduct: Product = {
}, },
], ],
specs: [ specs: [
{ label: 'Capacity', value: '[Greg to fill] (e.g. 100 double-sleeved cards)' }, { label: 'Capacity', value: '100 double-sleeved card bay / 82mm depth and tray 67 mm x 76 mm x 24 mm (width x depth x height)' },
{ label: 'Material', value: '[Greg to fill] (e.g. PLA / PETG)' }, { label: 'Material', value: 'PLA with 2x4 magnets and top-loader protection pane' },
{ label: 'Finish', value: '[Greg to fill] (e.g. as-printed, sanded, painted)' }, { label: 'Finish', value: 'as-printed' },
{ label: 'Sizing', value: '[Greg to fill] (deck box + matching counters)' }, { label: 'Sizing', value: '86 mm x 109 mm x 143 mm (width x depth x height)' },
{ label: 'Customization', value: 'Color selection from available filament' }, { label: 'Customization', value: 'Color selection from available filament' },
], ],
pricing: [ pricing: [
{ band: 'Single deck box', price: '[Greg to fill]', note: 'per print' }, { band: 'Single deck box', price: '$30.00', note: 'per print' },
{ band: 'Deck box + counter set', price: '[Greg to fill]', note: 'per set' }, { band: 'Deck box + counter set', price: 'Coming Soon', note: 'per set' },
{ band: 'Counter / token only', price: '[Greg to fill]', note: 'per print' }, { band: 'Counter / token only', price: 'Coming Soon', note: 'per print' },
], ],
}; };
@@ -205,8 +229,8 @@ export const requirements: Requirement[] = [
}, },
{ {
icon: 'alert', icon: 'alert',
title: 'No custom or offensive art', title: 'No offensive art',
body: 'I will not print custom art or any cards I find to be offensive. Only official card art is used.', body: 'I will not print custom art or any cards I find to be offensive. Only official card art is used unless card art fully provided by the customer.',
}, },
{ {
icon: 'information', icon: 'information',