@mohasinac/appkit 2.3.1 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/dist/client.d.ts +12 -8
  2. package/dist/client.js +7 -4
  3. package/dist/constants/api-endpoints.d.ts +4 -0
  4. package/dist/constants/api-endpoints.js +2 -0
  5. package/dist/core/contact-submissions.repository.d.ts +32 -0
  6. package/dist/core/contact-submissions.repository.js +49 -0
  7. package/dist/core/index.d.ts +2 -0
  8. package/dist/core/index.js +1 -0
  9. package/dist/features/about/components/HowPayoutsWorkView.js +1 -1
  10. package/dist/features/account/components/AddressFilters.d.ts +5 -0
  11. package/dist/features/account/components/AddressFilters.js +20 -0
  12. package/dist/features/account/components/AddressesIndexListing.d.ts +6 -0
  13. package/dist/features/account/components/AddressesIndexListing.js +51 -0
  14. package/dist/features/account/components/UserSidebar.d.ts +7 -3
  15. package/dist/features/account/components/UserSidebar.js +55 -7
  16. package/dist/features/account/hooks/useAddresses.d.ts +7 -0
  17. package/dist/features/account/hooks/useAddresses.js +12 -1
  18. package/dist/features/admin/actions/admin-read-actions.d.ts +12 -0
  19. package/dist/features/admin/actions/admin-read-actions.js +18 -0
  20. package/dist/features/admin/components/AdminBlogView.js +26 -2
  21. package/dist/features/admin/components/AdminCarouselView.js +18 -2
  22. package/dist/features/admin/components/AdminCategoriesView.js +27 -2
  23. package/dist/features/admin/components/AdminContactView.d.ts +4 -0
  24. package/dist/features/admin/components/AdminContactView.js +50 -0
  25. package/dist/features/admin/components/AdminFaqsView.js +19 -2
  26. package/dist/features/admin/components/AdminListingScaffold.d.ts +11 -2
  27. package/dist/features/admin/components/AdminListingScaffold.js +14 -3
  28. package/dist/features/admin/components/AdminNewsletterView.d.ts +4 -0
  29. package/dist/features/admin/components/AdminNewsletterView.js +50 -0
  30. package/dist/features/admin/components/AdminProductsView.js +30 -2
  31. package/dist/features/admin/components/AdminReviewsView.js +26 -2
  32. package/dist/features/admin/components/AdminStoresView.js +17 -2
  33. package/dist/features/admin/components/AdminUsersView.js +27 -2
  34. package/dist/features/admin/components/DataTable.d.ts +2 -1
  35. package/dist/features/admin/components/DataTable.js +18 -4
  36. package/dist/features/admin/components/index.d.ts +6 -0
  37. package/dist/features/admin/components/index.js +3 -0
  38. package/dist/features/admin/hooks/useAdminListingData.d.ts +3 -1
  39. package/dist/features/admin/hooks/useAdminListingData.js +12 -7
  40. package/dist/features/admin/server.d.ts +3 -0
  41. package/dist/features/admin/server.js +2 -0
  42. package/dist/features/auctions/components/AuctionDetailPageView.js +93 -47
  43. package/dist/features/auctions/components/AuctionFilters.d.ts +8 -0
  44. package/dist/features/auctions/components/AuctionFilters.js +12 -0
  45. package/dist/features/auctions/components/AuctionsListView.d.ts +6 -1
  46. package/dist/features/auctions/components/AuctionsListView.js +37 -5
  47. package/dist/features/auctions/schemas/index.d.ts +4 -4
  48. package/dist/features/blog/components/BlogFeaturedCard.d.ts +1 -7
  49. package/dist/features/blog/components/BlogFeaturedCard.js +4 -5
  50. package/dist/features/blog/components/BlogFilters.js +2 -1
  51. package/dist/features/blog/components/BlogIndexListing.js +14 -9
  52. package/dist/features/blog/components/BlogIndexPageView.d.ts +6 -1
  53. package/dist/features/blog/components/BlogIndexPageView.js +10 -2
  54. package/dist/features/blog/components/BlogListView.d.ts +2 -1
  55. package/dist/features/blog/components/BlogListView.js +10 -3
  56. package/dist/features/categories/components/CategoriesIndexListing.d.ts +1 -1
  57. package/dist/features/categories/components/CategoriesIndexListing.js +41 -38
  58. package/dist/features/categories/components/CategoriesIndexPageView.d.ts +6 -1
  59. package/dist/features/categories/components/CategoriesIndexPageView.js +41 -2
  60. package/dist/features/categories/components/CategoryDetailPageView.js +13 -6
  61. package/dist/features/categories/components/CategoryDetailTabs.d.ts +5 -0
  62. package/dist/features/categories/components/CategoryDetailTabs.js +17 -0
  63. package/dist/features/categories/components/CategoryFilters.js +2 -1
  64. package/dist/features/categories/components/CategoryGrid.d.ts +2 -1
  65. package/dist/features/categories/components/CategoryGrid.js +8 -6
  66. package/dist/features/categories/components/CategoryProductsListing.js +22 -11
  67. package/dist/features/categories/components/index.d.ts +2 -0
  68. package/dist/features/categories/components/index.js +1 -0
  69. package/dist/features/categories/hooks/useCategories.d.ts +20 -0
  70. package/dist/features/categories/hooks/useCategories.js +50 -1
  71. package/dist/features/categories/hooks/useCategoryTree.d.ts +17 -0
  72. package/dist/features/categories/hooks/useCategoryTree.js +65 -0
  73. package/dist/features/events/components/AdminEventEditorView.d.ts +6 -0
  74. package/dist/features/events/components/AdminEventEditorView.js +203 -0
  75. package/dist/features/events/components/AdminEventsView.js +28 -2
  76. package/dist/features/events/components/EventCard.js +4 -2
  77. package/dist/features/events/components/EventFilters.js +2 -1
  78. package/dist/features/events/components/EventsIndexListing.js +40 -10
  79. package/dist/features/events/components/EventsListPageView.d.ts +6 -1
  80. package/dist/features/events/components/EventsListPageView.js +40 -7
  81. package/dist/features/events/components/index.d.ts +2 -0
  82. package/dist/features/events/components/index.js +1 -0
  83. package/dist/features/events/hooks/useEvents.js +2 -0
  84. package/dist/features/events/types/index.d.ts +1 -0
  85. package/dist/features/homepage/components/BlogArticlesSection.js +1 -1
  86. package/dist/features/homepage/components/EventsSection.js +1 -1
  87. package/dist/features/homepage/components/FeaturedAuctionsSection.js +1 -1
  88. package/dist/features/homepage/components/FeaturedPreOrdersSection.js +1 -1
  89. package/dist/features/homepage/components/FeaturedProductsSection.js +1 -1
  90. package/dist/features/homepage/components/FeaturedStoresSection.js +1 -1
  91. package/dist/features/homepage/components/HeroCarousel.js +1 -1
  92. package/dist/features/homepage/components/MarketplaceHomepageView.js +27 -17
  93. package/dist/features/homepage/components/SectionCarousel.js +4 -4
  94. package/dist/features/homepage/components/ShopByCategorySection.js +2 -2
  95. package/dist/features/homepage/schemas/firestore.d.ts +1 -1
  96. package/dist/features/homepage/schemas/firestore.js +2 -1
  97. package/dist/features/layout/AppLayoutShell.d.ts +6 -2
  98. package/dist/features/layout/AppLayoutShell.js +7 -3
  99. package/dist/features/pre-orders/components/MarketplacePreorderCard.d.ts +3 -1
  100. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +6 -2
  101. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +80 -12
  102. package/dist/features/pre-orders/components/PreOrderFilters.d.ts +8 -0
  103. package/dist/features/pre-orders/components/PreOrderFilters.js +21 -0
  104. package/dist/features/pre-orders/components/PreOrdersIndexListing.d.ts +2 -1
  105. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +69 -10
  106. package/dist/features/pre-orders/components/PreOrdersListView.d.ts +6 -1
  107. package/dist/features/pre-orders/components/PreOrdersListView.js +26 -7
  108. package/dist/features/pre-orders/components/index.d.ts +2 -0
  109. package/dist/features/pre-orders/components/index.js +1 -0
  110. package/dist/features/products/components/AuctionsIndexListing.d.ts +2 -1
  111. package/dist/features/products/components/AuctionsIndexListing.js +61 -9
  112. package/dist/features/products/components/InteractiveProductCard.d.ts +2 -4
  113. package/dist/features/products/components/InteractiveProductCard.js +2 -2
  114. package/dist/features/products/components/ProductDetailPageView.d.ts +1 -1
  115. package/dist/features/products/components/ProductDetailPageView.js +116 -25
  116. package/dist/features/products/components/ProductFilters.d.ts +6 -11
  117. package/dist/features/products/components/ProductFilters.js +5 -3
  118. package/dist/features/products/components/ProductGrid.d.ts +8 -2
  119. package/dist/features/products/components/ProductGrid.js +20 -5
  120. package/dist/features/products/components/ProductTabsShell.d.ts +3 -11
  121. package/dist/features/products/components/ProductTabsShell.js +14 -14
  122. package/dist/features/products/components/ProductsIndexListing.js +73 -9
  123. package/dist/features/products/components/ProductsIndexPageView.d.ts +6 -1
  124. package/dist/features/products/components/ProductsIndexPageView.js +39 -6
  125. package/dist/features/products/components/RelatedProductsCarousel.d.ts +7 -0
  126. package/dist/features/products/components/RelatedProductsCarousel.js +11 -0
  127. package/dist/features/products/components/index.d.ts +1 -0
  128. package/dist/features/products/components/index.js +1 -0
  129. package/dist/features/products/hooks/useProducts.js +16 -0
  130. package/dist/features/products/repository/products.repository.d.ts +8 -0
  131. package/dist/features/products/repository/products.repository.js +2 -0
  132. package/dist/features/products/schemas/index.d.ts +8 -8
  133. package/dist/features/products/types/index.d.ts +12 -0
  134. package/dist/features/promotions/components/CouponsIndexListing.d.ts +9 -0
  135. package/dist/features/promotions/components/CouponsIndexListing.js +86 -0
  136. package/dist/features/promotions/components/PromotionsView.d.ts +11 -5
  137. package/dist/features/promotions/components/PromotionsView.js +6 -1
  138. package/dist/features/promotions/components/index.d.ts +4 -2
  139. package/dist/features/promotions/components/index.js +2 -1
  140. package/dist/features/reviews/components/ReviewDetailPageView.d.ts +4 -0
  141. package/dist/features/reviews/components/ReviewDetailPageView.js +20 -0
  142. package/dist/features/reviews/components/ReviewDetailShell.d.ts +7 -0
  143. package/dist/features/reviews/components/ReviewDetailShell.js +80 -0
  144. package/dist/features/reviews/components/ReviewFilters.d.ts +3 -3
  145. package/dist/features/reviews/components/ReviewFilters.js +5 -4
  146. package/dist/features/reviews/components/ReviewsIndexListing.d.ts +4 -3
  147. package/dist/features/reviews/components/ReviewsIndexListing.js +35 -51
  148. package/dist/features/reviews/components/ReviewsIndexPageView.d.ts +6 -1
  149. package/dist/features/reviews/components/ReviewsIndexPageView.js +49 -3
  150. package/dist/features/reviews/components/ReviewsList.js +9 -1
  151. package/dist/features/reviews/components/index.d.ts +1 -0
  152. package/dist/features/reviews/hooks/useReviews.js +15 -1
  153. package/dist/features/reviews/types/index.d.ts +6 -1
  154. package/dist/features/seller/components/SellerSidebar.d.ts +8 -4
  155. package/dist/features/seller/components/SellerSidebar.js +6 -4
  156. package/dist/features/seller/components/index.d.ts +30 -0
  157. package/dist/features/seller/components/index.js +17 -0
  158. package/dist/features/seller/hooks/useSellerStore.d.ts +2 -0
  159. package/dist/features/seller/hooks/useSellerStore.js +2 -0
  160. package/dist/features/seller/permission-map.d.ts +4 -2
  161. package/dist/features/seller/permission-map.js +16 -14
  162. package/dist/features/seller/schemas/index.d.ts +2 -2
  163. package/dist/features/stores/api/[storeSlug]/reviews/route.d.ts +1 -1
  164. package/dist/features/stores/api/[storeSlug]/reviews/route.js +24 -19
  165. package/dist/features/stores/components/InteractiveStoreCard.d.ts +0 -5
  166. package/dist/features/stores/components/InteractiveStoreCard.js +9 -9
  167. package/dist/features/stores/components/StoreAuctionsListing.js +27 -9
  168. package/dist/features/stores/components/StoreDetailLayoutView.js +2 -0
  169. package/dist/features/stores/components/StoreFilters.d.ts +5 -0
  170. package/dist/features/stores/components/StoreFilters.js +20 -0
  171. package/dist/features/stores/components/StoreHeader.js +2 -2
  172. package/dist/features/stores/components/StorePreOrdersListing.d.ts +5 -0
  173. package/dist/features/stores/components/StorePreOrdersListing.js +40 -0
  174. package/dist/features/stores/components/StorePreOrdersPageView.d.ts +4 -0
  175. package/dist/features/stores/components/StorePreOrdersPageView.js +21 -0
  176. package/dist/features/stores/components/StoreProductsListing.js +21 -11
  177. package/dist/features/stores/components/StoreReviewsListing.js +2 -7
  178. package/dist/features/stores/components/StoresIndexListing.js +42 -8
  179. package/dist/features/stores/components/StoresIndexPageView.d.ts +6 -1
  180. package/dist/features/stores/components/StoresIndexPageView.js +9 -2
  181. package/dist/features/stores/components/index.d.ts +3 -0
  182. package/dist/features/stores/components/index.js +1 -0
  183. package/dist/features/stores/hooks/useStores.d.ts +7 -1
  184. package/dist/features/stores/hooks/useStores.js +16 -3
  185. package/dist/features/stores/schemas/index.d.ts +2 -2
  186. package/dist/features/stores/types/index.d.ts +3 -0
  187. package/dist/features/wishlist/hooks/useGuestWishlist.d.ts +20 -0
  188. package/dist/features/wishlist/hooks/useGuestWishlist.js +49 -0
  189. package/dist/features/wishlist/hooks/useWishlistCount.d.ts +7 -0
  190. package/dist/features/wishlist/hooks/useWishlistCount.js +31 -0
  191. package/dist/features/wishlist/hooks/useWishlistWithGuest.d.ts +56 -0
  192. package/dist/features/wishlist/hooks/useWishlistWithGuest.js +57 -0
  193. package/dist/features/wishlist/index.d.ts +3 -0
  194. package/dist/features/wishlist/index.js +3 -0
  195. package/dist/features/wishlist/utils/guest-wishlist.d.ts +22 -0
  196. package/dist/features/wishlist/utils/guest-wishlist.js +70 -0
  197. package/dist/index.d.ts +50 -1
  198. package/dist/index.js +63 -1
  199. package/dist/next/routing/route-map.d.ts +70 -36
  200. package/dist/next/routing/route-map.js +30 -22
  201. package/dist/seed/addresses-seed-data.js +62 -261
  202. package/dist/seed/beyblade-seed-data.d.ts +7 -0
  203. package/dist/seed/beyblade-seed-data.js +947 -0
  204. package/dist/seed/bids-seed-data.d.ts +10 -2
  205. package/dist/seed/bids-seed-data.js +220 -1071
  206. package/dist/seed/blog-posts-seed-data.d.ts +2 -2
  207. package/dist/seed/blog-posts-seed-data.js +455 -117
  208. package/dist/seed/cart-seed-data.d.ts +9 -9
  209. package/dist/seed/cart-seed-data.js +73 -74
  210. package/dist/seed/coupons-seed-data.d.ts +3 -4
  211. package/dist/seed/coupons-seed-data.js +3 -509
  212. package/dist/seed/events-seed-data.d.ts +2 -2
  213. package/dist/seed/events-seed-data.js +315 -476
  214. package/dist/seed/faq-seed-data.d.ts +18 -41
  215. package/dist/seed/faq-seed-data.js +1059 -1172
  216. package/dist/seed/hot-wheels-seed-data.d.ts +7 -0
  217. package/dist/seed/hot-wheels-seed-data.js +1365 -0
  218. package/dist/seed/index.d.ts +6 -1
  219. package/dist/seed/index.js +6 -1
  220. package/dist/seed/pokemon-carousel-slides-seed-data.d.ts +4 -2
  221. package/dist/seed/pokemon-carousel-slides-seed-data.js +152 -268
  222. package/dist/seed/pokemon-categories-seed-data.d.ts +18 -21
  223. package/dist/seed/pokemon-categories-seed-data.js +424 -1004
  224. package/dist/seed/pokemon-coupons-seed-data.d.ts +6 -0
  225. package/dist/seed/pokemon-coupons-seed-data.js +465 -0
  226. package/dist/seed/pokemon-homepage-sections-seed-data.d.ts +3 -2
  227. package/dist/seed/pokemon-homepage-sections-seed-data.js +67 -289
  228. package/dist/seed/pokemon-products-seed-data.js +662 -0
  229. package/dist/seed/pokemon-seed-bundle.d.ts +32 -11
  230. package/dist/seed/pokemon-seed-bundle.js +41 -11
  231. package/dist/seed/pokemon-stores-seed-data.d.ts +2 -3
  232. package/dist/seed/pokemon-stores-seed-data.js +56 -31
  233. package/dist/seed/pokemon-users-seed-data.d.ts +2 -2
  234. package/dist/seed/pokemon-users-seed-data.js +245 -261
  235. package/dist/seed/reviews-seed-data.d.ts +17 -2
  236. package/dist/seed/reviews-seed-data.js +519 -483
  237. package/dist/seed/site-settings-seed-data.js +14 -14
  238. package/dist/seed/store-addresses-seed-data.js +68 -50
  239. package/dist/seed/transformers-seed-data.d.ts +7 -0
  240. package/dist/seed/transformers-seed-data.js +510 -0
  241. package/dist/seed/wishlists-seed-data.d.ts +5 -1
  242. package/dist/seed/wishlists-seed-data.js +82 -4
  243. package/dist/server.d.ts +1 -0
  244. package/dist/server.js +2 -0
  245. package/dist/tokens/index.d.ts +6 -0
  246. package/dist/tokens/index.js +2 -0
  247. package/dist/ui/components/BaseListingCard.js +24 -26
  248. package/dist/ui/components/BaseListingCard.style.css +5 -5
  249. package/dist/ui/components/HorizontalScroller.d.ts +1 -1
  250. package/dist/ui/components/HorizontalScroller.js +19 -5
  251. package/dist/ui/components/SideDrawer.style.css +3 -11
  252. package/dist/ui/rich-text/RichText.js +19 -1
  253. package/package.json +1 -1
@@ -1,38 +1,50 @@
1
1
  /**
2
- * Pokemon Base Set 151 — Categories Seed Data
2
+ * Multi-Franchise Collectibles — Categories Seed Data (35 categories)
3
+ *
4
+ * Franchises: Pokémon TCG · Hot Wheels · Beyblade Burst · Transformers
3
5
  *
4
6
  * Hierarchy:
5
- * Pokémon Cards (root)
6
- * ├- Card Type (tier 1)
7
- * │ ├- Pokémon Cards (leaf)
8
- * │ ├- Trainer Cards (leaf)
9
- * │ └- Energy Cards (leaf)
10
- * ├- Element Type (tier 1)
11
- * │ ├- Water (leaf)
12
- * │ ├- Electric (leaf)
13
- * │ ├- Fire (leaf)
14
- * │ ├- Grass (leaf)
15
- * │ ├- Psychic (leaf)
16
- * │ ├- Fighting (leaf)
17
- * │ └- Colorless (leaf)
18
- * ├- Rarity (tier 1)
19
- * │ ├- Holographic Rare (leaf)
20
- * │ ├- Non-Holo Rare (leaf)
21
- * │ ├- Uncommon (leaf)
22
- * │ └- Common (leaf)
23
- * Sealed Products (root, leaf)
24
- * Accessories (root, leaf)
7
+ * Pokémon Cards (root) — tier 0
8
+ * Card Type tier 1
9
+ * Pokémon / Trainer / Energy — tier 2 leaf
10
+ * Element Type — tier 1
11
+ * Water / Electric / Fire / Grass / Psychic / Fighting / Colorless — leaf
12
+ * Rarity — tier 1
13
+ * Holo Rare / Non-Holo / Uncommon / Common — leaf
14
+ * Hot Wheels (root) — tier 0
15
+ * Basic Cars / Premium / Treasure Hunt / Track Sets — tier 1 leaf
16
+ * Beyblade Burst (root) — tier 0
17
+ * Attack / Defense / Stamina / Balance / Stadium — tier 1 leaf
18
+ * Transformers (root) — tier 0
19
+ * Autobots / Decepticons / Combiners — tier 1 leaf
20
+ * Sealed Products (root leaf)
21
+ * Accessories (root leaf)
25
22
  */
26
23
  const NOW = new Date();
27
24
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
28
25
  const ADMIN = "user-admin-user-admin";
26
+ function mkCat(partial) {
27
+ return {
28
+ isActive: true,
29
+ isSearchable: true,
30
+ isFeatured: false,
31
+ isBrand: false,
32
+ showOnHomepage: false,
33
+ createdBy: ADMIN,
34
+ createdAt: daysAgo(30),
35
+ updatedAt: daysAgo(1),
36
+ ...partial,
37
+ };
38
+ }
29
39
  export const pokemonCategoriesSeedData = [
30
- // -- ROOT: Pokémon Cards -----------------------------------------------------
31
- {
40
+ // ═══════════════════════════════════════════════════
41
+ // POKÉMON TCG
42
+ // ═══════════════════════════════════════════════════
43
+ mkCat({
32
44
  id: "category-pokemon-cards",
33
45
  name: "Pokémon Cards",
34
46
  slug: "pokemon-cards",
35
- description: "Original Pokémon Base Set 151 cards — singles, lots, and graded copies",
47
+ description: "Original Pokémon Base Set 151 cards — singles, lots, graded, and sealed",
36
48
  rootId: "category-pokemon-cards",
37
49
  parentIds: [],
38
50
  childrenIds: [
@@ -44,1084 +56,492 @@ export const pokemonCategoriesSeedData = [
44
56
  path: "pokemon-cards",
45
57
  order: 1,
46
58
  isLeaf: false,
47
- metrics: {
48
- productCount: 0,
49
- productIds: [],
50
- auctionCount: 0,
51
- auctionIds: [],
52
- totalProductCount: 60,
53
- totalAuctionCount: 5,
54
- totalItemCount: 65,
55
- lastUpdated: daysAgo(1),
56
- },
57
59
  isFeatured: true,
58
60
  featuredPriority: 1,
59
- isBrand: false,
61
+ showOnHomepage: true,
62
+ metrics: {
63
+ productCount: 0, productIds: [], auctionCount: 0, auctionIds: [],
64
+ totalProductCount: 80, totalAuctionCount: 6, totalItemCount: 86, lastUpdated: daysAgo(1),
65
+ },
60
66
  seo: {
61
67
  title: "Pokémon Cards — Base Set 151 | LetItRip",
62
68
  description: "Buy and sell original Pokémon Base Set 151 singles, holos, and sealed packs.",
63
69
  keywords: ["pokemon cards", "base set", "151", "charizard", "pikachu"],
64
70
  },
65
- display: {
66
- showInFooter: true,
67
- icon: "🃏",
68
- coverImage: "https://images.pokemontcg.io/base1/logo.png",
69
- color: "#FFCB05",
70
- showInMenu: true,
71
- },
72
- showOnHomepage: true,
73
- isActive: true,
74
- isSearchable: true,
71
+ display: { showInFooter: true, icon: "🃏", coverImage: "https://images.pokemontcg.io/base1/logo.png", color: "#FFCB05", showInMenu: true },
75
72
  ancestors: [],
76
- createdBy: ADMIN,
77
- createdAt: daysAgo(30),
78
- updatedAt: daysAgo(1),
79
- },
80
- // -- TIER 1: Card Type -------------------------------------------------------
81
- {
73
+ }),
74
+ mkCat({
82
75
  id: "category-card-type-pokemon-cards",
83
76
  name: "Card Type",
84
77
  slug: "card-type",
85
- description: "Filter by Pokémon, Trainer, or Energy",
78
+ description: "Filter by Pokémon, Trainer, or Energy card",
86
79
  rootId: "category-pokemon-cards",
87
80
  parentIds: ["category-pokemon-cards"],
88
- childrenIds: [
89
- "category-pokemon-type-card-type",
90
- "category-trainer-type-card-type",
91
- "category-energy-type-card-type",
92
- ],
93
- tier: 1,
94
- path: "pokemon-cards/card-type",
95
- order: 1,
96
- isLeaf: false,
97
- metrics: {
98
- productCount: 0,
99
- productIds: [],
100
- auctionCount: 0,
101
- auctionIds: [],
102
- totalProductCount: 40,
103
- totalAuctionCount: 3,
104
- totalItemCount: 43,
105
- lastUpdated: daysAgo(1),
106
- },
107
- isFeatured: false,
108
- isBrand: false,
109
- seo: {
110
- title: "Card Type — Pokémon Base Set 151",
111
- description: "Shop by Pokémon, Trainer, or Energy card type.",
112
- keywords: ["pokemon card type", "trainer card", "energy card"],
113
- },
81
+ childrenIds: ["category-pokemon-type-card-type", "category-trainer-type-card-type", "category-energy-type-card-type"],
82
+ tier: 1, path: "pokemon-cards/card-type", order: 1, isLeaf: false,
83
+ metrics: { productCount: 0, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 45, totalAuctionCount: 4, totalItemCount: 49, lastUpdated: daysAgo(1) },
84
+ seo: { title: "Card Type — Pokémon TCG", description: "Shop by card type.", keywords: ["pokemon card type"] },
114
85
  display: { showInFooter: false, icon: "🎴", showInMenu: true },
115
- showOnHomepage: false,
116
- isActive: true,
117
- isSearchable: true,
118
- ancestors: [
119
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
120
- ],
121
- createdBy: ADMIN,
122
- createdAt: daysAgo(30),
123
- updatedAt: daysAgo(1),
124
- },
125
- // -- LEAF: Pokémon-type cards ------------------------------------------------
126
- {
86
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }],
87
+ }),
88
+ mkCat({
127
89
  id: "category-pokemon-type-card-type",
128
90
  name: "Pokémon Cards",
129
91
  slug: "pokemon-type",
130
92
  description: "Individual creature cards — the core of the Base Set",
131
93
  rootId: "category-pokemon-cards",
132
94
  parentIds: ["category-card-type-pokemon-cards"],
133
- childrenIds: [],
134
- tier: 2,
135
- path: "pokemon-cards/card-type/pokemon-type",
136
- order: 1,
137
- isLeaf: true,
138
- metrics: {
139
- productCount: 30,
140
- productIds: [],
141
- auctionCount: 3,
142
- auctionIds: [],
143
- totalProductCount: 30,
144
- totalAuctionCount: 3,
145
- totalItemCount: 33,
146
- lastUpdated: daysAgo(1),
147
- },
148
- isFeatured: true,
149
- featuredPriority: 2,
150
- isBrand: false,
151
- seo: {
152
- title: "Pokémon Cards — Base Set Singles",
153
- description: "Shop all 102 Pokémon Base Set creature singles.",
154
- keywords: [
155
- "pokemon singles",
156
- "base set pokemon",
157
- "charizard",
158
- "blastoise",
159
- ],
160
- },
161
- display: {
162
- showInFooter: false,
163
- icon: "⚡",
164
- coverImage: "https://images.pokemontcg.io/base1/4_hires.png",
165
- showInMenu: true,
166
- },
167
- showOnHomepage: true,
168
- isActive: true,
169
- isSearchable: true,
170
- ancestors: [
171
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
172
- { id: "category-card-type-pokemon-cards", name: "Card Type", tier: 1 },
173
- ],
174
- createdBy: ADMIN,
175
- createdAt: daysAgo(30),
176
- updatedAt: daysAgo(1),
177
- },
178
- // -- LEAF: Trainer cards -----------------------------------------------------
179
- {
95
+ childrenIds: [], tier: 2, path: "pokemon-cards/card-type/pokemon-type", order: 1, isLeaf: true,
96
+ isFeatured: true, featuredPriority: 2, showOnHomepage: true,
97
+ metrics: { productCount: 35, productIds: [], auctionCount: 4, auctionIds: [], totalProductCount: 35, totalAuctionCount: 4, totalItemCount: 39, lastUpdated: daysAgo(1) },
98
+ seo: { title: "Pokémon Cards — Base Set Singles", description: "Shop all Base Set creature singles.", keywords: ["pokemon singles", "charizard", "blastoise"] },
99
+ display: { showInFooter: false, icon: "⚡", coverImage: "https://images.pokemontcg.io/base1/4_hires.png", showInMenu: true },
100
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-card-type-pokemon-cards", name: "Card Type", tier: 1 }],
101
+ }),
102
+ mkCat({
180
103
  id: "category-trainer-type-card-type",
181
104
  name: "Trainer Cards",
182
105
  slug: "trainer-type",
183
106
  description: "Supporter, Item, and Stadium trainer cards from Base Set",
184
107
  rootId: "category-pokemon-cards",
185
108
  parentIds: ["category-card-type-pokemon-cards"],
186
- childrenIds: [],
187
- tier: 2,
188
- path: "pokemon-cards/card-type/trainer-type",
189
- order: 2,
190
- isLeaf: true,
191
- metrics: {
192
- productCount: 8,
193
- productIds: [],
194
- auctionCount: 0,
195
- auctionIds: [],
196
- totalProductCount: 8,
197
- totalAuctionCount: 0,
198
- totalItemCount: 8,
199
- lastUpdated: daysAgo(1),
200
- },
201
- isFeatured: false,
202
- isBrand: false,
203
- seo: {
204
- title: "Trainer Cards — Base Set",
205
- description: "Professor Oak, Bill, Energy Retrieval and more Base Set trainer cards.",
206
- keywords: ["trainer cards", "professor oak", "bill", "pokemon trainer"],
207
- },
208
- display: {
209
- showInFooter: false,
210
- icon: "🧑‍🏫",
211
- coverImage: "https://images.pokemontcg.io/base1/88_hires.png",
212
- showInMenu: true,
213
- },
214
- showOnHomepage: false,
215
- isActive: true,
216
- isSearchable: true,
217
- ancestors: [
218
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
219
- { id: "category-card-type-pokemon-cards", name: "Card Type", tier: 1 },
220
- ],
221
- createdBy: ADMIN,
222
- createdAt: daysAgo(30),
223
- updatedAt: daysAgo(1),
224
- },
225
- // -- LEAF: Energy cards ------------------------------------------------------
226
- {
109
+ childrenIds: [], tier: 2, path: "pokemon-cards/card-type/trainer-type", order: 2, isLeaf: true,
110
+ metrics: { productCount: 8, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 8, totalAuctionCount: 0, totalItemCount: 8, lastUpdated: daysAgo(1) },
111
+ seo: { title: "Trainer Cards — Pokémon Base Set", description: "Professor Oak, Bill, Energy Removal and more.", keywords: ["trainer cards", "professor oak", "item cards"] },
112
+ display: { showInFooter: false, icon: "🧑‍🏫", showInMenu: true },
113
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-card-type-pokemon-cards", name: "Card Type", tier: 1 }],
114
+ }),
115
+ mkCat({
227
116
  id: "category-energy-type-card-type",
228
117
  name: "Energy Cards",
229
118
  slug: "energy-type",
230
- description: "Basic Energy cards Water, Fire, Electric, Grass, Psychic, Fighting",
119
+ description: "Basic and Special Energy cards to power your Pokémon",
231
120
  rootId: "category-pokemon-cards",
232
121
  parentIds: ["category-card-type-pokemon-cards"],
233
- childrenIds: [],
234
- tier: 2,
235
- path: "pokemon-cards/card-type/energy-type",
236
- order: 3,
237
- isLeaf: true,
238
- metrics: {
239
- productCount: 6,
240
- productIds: [],
241
- auctionCount: 0,
242
- auctionIds: [],
243
- totalProductCount: 6,
244
- totalAuctionCount: 0,
245
- totalItemCount: 6,
246
- lastUpdated: daysAgo(1),
247
- },
248
- isFeatured: false,
249
- isBrand: false,
250
- seo: {
251
- title: "Energy Cards — Base Set",
252
- description: "All basic energy types from the original Pokémon Base Set.",
253
- keywords: [
254
- "energy cards",
255
- "water energy",
256
- "fire energy",
257
- "pokemon energy",
258
- ],
259
- },
260
- display: {
261
- showInFooter: false,
262
- icon: "⚡",
263
- coverImage: "https://images.pokemontcg.io/base1/99_hires.png",
264
- showInMenu: true,
265
- },
266
- showOnHomepage: false,
267
- isActive: true,
268
- isSearchable: true,
269
- ancestors: [
270
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
271
- { id: "category-card-type-pokemon-cards", name: "Card Type", tier: 1 },
272
- ],
273
- createdBy: ADMIN,
274
- createdAt: daysAgo(30),
275
- updatedAt: daysAgo(1),
276
- },
277
- // -- TIER 1: Element Type ----------------------------------------------------
278
- {
122
+ childrenIds: [], tier: 2, path: "pokemon-cards/card-type/energy-type", order: 3, isLeaf: true,
123
+ metrics: { productCount: 5, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 5, totalAuctionCount: 0, totalItemCount: 5, lastUpdated: daysAgo(1) },
124
+ seo: { title: "Energy Cards — Pokémon Base Set", description: "Basic Energy sets from the original print runs.", keywords: ["energy cards", "fire energy", "water energy"] },
125
+ display: { showInFooter: false, icon: "⚪", showInMenu: true },
126
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-card-type-pokemon-cards", name: "Card Type", tier: 1 }],
127
+ }),
128
+ mkCat({
279
129
  id: "category-element-type-pokemon-cards",
280
130
  name: "Element Type",
281
131
  slug: "element-type",
282
- description: "Browse cards by elemental type",
132
+ description: "Shop by Pokémon energy type",
283
133
  rootId: "category-pokemon-cards",
284
134
  parentIds: ["category-pokemon-cards"],
285
- childrenIds: [
286
- "category-water-element-type",
287
- "category-electric-element-type",
288
- "category-fire-element-type",
289
- "category-grass-element-type",
290
- "category-psychic-element-type",
291
- "category-fighting-element-type",
292
- "category-colorless-element-type",
293
- ],
294
- tier: 1,
295
- path: "pokemon-cards/element-type",
296
- order: 2,
297
- isLeaf: false,
298
- metrics: {
299
- productCount: 0,
300
- productIds: [],
301
- auctionCount: 0,
302
- auctionIds: [],
303
- totalProductCount: 35,
304
- totalAuctionCount: 2,
305
- totalItemCount: 37,
306
- lastUpdated: daysAgo(1),
307
- },
308
- isFeatured: false,
309
- isBrand: false,
310
- seo: {
311
- title: "Element Types — Pokémon Base Set",
312
- description: "Water, Electric, Fire, Grass, Psychic, Fighting, Colorless",
313
- keywords: [
314
- "pokemon element",
315
- "type",
316
- "water pokemon",
317
- "electric pokemon",
318
- ],
319
- },
320
- display: { showInFooter: true, icon: "🌊", showInMenu: true },
321
- showOnHomepage: false,
322
- isActive: true,
323
- isSearchable: true,
324
- ancestors: [
325
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
326
- ],
327
- createdBy: ADMIN,
328
- createdAt: daysAgo(30),
329
- updatedAt: daysAgo(1),
330
- },
331
- // -- LEAF: Water -------------------------------------------------------------
332
- {
333
- id: "category-water-element-type",
135
+ childrenIds: ["category-water-element", "category-electric-element", "category-fire-element", "category-grass-element", "category-psychic-element", "category-fighting-element", "category-colorless-element"],
136
+ tier: 1, path: "pokemon-cards/element-type", order: 2, isLeaf: false,
137
+ metrics: { productCount: 0, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 35, totalAuctionCount: 4, totalItemCount: 39, lastUpdated: daysAgo(1) },
138
+ seo: { title: "Element Types — Pokémon TCG", description: "Water, Fire, Electric, Grass, Psychic, Fighting, and Colorless types.", keywords: ["pokemon elements", "fire type", "water type"] },
139
+ display: { showInFooter: false, icon: "🌊", showInMenu: true },
140
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }],
141
+ }),
142
+ mkCat({
143
+ id: "category-water-element",
334
144
  name: "Water",
335
145
  slug: "water",
336
- description: "Water-type Pokémon cards — Squirtle, Blastoise, Lapras, Starmie and more",
146
+ description: "Water-type Pokémon cards — Blastoise, Lapras, Starmie, Gyarados",
337
147
  rootId: "category-pokemon-cards",
338
148
  parentIds: ["category-element-type-pokemon-cards"],
339
- childrenIds: [],
340
- tier: 2,
341
- path: "pokemon-cards/element-type/water",
342
- order: 1,
343
- isLeaf: true,
344
- metrics: {
345
- productCount: 6,
346
- productIds: [],
347
- auctionCount: 0,
348
- auctionIds: [],
349
- totalProductCount: 6,
350
- totalAuctionCount: 0,
351
- totalItemCount: 6,
352
- lastUpdated: daysAgo(1),
353
- },
354
- isFeatured: true,
355
- featuredPriority: 3,
356
- isBrand: false,
357
- seo: {
358
- title: "Water-type Pokémon Cards — Base Set",
359
- description: "Blastoise, Squirtle, Lapras, Starmie and all Base Set Water types.",
360
- keywords: ["water pokemon", "blastoise", "squirtle"],
361
- },
362
- display: {
363
- showInFooter: false,
364
- icon: "💧",
365
- coverImage: "https://images.pokemontcg.io/base1/2_hires.png",
366
- color: "#6DB6D4",
367
- showInMenu: true,
368
- },
369
- showOnHomepage: true,
370
- isActive: true,
371
- isSearchable: true,
372
- ancestors: [
373
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
374
- {
375
- id: "category-element-type-pokemon-cards",
376
- name: "Element Type",
377
- tier: 1,
378
- },
379
- ],
380
- createdBy: ADMIN,
381
- createdAt: daysAgo(30),
382
- updatedAt: daysAgo(1),
383
- },
384
- // -- LEAF: Electric ----------------------------------------------------------
385
- {
386
- id: "category-electric-element-type",
149
+ childrenIds: [], tier: 2, path: "pokemon-cards/element-type/water", order: 1, isLeaf: true,
150
+ metrics: { productCount: 6, productIds: [], auctionCount: 1, auctionIds: [], totalProductCount: 6, totalAuctionCount: 1, totalItemCount: 7, lastUpdated: daysAgo(1) },
151
+ seo: { title: "Water-Type Pokémon Cards", description: "Blastoise, Lapras, Starmie and more.", keywords: ["water pokemon", "blastoise"] },
152
+ display: { showInFooter: false, icon: "💧", color: "#6DB6D4", showInMenu: true },
153
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-element-type-pokemon-cards", name: "Element Type", tier: 1 }],
154
+ }),
155
+ mkCat({
156
+ id: "category-electric-element",
387
157
  name: "Electric",
388
158
  slug: "electric",
389
- description: "Electric-type Pokémon cards — Pikachu, Raichu, Zapdos, Electabuzz and more",
159
+ description: "Electric-type Pokémon cards — Pikachu, Raichu, Zapdos, Electabuzz",
390
160
  rootId: "category-pokemon-cards",
391
161
  parentIds: ["category-element-type-pokemon-cards"],
392
- childrenIds: [],
393
- tier: 2,
394
- path: "pokemon-cards/element-type/electric",
395
- order: 2,
396
- isLeaf: true,
397
- metrics: {
398
- productCount: 5,
399
- productIds: [],
400
- auctionCount: 1,
401
- auctionIds: [],
402
- totalProductCount: 5,
403
- totalAuctionCount: 1,
404
- totalItemCount: 6,
405
- lastUpdated: daysAgo(1),
406
- },
407
- isFeatured: true,
408
- featuredPriority: 4,
409
- isBrand: false,
410
- seo: {
411
- title: "Electric-type Pokémon Cards — Base Set",
412
- description: "Pikachu, Raichu, Zapdos and all Base Set Electric types.",
413
- keywords: ["electric pokemon", "pikachu", "zapdos"],
414
- },
415
- display: {
416
- showInFooter: false,
417
- icon: "⚡",
418
- coverImage: "https://images.pokemontcg.io/base1/16_hires.png",
419
- color: "#F7D02C",
420
- showInMenu: true,
421
- },
422
- showOnHomepage: true,
423
- isActive: true,
424
- isSearchable: true,
425
- ancestors: [
426
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
427
- {
428
- id: "category-element-type-pokemon-cards",
429
- name: "Element Type",
430
- tier: 1,
431
- },
432
- ],
433
- createdBy: ADMIN,
434
- createdAt: daysAgo(30),
435
- updatedAt: daysAgo(1),
436
- },
437
- // -- LEAF: Fire --------------------------------------------------------------
438
- {
439
- id: "category-fire-element-type",
162
+ childrenIds: [], tier: 2, path: "pokemon-cards/element-type/electric", order: 2, isLeaf: true,
163
+ metrics: { productCount: 5, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 5, totalAuctionCount: 0, totalItemCount: 5, lastUpdated: daysAgo(1) },
164
+ seo: { title: "Electric-Type Pokémon Cards", description: "Pikachu, Zapdos, Raichu and more.", keywords: ["electric pokemon", "pikachu", "zapdos"] },
165
+ display: { showInFooter: false, icon: "⚡", color: "#F7D02C", showInMenu: true },
166
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-element-type-pokemon-cards", name: "Element Type", tier: 1 }],
167
+ }),
168
+ mkCat({
169
+ id: "category-fire-element",
440
170
  name: "Fire",
441
171
  slug: "fire",
442
- description: "Fire-type Pokémon cards — Charizard, Arcanine, Ninetales, Magmar and more",
172
+ description: "Fire-type Pokémon cards — Charizard, Arcanine, Ninetales, Moltres",
443
173
  rootId: "category-pokemon-cards",
444
174
  parentIds: ["category-element-type-pokemon-cards"],
445
- childrenIds: [],
446
- tier: 2,
447
- path: "pokemon-cards/element-type/fire",
448
- order: 3,
449
- isLeaf: true,
450
- metrics: {
451
- productCount: 7,
452
- productIds: [],
453
- auctionCount: 2,
454
- auctionIds: [],
455
- totalProductCount: 7,
456
- totalAuctionCount: 2,
457
- totalItemCount: 9,
458
- lastUpdated: daysAgo(1),
459
- },
460
- isFeatured: true,
461
- featuredPriority: 2,
462
- isBrand: false,
463
- seo: {
464
- title: "Fire-type Pokémon Cards — Base Set",
465
- description: "Charizard, Arcanine, Ninetales and all Base Set Fire types.",
466
- keywords: ["fire pokemon", "charizard", "arcanine"],
467
- },
468
- display: {
469
- showInFooter: false,
470
- icon: "🔥",
471
- coverImage: "https://images.pokemontcg.io/base1/4_hires.png",
472
- color: "#EE8130",
473
- showInMenu: true,
474
- },
475
- showOnHomepage: true,
476
- isActive: true,
477
- isSearchable: true,
478
- ancestors: [
479
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
480
- {
481
- id: "category-element-type-pokemon-cards",
482
- name: "Element Type",
483
- tier: 1,
484
- },
485
- ],
486
- createdBy: ADMIN,
487
- createdAt: daysAgo(30),
488
- updatedAt: daysAgo(1),
489
- },
490
- // -- LEAF: Grass -------------------------------------------------------------
491
- {
492
- id: "category-grass-element-type",
175
+ childrenIds: [], tier: 2, path: "pokemon-cards/element-type/fire", order: 3, isLeaf: true,
176
+ isFeatured: true, featuredPriority: 3, showOnHomepage: true,
177
+ metrics: { productCount: 6, productIds: [], auctionCount: 2, auctionIds: [], totalProductCount: 6, totalAuctionCount: 2, totalItemCount: 8, lastUpdated: daysAgo(1) },
178
+ seo: { title: "Fire-Type Pokémon Cards", description: "Charizard, Arcanine, Ninetales and more.", keywords: ["fire pokemon", "charizard"] },
179
+ display: { showInFooter: false, icon: "🔥", color: "#EE8130", coverImage: "https://images.pokemontcg.io/base1/4_hires.png", showInMenu: true },
180
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-element-type-pokemon-cards", name: "Element Type", tier: 1 }],
181
+ }),
182
+ mkCat({
183
+ id: "category-grass-element",
493
184
  name: "Grass",
494
185
  slug: "grass",
495
- description: "Grass-type Pokémon cards — Bulbasaur, Venusaur, Scyther, Pinsir and more",
186
+ description: "Grass-type Pokémon cards — Venusaur, Scyther, Pinsir, Clefairy",
496
187
  rootId: "category-pokemon-cards",
497
188
  parentIds: ["category-element-type-pokemon-cards"],
498
- childrenIds: [],
499
- tier: 2,
500
- path: "pokemon-cards/element-type/grass",
501
- order: 4,
502
- isLeaf: true,
503
- metrics: {
504
- productCount: 6,
505
- productIds: [],
506
- auctionCount: 0,
507
- auctionIds: [],
508
- totalProductCount: 6,
509
- totalAuctionCount: 0,
510
- totalItemCount: 6,
511
- lastUpdated: daysAgo(1),
512
- },
513
- isFeatured: false,
514
- isBrand: false,
515
- seo: {
516
- title: "Grass-type Pokémon Cards — Base Set",
517
- description: "Venusaur, Bulbasaur, Scyther and all Base Set Grass types.",
518
- keywords: ["grass pokemon", "venusaur", "bulbasaur"],
519
- },
520
- display: {
521
- showInFooter: false,
522
- icon: "🌿",
523
- coverImage: "https://images.pokemontcg.io/base1/15_hires.png",
524
- color: "#7AC74C",
525
- showInMenu: true,
526
- },
527
- showOnHomepage: false,
528
- isActive: true,
529
- isSearchable: true,
530
- ancestors: [
531
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
532
- {
533
- id: "category-element-type-pokemon-cards",
534
- name: "Element Type",
535
- tier: 1,
536
- },
537
- ],
538
- createdBy: ADMIN,
539
- createdAt: daysAgo(30),
540
- updatedAt: daysAgo(1),
541
- },
542
- // -- LEAF: Psychic -----------------------------------------------------------
543
- {
544
- id: "category-psychic-element-type",
189
+ childrenIds: [], tier: 2, path: "pokemon-cards/element-type/grass", order: 4, isLeaf: true,
190
+ metrics: { productCount: 4, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 4, totalAuctionCount: 0, totalItemCount: 4, lastUpdated: daysAgo(1) },
191
+ seo: { title: "Grass-Type Pokémon Cards", description: "Venusaur, Scyther, Pinsir and more.", keywords: ["grass pokemon", "venusaur"] },
192
+ display: { showInFooter: false, icon: "🌿", color: "#7AC74C", showInMenu: true },
193
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-element-type-pokemon-cards", name: "Element Type", tier: 1 }],
194
+ }),
195
+ mkCat({
196
+ id: "category-psychic-element",
545
197
  name: "Psychic",
546
198
  slug: "psychic",
547
- description: "Psychic-type Pokémon cards — Mewtwo, Jynx, Haunter, Gengar and more",
199
+ description: "Psychic-type Pokémon cards — Mewtwo, Gengar, Jynx, Alakazam",
548
200
  rootId: "category-pokemon-cards",
549
201
  parentIds: ["category-element-type-pokemon-cards"],
550
- childrenIds: [],
551
- tier: 2,
552
- path: "pokemon-cards/element-type/psychic",
553
- order: 5,
554
- isLeaf: true,
555
- metrics: {
556
- productCount: 5,
557
- productIds: [],
558
- auctionCount: 1,
559
- auctionIds: [],
560
- totalProductCount: 5,
561
- totalAuctionCount: 1,
562
- totalItemCount: 6,
563
- lastUpdated: daysAgo(1),
564
- },
565
- isFeatured: true,
566
- featuredPriority: 5,
567
- isBrand: false,
568
- seo: {
569
- title: "Psychic-type Pokémon Cards — Base Set",
570
- description: "Mewtwo, Gengar, Jynx and all Base Set Psychic types.",
571
- keywords: ["psychic pokemon", "mewtwo", "gengar"],
572
- },
573
- display: {
574
- showInFooter: false,
575
- icon: "🔮",
576
- coverImage: "https://images.pokemontcg.io/base1/10_hires.png",
577
- color: "#F95587",
578
- showInMenu: true,
579
- },
580
- showOnHomepage: true,
581
- isActive: true,
582
- isSearchable: true,
583
- ancestors: [
584
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
585
- {
586
- id: "category-element-type-pokemon-cards",
587
- name: "Element Type",
588
- tier: 1,
589
- },
590
- ],
591
- createdBy: ADMIN,
592
- createdAt: daysAgo(30),
593
- updatedAt: daysAgo(1),
594
- },
595
- // -- LEAF: Fighting ----------------------------------------------------------
596
- {
597
- id: "category-fighting-element-type",
202
+ childrenIds: [], tier: 2, path: "pokemon-cards/element-type/psychic", order: 5, isLeaf: true,
203
+ isFeatured: true, featuredPriority: 4,
204
+ metrics: { productCount: 5, productIds: [], auctionCount: 1, auctionIds: [], totalProductCount: 5, totalAuctionCount: 1, totalItemCount: 6, lastUpdated: daysAgo(1) },
205
+ seo: { title: "Psychic-Type Pokémon Cards", description: "Mewtwo, Gengar, Alakazam and more.", keywords: ["psychic pokemon", "mewtwo", "gengar"] },
206
+ display: { showInFooter: false, icon: "🔮", color: "#F95587", coverImage: "https://images.pokemontcg.io/base1/10_hires.png", showInMenu: true },
207
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-element-type-pokemon-cards", name: "Element Type", tier: 1 }],
208
+ }),
209
+ mkCat({
210
+ id: "category-fighting-element",
598
211
  name: "Fighting",
599
212
  slug: "fighting",
600
- description: "Fighting-type Pokémon cards — Machamp, Hitmonchan, Hitmonlee and more",
213
+ description: "Fighting-type Pokémon cards — Machamp, Hitmonchan, Primeape, Onix",
601
214
  rootId: "category-pokemon-cards",
602
215
  parentIds: ["category-element-type-pokemon-cards"],
603
- childrenIds: [],
604
- tier: 2,
605
- path: "pokemon-cards/element-type/fighting",
606
- order: 6,
607
- isLeaf: true,
608
- metrics: {
609
- productCount: 4,
610
- productIds: [],
611
- auctionCount: 0,
612
- auctionIds: [],
613
- totalProductCount: 4,
614
- totalAuctionCount: 0,
615
- totalItemCount: 4,
616
- lastUpdated: daysAgo(1),
617
- },
618
- isFeatured: false,
619
- isBrand: false,
620
- seo: {
621
- title: "Fighting-type Pokémon Cards — Base Set",
622
- description: "Machamp, Hitmonchan and all Base Set Fighting types.",
623
- keywords: ["fighting pokemon", "machamp", "hitmonchan"],
624
- },
625
- display: {
626
- showInFooter: false,
627
- icon: "🥊",
628
- coverImage: "https://images.pokemontcg.io/base1/8_hires.png",
629
- color: "#C22E28",
630
- showInMenu: true,
631
- },
632
- showOnHomepage: false,
633
- isActive: true,
634
- isSearchable: true,
635
- ancestors: [
636
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
637
- {
638
- id: "category-element-type-pokemon-cards",
639
- name: "Element Type",
640
- tier: 1,
641
- },
642
- ],
643
- createdBy: ADMIN,
644
- createdAt: daysAgo(30),
645
- updatedAt: daysAgo(1),
646
- },
647
- // -- LEAF: Colorless ---------------------------------------------------------
648
- {
649
- id: "category-colorless-element-type",
216
+ childrenIds: [], tier: 2, path: "pokemon-cards/element-type/fighting", order: 6, isLeaf: true,
217
+ metrics: { productCount: 3, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 3, totalAuctionCount: 0, totalItemCount: 3, lastUpdated: daysAgo(1) },
218
+ seo: { title: "Fighting-Type Pokémon Cards", description: "Machamp, Hitmonchan and more.", keywords: ["fighting pokemon", "machamp"] },
219
+ display: { showInFooter: false, icon: "🥊", color: "#C22E28", showInMenu: true },
220
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-element-type-pokemon-cards", name: "Element Type", tier: 1 }],
221
+ }),
222
+ mkCat({
223
+ id: "category-colorless-element",
650
224
  name: "Colorless",
651
225
  slug: "colorless",
652
- description: "Colorless-type Pokémon cards — Snorlax, Clefable, Chansey and more",
226
+ description: "Colorless-type Pokémon cards — Chansey, Snorlax, Dragonite, Kangaskhan",
653
227
  rootId: "category-pokemon-cards",
654
228
  parentIds: ["category-element-type-pokemon-cards"],
655
- childrenIds: [],
656
- tier: 2,
657
- path: "pokemon-cards/element-type/colorless",
658
- order: 7,
659
- isLeaf: true,
660
- metrics: {
661
- productCount: 5,
662
- productIds: [],
663
- auctionCount: 0,
664
- auctionIds: [],
665
- totalProductCount: 5,
666
- totalAuctionCount: 0,
667
- totalItemCount: 5,
668
- lastUpdated: daysAgo(1),
669
- },
670
- isFeatured: false,
671
- isBrand: false,
672
- seo: {
673
- title: "Colorless Pokémon Cards — Base Set",
674
- description: "Snorlax, Clefable, Chansey and all Colorless Base Set cards.",
675
- keywords: ["colorless pokemon", "snorlax", "chansey"],
676
- },
677
- display: {
678
- showInFooter: false,
679
- icon: "🤍",
680
- coverImage: "https://images.pokemontcg.io/base1/3_hires.png",
681
- showInMenu: true,
682
- },
683
- showOnHomepage: false,
684
- isActive: true,
685
- isSearchable: true,
686
- ancestors: [
687
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
688
- {
689
- id: "category-element-type-pokemon-cards",
690
- name: "Element Type",
691
- tier: 1,
692
- },
693
- ],
694
- createdBy: ADMIN,
695
- createdAt: daysAgo(30),
696
- updatedAt: daysAgo(1),
697
- },
698
- // -- TIER 1: Rarity ----------------------------------------------------------
699
- {
229
+ childrenIds: [], tier: 2, path: "pokemon-cards/element-type/colorless", order: 7, isLeaf: true,
230
+ metrics: { productCount: 4, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 4, totalAuctionCount: 0, totalItemCount: 4, lastUpdated: daysAgo(1) },
231
+ seo: { title: "Colorless-Type Pokémon Cards", description: "Chansey, Snorlax, Dragonite and more.", keywords: ["colorless pokemon", "chansey", "snorlax"] },
232
+ display: { showInFooter: false, icon: "⚪", color: "#A8A77A", showInMenu: true },
233
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-element-type-pokemon-cards", name: "Element Type", tier: 1 }],
234
+ }),
235
+ mkCat({
700
236
  id: "category-rarity-pokemon-cards",
701
237
  name: "Rarity",
702
238
  slug: "rarity",
703
- description: "Browse by card rarity — Holo Rare, Non-Holo Rare, Uncommon, Common",
239
+ description: "Shop by card rarity level",
704
240
  rootId: "category-pokemon-cards",
705
241
  parentIds: ["category-pokemon-cards"],
706
- childrenIds: [
707
- "category-holo-rare-rarity",
708
- "category-non-holo-rare-rarity",
709
- "category-uncommon-rarity",
710
- "category-common-rarity",
711
- ],
712
- tier: 1,
713
- path: "pokemon-cards/rarity",
714
- order: 3,
715
- isLeaf: false,
716
- metrics: {
717
- productCount: 0,
718
- productIds: [],
719
- auctionCount: 0,
720
- auctionIds: [],
721
- totalProductCount: 40,
722
- totalAuctionCount: 4,
723
- totalItemCount: 44,
724
- lastUpdated: daysAgo(1),
725
- },
726
- isFeatured: false,
727
- isBrand: false,
728
- seo: {
729
- title: "Card Rarity — Base Set",
730
- description: "Holo Rare, Non-Holo Rare, Uncommon and Common Base Set cards.",
731
- keywords: ["pokemon rarity", "holo rare", "common pokemon"],
732
- },
733
- display: { showInFooter: true, icon: "⭐", showInMenu: true },
734
- showOnHomepage: false,
735
- isActive: true,
736
- isSearchable: true,
737
- ancestors: [
738
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
739
- ],
740
- createdBy: ADMIN,
741
- createdAt: daysAgo(30),
742
- updatedAt: daysAgo(1),
743
- },
744
- // -- LEAF: Holo Rare ---------------------------------------------------------
745
- {
242
+ childrenIds: ["category-holo-rare-rarity", "category-non-holo-rare-rarity", "category-uncommon-rarity", "category-common-rarity"],
243
+ tier: 1, path: "pokemon-cards/rarity", order: 3, isLeaf: false,
244
+ metrics: { productCount: 0, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 35, totalAuctionCount: 4, totalItemCount: 39, lastUpdated: daysAgo(1) },
245
+ seo: { title: "Rarity — Pokémon TCG", description: "Browse Holo Rare, Uncommon, and Common Pokémon cards.", keywords: ["pokemon rarity", "holo rare", "uncommon"] },
246
+ display: { showInFooter: false, icon: "", showInMenu: true },
247
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }],
248
+ }),
249
+ mkCat({
746
250
  id: "category-holo-rare-rarity",
747
- name: "Holographic Rare",
251
+ name: "Holo Rare",
748
252
  slug: "holo-rare",
749
- description: "Shiny holographic Rare cards — the most sought-after Base Set singles",
253
+ description: "Holographic Rare cards — the crown jewels of any Base Set collection",
750
254
  rootId: "category-pokemon-cards",
751
255
  parentIds: ["category-rarity-pokemon-cards"],
752
- childrenIds: [],
753
- tier: 2,
754
- path: "pokemon-cards/rarity/holo-rare",
755
- order: 1,
756
- isLeaf: true,
757
- metrics: {
758
- productCount: 16,
759
- productIds: [],
760
- auctionCount: 4,
761
- auctionIds: [],
762
- totalProductCount: 16,
763
- totalAuctionCount: 4,
764
- totalItemCount: 20,
765
- lastUpdated: daysAgo(1),
766
- },
767
- isFeatured: true,
768
- featuredPriority: 1,
769
- isBrand: false,
770
- seo: {
771
- title: "Holo Rare Pokémon Cards — Base Set",
772
- description: "All 16 Holo Rare cards from the original Pokémon Base Set.",
773
- keywords: ["holo rare", "holographic pokemon", "charizard holo"],
774
- },
775
- display: {
776
- showInFooter: true,
777
- icon: "✨",
778
- coverImage: "https://images.pokemontcg.io/base1/4_hires.png",
779
- color: "#FFD700",
780
- showInMenu: true,
781
- },
782
- showOnHomepage: true,
783
- isActive: true,
784
- isSearchable: true,
785
- ancestors: [
786
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
787
- { id: "category-rarity-pokemon-cards", name: "Rarity", tier: 1 },
788
- ],
789
- createdBy: ADMIN,
790
- createdAt: daysAgo(30),
791
- updatedAt: daysAgo(1),
792
- },
793
- // -- LEAF: Non-Holo Rare -----------------------------------------------------
794
- {
256
+ childrenIds: [], tier: 2, path: "pokemon-cards/rarity/holo-rare", order: 1, isLeaf: true,
257
+ isFeatured: true, featuredPriority: 1, showOnHomepage: true,
258
+ metrics: { productCount: 16, productIds: [], auctionCount: 4, auctionIds: [], totalProductCount: 16, totalAuctionCount: 4, totalItemCount: 20, lastUpdated: daysAgo(1) },
259
+ seo: { title: "Holo Rare Pokémon Cards — Base Set", description: "All 16 Holo Rares from the original Pokémon Base Set.", keywords: ["holo rare", "holographic", "charizard", "mewtwo"] },
260
+ display: { showInFooter: true, icon: "✨", coverImage: "https://images.pokemontcg.io/base1/4_hires.png", color: "#B8860B", showInMenu: true },
261
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-rarity-pokemon-cards", name: "Rarity", tier: 1 }],
262
+ }),
263
+ mkCat({
795
264
  id: "category-non-holo-rare-rarity",
796
265
  name: "Non-Holo Rare",
797
266
  slug: "non-holo-rare",
798
- description: "Rare cards without the holographic pattern",
267
+ description: "Rare cards without holo foiling — often overlooked, great value",
799
268
  rootId: "category-pokemon-cards",
800
269
  parentIds: ["category-rarity-pokemon-cards"],
801
- childrenIds: [],
802
- tier: 2,
803
- path: "pokemon-cards/rarity/non-holo-rare",
804
- order: 2,
805
- isLeaf: true,
806
- metrics: {
807
- productCount: 10,
808
- productIds: [],
809
- auctionCount: 0,
810
- auctionIds: [],
811
- totalProductCount: 10,
812
- totalAuctionCount: 0,
813
- totalItemCount: 10,
814
- lastUpdated: daysAgo(1),
815
- },
816
- isFeatured: false,
817
- isBrand: false,
818
- seo: {
819
- title: "Non-Holo Rare Pokémon Cards — Base Set",
820
- description: "Rare but non-holographic Base Set singles.",
821
- keywords: ["non holo rare", "rare pokemon cards"],
822
- },
270
+ childrenIds: [], tier: 2, path: "pokemon-cards/rarity/non-holo-rare", order: 2, isLeaf: true,
271
+ metrics: { productCount: 10, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 10, totalAuctionCount: 0, totalItemCount: 10, lastUpdated: daysAgo(1) },
272
+ seo: { title: "Non-Holo Rare Pokémon Cards", description: "Rare cards without holo foil from Base Set.", keywords: ["non holo rare", "rare pokemon cards"] },
823
273
  display: { showInFooter: false, icon: "🌟", showInMenu: true },
824
- showOnHomepage: false,
825
- isActive: true,
826
- isSearchable: true,
827
- ancestors: [
828
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
829
- { id: "category-rarity-pokemon-cards", name: "Rarity", tier: 1 },
830
- ],
831
- createdBy: ADMIN,
832
- createdAt: daysAgo(30),
833
- updatedAt: daysAgo(1),
834
- },
835
- // -- LEAF: Uncommon ----------------------------------------------------------
836
- {
274
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-rarity-pokemon-cards", name: "Rarity", tier: 1 }],
275
+ }),
276
+ mkCat({
837
277
  id: "category-uncommon-rarity",
838
278
  name: "Uncommon",
839
279
  slug: "uncommon",
840
- description: "Uncommon Base Set cards — great for deck building",
280
+ description: "Uncommon cards — playable staples at accessible prices",
841
281
  rootId: "category-pokemon-cards",
842
282
  parentIds: ["category-rarity-pokemon-cards"],
843
- childrenIds: [],
844
- tier: 2,
845
- path: "pokemon-cards/rarity/uncommon",
846
- order: 3,
847
- isLeaf: true,
848
- metrics: {
849
- productCount: 8,
850
- productIds: [],
851
- auctionCount: 0,
852
- auctionIds: [],
853
- totalProductCount: 8,
854
- totalAuctionCount: 0,
855
- totalItemCount: 8,
856
- lastUpdated: daysAgo(1),
857
- },
858
- isFeatured: false,
859
- isBrand: false,
860
- seo: {
861
- title: "Uncommon Pokémon Cards — Base Set",
862
- description: "Base Set uncommon singles for collectors and players.",
863
- keywords: ["uncommon pokemon", "base set uncommon"],
864
- },
865
- display: { showInFooter: false, icon: "🔵", showInMenu: true },
866
- showOnHomepage: false,
867
- isActive: true,
868
- isSearchable: true,
869
- ancestors: [
870
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
871
- { id: "category-rarity-pokemon-cards", name: "Rarity", tier: 1 },
872
- ],
873
- createdBy: ADMIN,
874
- createdAt: daysAgo(30),
875
- updatedAt: daysAgo(1),
876
- },
877
- // -- LEAF: Common ------------------------------------------------------------
878
- {
283
+ childrenIds: [], tier: 2, path: "pokemon-cards/rarity/uncommon", order: 3, isLeaf: true,
284
+ metrics: { productCount: 6, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 6, totalAuctionCount: 0, totalItemCount: 6, lastUpdated: daysAgo(1) },
285
+ seo: { title: "Uncommon Pokémon Cards — Base Set", description: "Budget-friendly uncommon singles from the original print run.", keywords: ["uncommon pokemon cards", "base set uncommon"] },
286
+ display: { showInFooter: false, icon: "💎", showInMenu: true },
287
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-rarity-pokemon-cards", name: "Rarity", tier: 1 }],
288
+ }),
289
+ mkCat({
879
290
  id: "category-common-rarity",
880
291
  name: "Common",
881
292
  slug: "common",
882
- description: "Common Base Set cards — affordable starters and bulk lots",
293
+ description: "Common cards — great for play sets and completing your collection",
883
294
  rootId: "category-pokemon-cards",
884
295
  parentIds: ["category-rarity-pokemon-cards"],
885
- childrenIds: [],
886
- tier: 2,
887
- path: "pokemon-cards/rarity/common",
888
- order: 4,
889
- isLeaf: true,
890
- metrics: {
891
- productCount: 12,
892
- productIds: [],
893
- auctionCount: 0,
894
- auctionIds: [],
895
- totalProductCount: 12,
896
- totalAuctionCount: 0,
897
- totalItemCount: 12,
898
- lastUpdated: daysAgo(1),
899
- },
900
- isFeatured: false,
901
- isBrand: false,
902
- seo: {
903
- title: "Common Pokémon Cards Base Set",
904
- description: "Base Set common singles, great for bulk collectors.",
905
- keywords: ["common pokemon", "base set common", "pokemon bulk"],
906
- },
907
- display: { showInFooter: false, icon: "⚪", showInMenu: true },
908
- showOnHomepage: false,
909
- isActive: true,
910
- isSearchable: true,
911
- ancestors: [
912
- { id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 },
913
- { id: "category-rarity-pokemon-cards", name: "Rarity", tier: 1 },
914
- ],
915
- createdBy: ADMIN,
916
- createdAt: daysAgo(30),
917
- updatedAt: daysAgo(1),
918
- },
919
- // -- ROOT: Sealed Products ---------------------------------------------------
920
- {
296
+ childrenIds: [], tier: 2, path: "pokemon-cards/rarity/common", order: 4, isLeaf: true,
297
+ metrics: { productCount: 6, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 6, totalAuctionCount: 0, totalItemCount: 6, lastUpdated: daysAgo(1) },
298
+ seo: { title: "Common Pokémon Cards — Base Set", description: "Affordable common singles from the original Base Set.", keywords: ["common pokemon cards", "base set common"] },
299
+ display: { showInFooter: false, icon: "🃏", showInMenu: true },
300
+ ancestors: [{ id: "category-pokemon-cards", name: "Pokémon Cards", tier: 0 }, { id: "category-rarity-pokemon-cards", name: "Rarity", tier: 1 }],
301
+ }),
302
+ // ═══════════════════════════════════════════════════
303
+ // HOT WHEELS
304
+ // ═══════════════════════════════════════════════════
305
+ mkCat({
306
+ id: "category-hot-wheels",
307
+ name: "Hot Wheels",
308
+ slug: "hot-wheels",
309
+ description: "Die-cast Hot Wheels cars — basic, premium, Treasure Hunt, and track sets",
310
+ rootId: "category-hot-wheels",
311
+ parentIds: [],
312
+ childrenIds: ["category-hw-basic-cars", "category-hw-premium", "category-hw-treasure-hunt", "category-hw-track-sets"],
313
+ tier: 0, path: "hot-wheels", order: 2, isLeaf: false,
314
+ isFeatured: true, featuredPriority: 2, showOnHomepage: true,
315
+ metrics: { productCount: 0, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 35, totalAuctionCount: 3, totalItemCount: 38, lastUpdated: daysAgo(1) },
316
+ seo: { title: "Hot Wheels Die-Cast Cars | LetItRip", description: "Shop Hot Wheels basic, premium, Treasure Hunt, and collector cars.", keywords: ["hot wheels", "die cast", "toy cars", "treasure hunt"] },
317
+ display: { showInFooter: true, icon: "🚗", color: "#e74c3c", coverImage: "https://picsum.photos/seed/hw-root/600/400", showInMenu: true },
318
+ ancestors: [],
319
+ }),
320
+ mkCat({
321
+ id: "category-hw-basic-cars",
322
+ name: "Basic Die-Cast Cars",
323
+ slug: "hw-basic-cars",
324
+ description: "Everyday Hot Wheels cars from movie vehicles to original designs",
325
+ rootId: "category-hot-wheels",
326
+ parentIds: ["category-hot-wheels"],
327
+ childrenIds: [], tier: 1, path: "hot-wheels/basic-cars", order: 1, isLeaf: true,
328
+ isFeatured: true, featuredPriority: 5,
329
+ metrics: { productCount: 15, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 15, totalAuctionCount: 0, totalItemCount: 15, lastUpdated: daysAgo(1) },
330
+ seo: { title: "Hot Wheels Basic Cars", description: "Everyday mainline Hot Wheels die-cast cars.", keywords: ["hot wheels basic", "mainline", "die cast cars"] },
331
+ display: { showInFooter: false, icon: "🚙", color: "#e74c3c", showInMenu: true },
332
+ ancestors: [{ id: "category-hot-wheels", name: "Hot Wheels", tier: 0 }],
333
+ }),
334
+ mkCat({
335
+ id: "category-hw-premium",
336
+ name: "Premium Cars",
337
+ slug: "hw-premium",
338
+ description: "Hot Wheels premium lines — Car Culture, Boulevard, Real Riders with rubber tyres",
339
+ rootId: "category-hot-wheels",
340
+ parentIds: ["category-hot-wheels"],
341
+ childrenIds: [], tier: 1, path: "hot-wheels/premium", order: 2, isLeaf: true,
342
+ isFeatured: true, featuredPriority: 6,
343
+ metrics: { productCount: 10, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 10, totalAuctionCount: 0, totalItemCount: 10, lastUpdated: daysAgo(1) },
344
+ seo: { title: "Hot Wheels Premium Cars — Car Culture, Boulevard", description: "Premium Hot Wheels with real rubber tyres and premium packaging.", keywords: ["hot wheels premium", "car culture", "boulevard", "real riders"] },
345
+ display: { showInFooter: false, icon: "🏎️", color: "#c0392b", showInMenu: true },
346
+ ancestors: [{ id: "category-hot-wheels", name: "Hot Wheels", tier: 0 }],
347
+ }),
348
+ mkCat({
349
+ id: "category-hw-treasure-hunt",
350
+ name: "Treasure Hunt",
351
+ slug: "hw-treasure-hunt",
352
+ description: "Super Treasure Hunt (STH) and regular Treasure Hunt — the most sought-after Hot Wheels",
353
+ rootId: "category-hot-wheels",
354
+ parentIds: ["category-hot-wheels"],
355
+ childrenIds: [], tier: 1, path: "hot-wheels/treasure-hunt", order: 3, isLeaf: true,
356
+ isFeatured: true, featuredPriority: 7,
357
+ metrics: { productCount: 5, productIds: [], auctionCount: 3, auctionIds: [], totalProductCount: 5, totalAuctionCount: 3, totalItemCount: 8, lastUpdated: daysAgo(1) },
358
+ seo: { title: "Hot Wheels Treasure Hunt & Super Treasure Hunt", description: "Rare and super-rare Treasure Hunt Hot Wheels cars.", keywords: ["super treasure hunt", "STH", "hot wheels rare"] },
359
+ display: { showInFooter: false, icon: "🏆", color: "#d4ac0d", showInMenu: true },
360
+ ancestors: [{ id: "category-hot-wheels", name: "Hot Wheels", tier: 0 }],
361
+ }),
362
+ mkCat({
363
+ id: "category-hw-track-sets",
364
+ name: "Track Sets & Playsets",
365
+ slug: "hw-track-sets",
366
+ description: "Hot Wheels track sets, loop launchers, garages, and city playsets",
367
+ rootId: "category-hot-wheels",
368
+ parentIds: ["category-hot-wheels"],
369
+ childrenIds: [], tier: 1, path: "hot-wheels/track-sets", order: 4, isLeaf: true,
370
+ metrics: { productCount: 5, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 5, totalAuctionCount: 0, totalItemCount: 5, lastUpdated: daysAgo(1) },
371
+ seo: { title: "Hot Wheels Track Sets and Playsets", description: "Loops, launchers, garages, and city sets from Hot Wheels.", keywords: ["hot wheels track", "loop set", "playset", "garage"] },
372
+ display: { showInFooter: false, icon: "🛤️", showInMenu: true },
373
+ ancestors: [{ id: "category-hot-wheels", name: "Hot Wheels", tier: 0 }],
374
+ }),
375
+ // ═══════════════════════════════════════════════════
376
+ // BEYBLADE BURST
377
+ // ═══════════════════════════════════════════════════
378
+ mkCat({
379
+ id: "category-beyblade-burst",
380
+ name: "Beyblade Burst",
381
+ slug: "beyblade-burst",
382
+ description: "Beyblade Burst spinning tops — Attack, Defense, Stamina, and Balance types",
383
+ rootId: "category-beyblade-burst",
384
+ parentIds: [],
385
+ childrenIds: ["category-bb-attack-type", "category-bb-defense-type", "category-bb-stamina-type", "category-bb-balance-type", "category-bb-stadium"],
386
+ tier: 0, path: "beyblade-burst", order: 3, isLeaf: false,
387
+ isFeatured: true, featuredPriority: 3, showOnHomepage: true,
388
+ metrics: { productCount: 0, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 24, totalAuctionCount: 2, totalItemCount: 26, lastUpdated: daysAgo(1) },
389
+ seo: { title: "Beyblade Burst Tops | LetItRip", description: "Shop Beyblade Burst spinning tops — all types and series.", keywords: ["beyblade burst", "spinning top", "beyblade", "valtryek", "spriggan"] },
390
+ display: { showInFooter: true, icon: "🌀", color: "#2980b9", coverImage: "https://picsum.photos/seed/bb-root/600/400", showInMenu: true },
391
+ ancestors: [],
392
+ }),
393
+ mkCat({
394
+ id: "category-bb-attack-type",
395
+ name: "Attack Type",
396
+ slug: "bb-attack-type",
397
+ description: "Aggressive attack-type Beyblade Burst tops — built for raw power and KOs",
398
+ rootId: "category-beyblade-burst",
399
+ parentIds: ["category-beyblade-burst"],
400
+ childrenIds: [], tier: 1, path: "beyblade-burst/attack-type", order: 1, isLeaf: true,
401
+ isFeatured: true, featuredPriority: 8,
402
+ metrics: { productCount: 6, productIds: [], auctionCount: 1, auctionIds: [], totalProductCount: 6, totalAuctionCount: 1, totalItemCount: 7, lastUpdated: daysAgo(1) },
403
+ seo: { title: "Attack Type Beyblades — Burst", description: "Valtryek, Spriggan, Achilles and top attack-type Beyblade Burst tops.", keywords: ["attack type beyblade", "valtryek", "achilles"] },
404
+ display: { showInFooter: false, icon: "⚔️", color: "#e74c3c", showInMenu: true },
405
+ ancestors: [{ id: "category-beyblade-burst", name: "Beyblade Burst", tier: 0 }],
406
+ }),
407
+ mkCat({
408
+ id: "category-bb-defense-type",
409
+ name: "Defense Type",
410
+ slug: "bb-defense-type",
411
+ description: "Defense-type Beyblade Burst tops — wide, heavy layers that resist attacks",
412
+ rootId: "category-beyblade-burst",
413
+ parentIds: ["category-beyblade-burst"],
414
+ childrenIds: [], tier: 1, path: "beyblade-burst/defense-type", order: 2, isLeaf: true,
415
+ metrics: { productCount: 4, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 4, totalAuctionCount: 0, totalItemCount: 4, lastUpdated: daysAgo(1) },
416
+ seo: { title: "Defense Type Beyblades — Burst", description: "Garuda, Balkesh, and top defense-type Beyblades.", keywords: ["defense type beyblade", "garuda"] },
417
+ display: { showInFooter: false, icon: "🛡️", color: "#2c3e50", showInMenu: true },
418
+ ancestors: [{ id: "category-beyblade-burst", name: "Beyblade Burst", tier: 0 }],
419
+ }),
420
+ mkCat({
421
+ id: "category-bb-stamina-type",
422
+ name: "Stamina Type",
423
+ slug: "bb-stamina-type",
424
+ description: "Stamina-type tops — long-spinning, outlast opponents in the stadium",
425
+ rootId: "category-beyblade-burst",
426
+ parentIds: ["category-beyblade-burst"],
427
+ childrenIds: [], tier: 1, path: "beyblade-burst/stamina-type", order: 3, isLeaf: true,
428
+ metrics: { productCount: 5, productIds: [], auctionCount: 1, auctionIds: [], totalProductCount: 5, totalAuctionCount: 1, totalItemCount: 6, lastUpdated: daysAgo(1) },
429
+ seo: { title: "Stamina Type Beyblades — Burst", description: "Nepstrius, Phoenix, and top stamina-type Beyblades.", keywords: ["stamina type beyblade", "nepstrius", "phoenix"] },
430
+ display: { showInFooter: false, icon: "🌀", color: "#27ae60", showInMenu: true },
431
+ ancestors: [{ id: "category-beyblade-burst", name: "Beyblade Burst", tier: 0 }],
432
+ }),
433
+ mkCat({
434
+ id: "category-bb-balance-type",
435
+ name: "Balance Type",
436
+ slug: "bb-balance-type",
437
+ description: "Balance-type tops — versatile performance across attack, defense, and stamina",
438
+ rootId: "category-beyblade-burst",
439
+ parentIds: ["category-beyblade-burst"],
440
+ childrenIds: [], tier: 1, path: "beyblade-burst/balance-type", order: 4, isLeaf: true,
441
+ metrics: { productCount: 3, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 3, totalAuctionCount: 0, totalItemCount: 3, lastUpdated: daysAgo(1) },
442
+ seo: { title: "Balance Type Beyblades — Burst", description: "Genesis Drago, Achilles, Dead Hades — all-round balance tops.", keywords: ["balance type beyblade", "genesis drago"] },
443
+ display: { showInFooter: false, icon: "⚖️", color: "#8e44ad", showInMenu: true },
444
+ ancestors: [{ id: "category-beyblade-burst", name: "Beyblade Burst", tier: 0 }],
445
+ }),
446
+ mkCat({
447
+ id: "category-bb-stadium",
448
+ name: "Stadiums & Accessories",
449
+ slug: "bb-stadium",
450
+ description: "Beyblade Burst stadiums, launchers, string tops, and customisation parts",
451
+ rootId: "category-beyblade-burst",
452
+ parentIds: ["category-beyblade-burst"],
453
+ childrenIds: [], tier: 1, path: "beyblade-burst/stadium", order: 5, isLeaf: true,
454
+ metrics: { productCount: 4, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 4, totalAuctionCount: 0, totalItemCount: 4, lastUpdated: daysAgo(1) },
455
+ seo: { title: "Beyblade Burst Stadiums & Accessories", description: "Official Beyblade stadiums, launchers, and custom parts.", keywords: ["beyblade stadium", "beystadium", "launcher"] },
456
+ display: { showInFooter: false, icon: "🏟️", showInMenu: true },
457
+ ancestors: [{ id: "category-beyblade-burst", name: "Beyblade Burst", tier: 0 }],
458
+ }),
459
+ // ═══════════════════════════════════════════════════
460
+ // TRANSFORMERS
461
+ // ═══════════════════════════════════════════════════
462
+ mkCat({
463
+ id: "category-transformers",
464
+ name: "Transformers",
465
+ slug: "transformers",
466
+ description: "Transformers action figures — Autobots, Decepticons, Combiners, G1 and modern",
467
+ rootId: "category-transformers",
468
+ parentIds: [],
469
+ childrenIds: ["category-tf-autobots", "category-tf-decepticons", "category-tf-combiners"],
470
+ tier: 0, path: "transformers", order: 4, isLeaf: false,
471
+ isFeatured: true, featuredPriority: 4, showOnHomepage: true,
472
+ metrics: { productCount: 0, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 12, totalAuctionCount: 1, totalItemCount: 13, lastUpdated: daysAgo(1) },
473
+ seo: { title: "Transformers Action Figures | LetItRip", description: "Shop Transformers figures — Autobots, Decepticons, and Combiners.", keywords: ["transformers", "optimus prime", "megatron", "autobots"] },
474
+ display: { showInFooter: true, icon: "🤖", color: "#e67e22", coverImage: "https://picsum.photos/seed/tf-root/600/400", showInMenu: true },
475
+ ancestors: [],
476
+ }),
477
+ mkCat({
478
+ id: "category-tf-autobots",
479
+ name: "Autobots",
480
+ slug: "tf-autobots",
481
+ description: "Autobot Transformers — Optimus Prime, Bumblebee, Jazz, Ironhide and more",
482
+ rootId: "category-transformers",
483
+ parentIds: ["category-transformers"],
484
+ childrenIds: [], tier: 1, path: "transformers/autobots", order: 1, isLeaf: true,
485
+ isFeatured: true, featuredPriority: 9,
486
+ metrics: { productCount: 6, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 6, totalAuctionCount: 0, totalItemCount: 6, lastUpdated: daysAgo(1) },
487
+ seo: { title: "Autobot Transformers Figures", description: "Optimus Prime, Bumblebee, Jazz, and all Autobot figures.", keywords: ["autobots", "optimus prime", "bumblebee", "transformers"] },
488
+ display: { showInFooter: false, icon: "🔵", color: "#2980b9", showInMenu: true },
489
+ ancestors: [{ id: "category-transformers", name: "Transformers", tier: 0 }],
490
+ }),
491
+ mkCat({
492
+ id: "category-tf-decepticons",
493
+ name: "Decepticons",
494
+ slug: "tf-decepticons",
495
+ description: "Decepticon Transformers — Megatron, Starscream, Soundwave, Shockwave",
496
+ rootId: "category-transformers",
497
+ parentIds: ["category-transformers"],
498
+ childrenIds: [], tier: 1, path: "transformers/decepticons", order: 2, isLeaf: true,
499
+ metrics: { productCount: 4, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 4, totalAuctionCount: 0, totalItemCount: 4, lastUpdated: daysAgo(1) },
500
+ seo: { title: "Decepticon Transformers Figures", description: "Megatron, Starscream, Soundwave, and all Decepticon figures.", keywords: ["decepticons", "megatron", "starscream", "soundwave"] },
501
+ display: { showInFooter: false, icon: "🔴", color: "#922b21", showInMenu: true },
502
+ ancestors: [{ id: "category-transformers", name: "Transformers", tier: 0 }],
503
+ }),
504
+ mkCat({
505
+ id: "category-tf-combiners",
506
+ name: "Combiners & Special Teams",
507
+ slug: "tf-combiners",
508
+ description: "Combiner Wars, Siege, and Legacy combiner sets — Devastator, Superion and more",
509
+ rootId: "category-transformers",
510
+ parentIds: ["category-transformers"],
511
+ childrenIds: [], tier: 1, path: "transformers/combiners", order: 3, isLeaf: true,
512
+ metrics: { productCount: 2, productIds: [], auctionCount: 1, auctionIds: [], totalProductCount: 2, totalAuctionCount: 1, totalItemCount: 3, lastUpdated: daysAgo(1) },
513
+ seo: { title: "Transformers Combiner Sets", description: "Devastator, Superion, Menasor — all Transformers combiner sets.", keywords: ["combiners", "devastator", "superion", "combiner wars"] },
514
+ display: { showInFooter: false, icon: "🦾", color: "#641e16", showInMenu: true },
515
+ ancestors: [{ id: "category-transformers", name: "Transformers", tier: 0 }],
516
+ }),
517
+ // ═══════════════════════════════════════════════════
518
+ // CROSS-FRANCHISE
519
+ // ═══════════════════════════════════════════════════
520
+ mkCat({
921
521
  id: "category-sealed-products",
922
522
  name: "Sealed Products",
923
523
  slug: "sealed-products",
924
- description: "Factory-sealed Pokémon TCG products — booster packs, theme decks, booster boxes",
524
+ description: "Factory-sealed booster boxes, packs, starter sets, and collector bundles",
925
525
  rootId: "category-sealed-products",
926
526
  parentIds: [],
927
- childrenIds: [],
928
- tier: 0,
929
- path: "sealed-products",
930
- order: 2,
931
- isLeaf: true,
932
- metrics: {
933
- productCount: 6,
934
- productIds: [],
935
- auctionCount: 1,
936
- auctionIds: [],
937
- totalProductCount: 6,
938
- totalAuctionCount: 1,
939
- totalItemCount: 7,
940
- lastUpdated: daysAgo(1),
941
- },
942
- isFeatured: true,
943
- featuredPriority: 6,
944
- isBrand: false,
945
- seo: {
946
- title: "Sealed Pokémon Products | LetItRip",
947
- description: "Booster packs, theme decks, display boxes — all sealed Base Set products.",
948
- keywords: ["sealed pokemon", "booster pack", "theme deck"],
949
- },
950
- display: {
951
- showInFooter: true,
952
- icon: "📦",
953
- coverImage: "https://images.pokemontcg.io/base1/logo.png",
954
- color: "#2563EB",
955
- showInMenu: true,
956
- },
957
- showOnHomepage: true,
958
- isActive: true,
959
- isSearchable: true,
527
+ childrenIds: [], tier: 0, path: "sealed-products", order: 5, isLeaf: true,
528
+ isFeatured: true, featuredPriority: 10, showOnHomepage: true,
529
+ metrics: { productCount: 8, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 8, totalAuctionCount: 0, totalItemCount: 8, lastUpdated: daysAgo(1) },
530
+ seo: { title: "Sealed Products — Pokémon, Hot Wheels & More | LetItRip", description: "Factory-sealed collectibles — Pokémon packs, Hot Wheels cases, Beyblade sets.", keywords: ["sealed products", "booster box", "factory sealed"] },
531
+ display: { showInFooter: true, icon: "📦", showInMenu: true },
960
532
  ancestors: [],
961
- createdBy: ADMIN,
962
- createdAt: daysAgo(30),
963
- updatedAt: daysAgo(1),
964
- },
965
- // -- ROOT: Accessories -------------------------------------------------------
966
- {
533
+ }),
534
+ mkCat({
967
535
  id: "category-accessories",
968
- name: "Accessories",
536
+ name: "Accessories & Display",
969
537
  slug: "accessories",
970
- description: "Card sleeves, deck boxes, binders, playmats and other TCG accessories",
538
+ description: "Card sleeves, top-loaders, binders, display stands, and storage solutions",
971
539
  rootId: "category-accessories",
972
540
  parentIds: [],
973
- childrenIds: [],
974
- tier: 0,
975
- path: "accessories",
976
- order: 3,
977
- isLeaf: true,
978
- metrics: {
979
- productCount: 4,
980
- productIds: [],
981
- auctionCount: 0,
982
- auctionIds: [],
983
- totalProductCount: 4,
984
- totalAuctionCount: 0,
985
- totalItemCount: 4,
986
- lastUpdated: daysAgo(1),
987
- },
988
- isFeatured: false,
989
- isBrand: false,
990
- seo: {
991
- title: "Pokémon TCG Accessories | LetItRip",
992
- description: "Card sleeves, binders, playmats and deck boxes for Pokémon TCG collectors.",
993
- keywords: ["pokemon accessories", "card sleeves", "deck box", "binder"],
994
- },
995
- display: { showInFooter: true, icon: "🎒", showInMenu: true },
996
- showOnHomepage: false,
997
- isActive: true,
998
- isSearchable: true,
541
+ childrenIds: [], tier: 0, path: "accessories", order: 6, isLeaf: true,
542
+ metrics: { productCount: 6, productIds: [], auctionCount: 0, auctionIds: [], totalProductCount: 6, totalAuctionCount: 0, totalItemCount: 6, lastUpdated: daysAgo(1) },
543
+ seo: { title: "Accessories & Display Products | LetItRip", description: "Card sleeves, binders, top-loaders, display cases, and storage.", keywords: ["card sleeves", "top loader", "binder", "display case"] },
544
+ display: { showInFooter: true, icon: "🗂️", showInMenu: true },
999
545
  ancestors: [],
1000
- createdBy: ADMIN,
1001
- createdAt: daysAgo(30),
1002
- updatedAt: daysAgo(1),
1003
- },
1004
- // -- BRANDS ------------------------------------------------------------------
1005
- {
1006
- id: "category-brand-wizards",
1007
- name: "Wizards of the Coast",
1008
- slug: "brand-wizards",
1009
- description: "Original Base Set publisher",
1010
- rootId: "category-brand-wizards",
1011
- parentIds: [],
1012
- childrenIds: [],
1013
- tier: 0,
1014
- path: "brand-wizards",
1015
- order: 10,
1016
- isLeaf: true,
1017
- isBrand: true,
1018
- isFeatured: false,
1019
- metrics: {
1020
- productCount: 0,
1021
- productIds: [],
1022
- auctionCount: 0,
1023
- auctionIds: [],
1024
- totalProductCount: 0,
1025
- totalAuctionCount: 0,
1026
- totalItemCount: 0,
1027
- lastUpdated: daysAgo(1),
1028
- },
1029
- seo: {
1030
- title: "Wizards of the Coast Pokémon Cards",
1031
- description: "Original Base Set cards published by Wizards of the Coast.",
1032
- keywords: ["wizards of the coast", "wotc pokemon"],
1033
- },
1034
- display: { showInFooter: false, showInMenu: false },
1035
- showOnHomepage: false,
1036
- isActive: true,
1037
- isSearchable: true,
1038
- ancestors: [],
1039
- createdBy: ADMIN,
1040
- createdAt: daysAgo(30),
1041
- updatedAt: daysAgo(1),
1042
- },
1043
- {
1044
- id: "category-brand-tpci",
1045
- name: "The Pokémon Company",
1046
- slug: "brand-pokemon-company",
1047
- description: "Official Pokémon Trading Card Game publisher",
1048
- rootId: "category-brand-tpci",
1049
- parentIds: [],
1050
- childrenIds: [],
1051
- tier: 0,
1052
- path: "brand-pokemon-company",
1053
- order: 11,
1054
- isLeaf: true,
1055
- isBrand: true,
1056
- isFeatured: true,
1057
- featuredPriority: 1,
1058
- metrics: {
1059
- productCount: 0,
1060
- productIds: [],
1061
- auctionCount: 0,
1062
- auctionIds: [],
1063
- totalProductCount: 0,
1064
- totalAuctionCount: 0,
1065
- totalItemCount: 0,
1066
- lastUpdated: daysAgo(1),
1067
- },
1068
- seo: {
1069
- title: "The Pokémon Company | LetItRip",
1070
- description: "Official Pokémon TCG cards published by The Pokémon Company International.",
1071
- keywords: ["pokemon company", "tpci", "official pokemon cards"],
1072
- },
1073
- display: {
1074
- showInFooter: false,
1075
- showInMenu: false,
1076
- icon: "https://images.pokemontcg.io/base1/logo.png",
1077
- },
1078
- showOnHomepage: false,
1079
- isActive: true,
1080
- isSearchable: true,
1081
- ancestors: [],
1082
- createdBy: ADMIN,
1083
- createdAt: daysAgo(30),
1084
- updatedAt: daysAgo(1),
1085
- },
1086
- {
1087
- id: "category-brand-nintendo",
1088
- name: "Nintendo",
1089
- slug: "brand-nintendo",
1090
- description: "Nintendo-licensed Pokémon card products and accessories",
1091
- rootId: "category-brand-nintendo",
1092
- parentIds: [],
1093
- childrenIds: [],
1094
- tier: 0,
1095
- path: "brand-nintendo",
1096
- order: 12,
1097
- isLeaf: true,
1098
- isBrand: true,
1099
- isFeatured: false,
1100
- metrics: {
1101
- productCount: 0,
1102
- productIds: [],
1103
- auctionCount: 0,
1104
- auctionIds: [],
1105
- totalProductCount: 0,
1106
- totalAuctionCount: 0,
1107
- totalItemCount: 0,
1108
- lastUpdated: daysAgo(1),
1109
- },
1110
- seo: {
1111
- title: "Nintendo Pokémon Products | LetItRip",
1112
- description: "Nintendo-licensed Pokémon collectibles and accessories.",
1113
- keywords: ["nintendo pokemon", "nintendo licensed"],
1114
- },
1115
- display: {
1116
- showInFooter: false,
1117
- showInMenu: false,
1118
- },
1119
- showOnHomepage: false,
1120
- isActive: true,
1121
- isSearchable: true,
1122
- ancestors: [],
1123
- createdBy: ADMIN,
1124
- createdAt: daysAgo(30),
1125
- updatedAt: daysAgo(1),
1126
- },
546
+ }),
1127
547
  ];