@mohasinac/appkit 4.1.1 → 4.2.0

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 (225) hide show
  1. package/dist/_internal/client/features/maintenance/index.d.ts +2 -0
  2. package/dist/_internal/client/features/maintenance/index.js +1 -0
  3. package/dist/_internal/client/features/maintenance/views/CloudLogsListView.d.ts +9 -0
  4. package/dist/_internal/client/features/maintenance/views/CloudLogsListView.js +55 -0
  5. package/dist/_internal/server/features/auctions/index.d.ts +1 -1
  6. package/dist/_internal/server/features/auctions/index.js +1 -1
  7. package/dist/_internal/server/features/auctions/service.js +2 -2
  8. package/dist/_internal/server/features/checkout/actions.d.ts +15 -0
  9. package/dist/_internal/server/features/checkout/actions.js +245 -182
  10. package/dist/_internal/server/features/maintenance/cloud-logs-data.d.ts +50 -0
  11. package/dist/_internal/server/features/maintenance/cloud-logs-data.js +152 -0
  12. package/dist/_internal/server/functions/scheduled.d.ts +2 -1
  13. package/dist/_internal/server/functions/scheduled.js +9 -1
  14. package/dist/_internal/server/jobs/core/jobRunners.js +10 -0
  15. package/dist/_internal/server/jobs/core/newsletterExport.d.ts +15 -0
  16. package/dist/_internal/server/jobs/core/newsletterExport.js +43 -0
  17. package/dist/_internal/server/jobs/core/onOrderCreate.d.ts +4 -12
  18. package/dist/_internal/server/jobs/core/onOrderCreate.js +3 -3
  19. package/dist/_internal/server/jobs/core/onOrderStatusChange.d.ts +2 -0
  20. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +1 -0
  21. package/dist/_internal/server/jobs/core/onProductWrite.js +14 -2
  22. package/dist/_internal/server/jobs/core/paymentWindowTimeout.js +1 -0
  23. package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +1 -0
  24. package/dist/_internal/server/jobs/core/revenueRollup.d.ts +13 -0
  25. package/dist/_internal/server/jobs/core/revenueRollup.js +22 -0
  26. package/dist/_internal/server/jobs/core/whatsappNotify.d.ts +35 -0
  27. package/dist/_internal/server/jobs/core/whatsappNotify.js +82 -0
  28. package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
  29. package/dist/_internal/server/jobs/handlers/index.js +1 -0
  30. package/dist/_internal/server/jobs/handlers/revenueRollup.d.ts +2 -0
  31. package/dist/_internal/server/jobs/handlers/revenueRollup.js +2 -0
  32. package/dist/_internal/shared/features/auctions/config.d.ts +1 -1
  33. package/dist/_internal/shared/features/auctions/config.js +1 -1
  34. package/dist/_internal/shared/features/auctions/schema.js +1 -1
  35. package/dist/_internal/shared/features/cart/schema.js +2 -2
  36. package/dist/_internal/shared/features/checkout/config.d.ts +7 -0
  37. package/dist/_internal/shared/features/checkout/config.js +7 -0
  38. package/dist/_internal/shared/features/events/schema.js +1 -1
  39. package/dist/_internal/shared/features/orders/schema.js +1 -1
  40. package/dist/_internal/shared/features/products/schema.js +3 -3
  41. package/dist/_internal/shared/features/promotions/schema.js +3 -3
  42. package/dist/_internal/shared/fees/calculator.d.ts +32 -7
  43. package/dist/_internal/shared/fees/calculator.js +25 -0
  44. package/dist/client.d.ts +4 -4
  45. package/dist/client.js +4 -2
  46. package/dist/constants/api-endpoints.d.ts +9 -6
  47. package/dist/constants/api-endpoints.js +3 -2
  48. package/dist/contracts/client-payment-gateway.d.ts +1 -2
  49. package/dist/features/about/components/AboutView.d.ts +6 -16
  50. package/dist/features/about/components/AboutView.js +3 -3
  51. package/dist/features/about/components/FeesView.js +18 -0
  52. package/dist/features/about/index.d.ts +2 -1
  53. package/dist/features/about/schemas/firestore.d.ts +47 -0
  54. package/dist/features/about/schemas/firestore.js +6 -0
  55. package/dist/features/about/schemas/index.d.ts +210 -0
  56. package/dist/features/about/schemas/index.js +45 -0
  57. package/dist/features/account/hooks/useProfile.js +3 -0
  58. package/dist/features/admin/actions/notification-actions.d.ts +4 -1
  59. package/dist/features/admin/actions/notification-actions.js +56 -10
  60. package/dist/features/admin/components/AdminAdsView.js +1 -1
  61. package/dist/features/admin/components/AdminCarouselGroupEditorView.d.ts +6 -0
  62. package/dist/features/admin/components/AdminCarouselGroupEditorView.js +50 -0
  63. package/dist/features/admin/components/AdminCartsView.js +16 -3
  64. package/dist/features/admin/components/AdminCouponEditorView.js +2 -2
  65. package/dist/features/admin/components/AdminCouponsView.js +14 -4
  66. package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -42
  67. package/dist/features/admin/components/AdminMediaView.js +1 -1
  68. package/dist/features/admin/components/AdminNewsletterView.js +42 -11
  69. package/dist/features/admin/components/AdminNotificationsView.js +31 -19
  70. package/dist/features/admin/components/AdminOrdersView.js +7 -0
  71. package/dist/features/admin/components/AdminPayoutsView.js +18 -3
  72. package/dist/features/admin/components/AdminProductsView.js +17 -2
  73. package/dist/features/admin/components/AdminReviewsView.js +16 -2
  74. package/dist/features/admin/components/AdminScammersView.js +7 -0
  75. package/dist/features/admin/components/AdminSectionsView.js +4 -0
  76. package/dist/features/admin/components/AdminSiteConfigGuideView.js +1 -1
  77. package/dist/features/admin/components/AdminSiteSettingsView.js +127 -8
  78. package/dist/features/admin/components/AdminStoreEditorView.d.ts +2 -1
  79. package/dist/features/admin/components/AdminStoreEditorView.js +4 -4
  80. package/dist/features/admin/components/AdminStoresView.js +1 -1
  81. package/dist/features/admin/components/AdminSupportTicketDetailView.js +23 -5
  82. package/dist/features/admin/components/AdminSupportTicketsView.js +20 -2
  83. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +4 -1
  84. package/dist/features/admin/components/AdminTesterChecklistView.js +8 -0
  85. package/dist/features/admin/components/index.d.ts +2 -0
  86. package/dist/features/admin/components/index.js +1 -0
  87. package/dist/features/admin/constants/filter-tabs.d.ts +55 -41
  88. package/dist/features/admin/constants/filter-tabs.js +55 -27
  89. package/dist/features/admin/repository/analytics-rollup.repository.d.ts +25 -0
  90. package/dist/features/admin/repository/analytics-rollup.repository.js +31 -0
  91. package/dist/features/admin/repository/site-settings.repository.js +8 -1
  92. package/dist/features/admin/schemas/firestore.d.ts +46 -0
  93. package/dist/features/admin/schemas/firestore.js +62 -24
  94. package/dist/features/auctions/actions/bid-actions.js +1 -1
  95. package/dist/features/auctions/components/AuctionDetailPageView.js +2 -2
  96. package/dist/features/auctions/components/AuctionsListView.js +8 -1
  97. package/dist/features/auth/components/LoginForm.js +2 -2
  98. package/dist/features/auth/components/RegisterForm.js +2 -2
  99. package/dist/features/auth/permissions/constants.d.ts +16 -0
  100. package/dist/features/auth/permissions/constants.js +53 -0
  101. package/dist/features/auth/schemas/firestore.js +1 -0
  102. package/dist/features/blog/components/BlogFilters.js +1 -1
  103. package/dist/features/cart/schemas/firestore.d.ts +1 -1
  104. package/dist/features/categories/schemas/firestore.d.ts +1 -1
  105. package/dist/features/consultation/components/ConsultationForm.js +1 -1
  106. package/dist/features/events/components/EventFilters.js +2 -0
  107. package/dist/features/homepage/components/WelcomeSection.js +2 -2
  108. package/dist/features/layout/BackToTop.d.ts +9 -5
  109. package/dist/features/layout/BackToTop.js +17 -21
  110. package/dist/features/layout/TitleBarLayout.d.ts +2 -2
  111. package/dist/features/layout/TitleBarLayout.js +4 -4
  112. package/dist/features/media/AvatarUpload.js +7 -3
  113. package/dist/features/media/MediaVideo.js +1 -1
  114. package/dist/features/media/finalize.d.ts +9 -13
  115. package/dist/features/media/finalize.js +23 -74
  116. package/dist/features/media/server.d.ts +1 -1
  117. package/dist/features/media/server.js +1 -1
  118. package/dist/features/orders/actions/refund-actions.js +1 -0
  119. package/dist/features/orders/hooks/useOrders.js +16 -4
  120. package/dist/features/orders/schemas/firestore.d.ts +19 -5
  121. package/dist/features/payments/schemas/firestore.d.ts +2 -2
  122. package/dist/features/pre-orders/components/PreOrdersListView.js +7 -0
  123. package/dist/features/products/components/ArtStickersListView.js +5 -0
  124. package/dist/features/products/components/ProductDetailPageView.d.ts +7 -1
  125. package/dist/features/products/components/ProductForm.js +14 -1
  126. package/dist/features/products/components/ProductsIndexPageView.js +7 -0
  127. package/dist/features/products/constants/action-defs.d.ts +29 -3
  128. package/dist/features/products/constants/action-defs.js +77 -1
  129. package/dist/features/products/schemas/firestore.d.ts +1 -1
  130. package/dist/features/products/schemas/product-templates.d.ts +1 -1
  131. package/dist/features/products/types/index.d.ts +4 -0
  132. package/dist/features/scams/schemas/index.js +2 -2
  133. package/dist/features/search/components/Search.js +3 -3
  134. package/dist/features/seller/components/SellerAuctionsView.js +27 -2
  135. package/dist/features/seller/components/SellerOrdersView.js +2 -2
  136. package/dist/features/seller/components/SellerPayoutsView.js +24 -10
  137. package/dist/features/seller/components/SellerPreOrdersView.js +12 -4
  138. package/dist/features/seller/components/SellerPrizeDrawsView.js +23 -5
  139. package/dist/features/seller/components/SellerProductShell.d.ts +2 -0
  140. package/dist/features/seller/components/SellerProductShell.js +1 -1
  141. package/dist/features/seller/components/SellerProductsView.js +8 -6
  142. package/dist/features/seller/components/SellerReviewsView.js +27 -6
  143. package/dist/features/seller/components/index.d.ts +0 -2
  144. package/dist/features/seller/components/index.js +0 -1
  145. package/dist/features/stores/components/StoreListingsGuideView.js +2 -1
  146. package/dist/features/stores/components/StoreProductsView.js +1 -1
  147. package/dist/features/stores/schemas/firestore.d.ts +11 -0
  148. package/dist/features/stores/schemas/firestore.js +5 -0
  149. package/dist/features/stores/schemas/index.d.ts +2 -2
  150. package/dist/features/tester/actions/checklist-item-actions.d.ts +6 -0
  151. package/dist/features/tester/actions/checklist-item-actions.js +2 -0
  152. package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +13 -2
  153. package/dist/features/tester/components/AdminTesterFeedbackListView.js +2 -1
  154. package/dist/features/tester/components/AdminTesterFeedbackReportView.js +9 -5
  155. package/dist/features/tester/components/TesterHubView.js +34 -21
  156. package/dist/features/tester/repository/tester-checklist-item.repository.js +1 -0
  157. package/dist/features/tester/repository/tester-checklist-response.repository.d.ts +18 -4
  158. package/dist/features/tester/repository/tester-checklist-response.repository.js +43 -8
  159. package/dist/features/tester/schemas/firestore.d.ts +8 -3
  160. package/dist/features/tester/schemas/firestore.js +6 -0
  161. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +21 -9
  162. package/dist/features/tester/utils/phases.d.ts +31 -0
  163. package/dist/features/tester/utils/phases.js +46 -0
  164. package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +1 -1
  165. package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +10 -1
  166. package/dist/features/whatsapp-bot/helpers/whatsapp.js +47 -0
  167. package/dist/features/whatsapp-bot/types/index.d.ts +20 -1
  168. package/dist/features/wishlist/types/index.d.ts +3 -0
  169. package/dist/index.d.ts +15 -6
  170. package/dist/index.js +19 -9
  171. package/dist/next/components/NotFoundView.js +2 -1
  172. package/dist/next/routing/route-map.d.ts +6 -12
  173. package/dist/next/routing/route-map.js +3 -4
  174. package/dist/providers/db-firebase/admin.d.ts +1 -0
  175. package/dist/providers/db-firebase/admin.js +1 -1
  176. package/dist/repositories/index.d.ts +2 -0
  177. package/dist/repositories/index.js +1 -0
  178. package/dist/schemas/registry.d.ts +2 -2
  179. package/dist/seed/addresses-seed-data.js +18 -18
  180. package/dist/seed/bids-seed-data.js +4 -4
  181. package/dist/seed/blog-posts-seed-data.js +82 -82
  182. package/dist/seed/carousel-slides-seed-data.js +14 -10
  183. package/dist/seed/carousels-seed-data.js +3 -3
  184. package/dist/seed/cart-seed-data.js +92 -92
  185. package/dist/seed/claimed-coupons-seed-data.js +10 -10
  186. package/dist/seed/conversations-seed-data.js +75 -75
  187. package/dist/seed/coupon-usage-seed-data.js +12 -12
  188. package/dist/seed/coupons-seed-data.js +41 -41
  189. package/dist/seed/events-seed-data.js +105 -105
  190. package/dist/seed/grouped-listings-seed-data.d.ts +2 -137
  191. package/dist/seed/grouped-listings-seed-data.js +79 -143
  192. package/dist/seed/history-seed-data.js +38 -38
  193. package/dist/seed/homepage-sections-seed-data.js +9 -9
  194. package/dist/seed/notifications-seed-data.js +56 -56
  195. package/dist/seed/offers-seed-data.js +91 -91
  196. package/dist/seed/orders-seed-data.js +121 -106
  197. package/dist/seed/payouts-seed-data.js +42 -42
  198. package/dist/seed/products-auctions-seed-data.js +10 -2
  199. package/dist/seed/products-standard-seed-data.js +40 -8
  200. package/dist/seed/reviews-seed-data.js +42 -23
  201. package/dist/seed/scammers-seed-data.js +22 -22
  202. package/dist/seed/sessions-seed-data.js +7 -7
  203. package/dist/seed/shipments-seed-data.js +10 -10
  204. package/dist/seed/site-settings-seed-data.js +89 -0
  205. package/dist/seed/store-addresses-seed-data.js +2 -2
  206. package/dist/seed/store-extensions-seed-data.js +93 -93
  207. package/dist/seed/stores-seed-data.js +2 -0
  208. package/dist/seed/support-tickets-seed-data.js +47 -47
  209. package/dist/seed/users-seed-data.js +55 -89
  210. package/dist/seed/wishlists-seed-data.js +22 -22
  211. package/dist/server.d.ts +4 -3
  212. package/dist/server.js +7 -7
  213. package/dist/styles.css +1 -1
  214. package/dist/tailwind-utilities.css +1 -1
  215. package/dist/ui/components/PageLoader.js +8 -3
  216. package/dist/ui/components/Select.d.ts +8 -1
  217. package/dist/ui/components/Select.js +2 -2
  218. package/dist/ui/components/SiteMark.d.ts +23 -0
  219. package/dist/ui/components/SiteMark.js +76 -0
  220. package/dist/ui/index.d.ts +2 -0
  221. package/dist/ui/index.js +1 -0
  222. package/dist/validation/schemas.d.ts +0 -2
  223. package/dist/validation/schemas.js +0 -2
  224. package/package.json +1 -1
  225. package/scripts/seed-cli.mjs +17 -15
@@ -43,7 +43,11 @@ const _rawProductsStandardSeedData = [
43
43
  availableQuantity: 4,
44
44
  isSold: false,
45
45
  mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-1-20260101/900/900"),
46
- images: [seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-1-20260101/900/900")],
46
+ images: [
47
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-1-20260101/900/900"),
48
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-2-20260101/900/900"),
49
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-dranzer-s-3-20260101/900/900"),
50
+ ],
47
51
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
48
52
  condition: PRODUCT_FIELDS.CONDITION_VALUES.LIKE_NEW,
49
53
  featured: true,
@@ -68,7 +72,11 @@ const _rawProductsStandardSeedData = [
68
72
  availableQuantity: 2,
69
73
  isSold: false,
70
74
  mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-1-20260101/900/900"),
71
- images: [seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-1-20260101/900/900")],
75
+ images: [
76
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-1-20260101/900/900"),
77
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-2-20260101/900/900"),
78
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-original-driger-v-3-20260101/900/900"),
79
+ ],
72
80
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
73
81
  condition: PRODUCT_FIELDS.CONDITION_VALUES.GOOD,
74
82
  storeId: "store-beyblade-arena",
@@ -93,7 +101,11 @@ const _rawProductsStandardSeedData = [
93
101
  availableQuantity: 6,
94
102
  isSold: false,
95
103
  mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-1-20260101/900/900"),
96
- images: [seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-1-20260101/900/900")],
104
+ images: [
105
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-1-20260101/900/900"),
106
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-2-20260101/900/900"),
107
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-storm-pegasus-3-20260101/900/900"),
108
+ ],
97
109
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
98
110
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
99
111
  featured: true,
@@ -118,7 +130,11 @@ const _rawProductsStandardSeedData = [
118
130
  availableQuantity: 3,
119
131
  isSold: false,
120
132
  mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-1-20260101/900/900"),
121
- images: [seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-1-20260101/900/900")],
133
+ images: [
134
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-1-20260101/900/900"),
135
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-2-20260101/900/900"),
136
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-flame-sagittario-3-20260101/900/900"),
137
+ ],
122
138
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
123
139
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
124
140
  storeId: "store-beyblade-arena",
@@ -143,7 +159,11 @@ const _rawProductsStandardSeedData = [
143
159
  availableQuantity: 10,
144
160
  isSold: false,
145
161
  mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-1-20260101/900/900"),
146
- images: [seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-1-20260101/900/900")],
162
+ images: [
163
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-1-20260101/900/900"),
164
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-2-20260101/900/900"),
165
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-valkyrie-3-20260101/900/900"),
166
+ ],
147
167
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
148
168
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
149
169
  featured: true,
@@ -168,7 +188,11 @@ const _rawProductsStandardSeedData = [
168
188
  availableQuantity: 5,
169
189
  isSold: false,
170
190
  mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-1-20260101/900/900"),
171
- images: [seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-1-20260101/900/900")],
191
+ images: [
192
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-1-20260101/900/900"),
193
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-2-20260101/900/900"),
194
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-regalia-genesis-3-20260101/900/900"),
195
+ ],
172
196
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
173
197
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
174
198
  storeId: "store-beyblade-arena",
@@ -193,7 +217,11 @@ const _rawProductsStandardSeedData = [
193
217
  availableQuantity: 12,
194
218
  isSold: false,
195
219
  mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-1-20260101/900/900"),
196
- images: [seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-1-20260101/900/900")],
220
+ images: [
221
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-1-20260101/900/900"),
222
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-2-20260101/900/900"),
223
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-wizard-arrow-3-20260101/900/900"),
224
+ ],
197
225
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
198
226
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
199
227
  featured: true,
@@ -218,7 +246,11 @@ const _rawProductsStandardSeedData = [
218
246
  availableQuantity: 7,
219
247
  isSold: false,
220
248
  mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-1-20260101/900/900"),
221
- images: [seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-1-20260101/900/900")],
249
+ images: [
250
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-1-20260101/900/900"),
251
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-2-20260101/900/900"),
252
+ seedExtMedia("https://picsum.photos/seed/product-image-beyblade-x-knife-shinobi-3-20260101/900/900"),
253
+ ],
222
254
  status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
223
255
  condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
224
256
  storeId: "store-beyblade-arena",
@@ -1,8 +1,8 @@
1
1
  /*
2
- * WHY: Seeds product reviews from buyers across all collectible categories on the marketplace.
3
- * WHAT: Exports 65 reviews spread across multiple stores and product types (trading cards, figures,
4
- * diecast, beyblades, model kits). Ratings 3–5 stars, mix of verified/unverified. Seller
5
- * responses on ~16 reviews. Images on ~11 reviews.
2
+ * WHY: Seeds product reviews from buyers across the Beyblade catalog on the marketplace.
3
+ * WHAT: Exports 65 reviews spread across the 14 real Beyblade products. Ratings 3–5 stars, mix
4
+ * of verified/unverified. Seller responses on ~16 reviews. Images (1-3, seedExtMedia
5
+ * picsum) on ~11 reviews; a video (raw external mp4 + seedExtMedia thumbnail) on 5 reviews.
6
6
  *
7
7
  * EXPORTS:
8
8
  * reviewsSeedData — Array of 65 review documents
@@ -14,8 +14,13 @@
14
14
  * @tag consumers:seed/index.ts,seed/runner.ts
15
15
  * @tag sideEffects:none
16
16
  */
17
+ import { seedExtMedia } from "./_helpers/media";
17
18
  const NOW = new Date();
18
19
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
20
+ // Public, direct-playable sample MP4 — review.video.url renders through a raw
21
+ // <video src> element (ReviewDetailShell.tsx), NOT the /api/media/ext image
22
+ // proxy, so it must stay an unwrapped external URL (never seedExtMedia()).
23
+ const SAMPLE_VIDEO_URL = "https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"; // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
19
24
  const reviewTemplates = [
20
25
  { title: "Excellent quality and fast shipping!", comment: "Received exactly as described. Item is in perfect condition. Will buy again!", rating: 5 },
21
26
  { title: "Good condition, minor wear", comment: "Arrived safely but has slight edge wear. Still happy with the purchase overall.", rating: 4 },
@@ -49,26 +54,27 @@ const sellerReplies = [
49
54
  "We appreciate the honest feedback. We'll look into the packaging issue.",
50
55
  ];
51
56
  const products = [
52
- { id: "product-dark-magician-lob-1st", title: "Dark Magician LOB 1st Edition", store: "store-letitrip-official" },
53
- { id: "product-blue-eyes-white-dragon-sdk", title: "Blue-Eyes White Dragon SDK", store: "store-letitrip-official" },
54
- { id: "product-lob-booster-pack", title: "Legend of Blue Eyes Booster Pack", store: "store-letitrip-official" },
55
- { id: "product-kaiba-starter-deck", title: "Kaiba Starter Deck", store: "store-letitrip-official" },
56
- { id: "product-duelist-kingdom-playmat", title: "Duelist Kingdom Playmat", store: "store-letitrip-official" },
57
- { id: "product-topper-tin-2004", title: "2004 Collector Tin Topper", store: "store-letitrip-official" },
58
- { id: "product-dark-magician-figure", title: "Dark Magician Figure", store: "store-letitrip-official" },
59
- { id: "product-exodia-art-print", title: "Exodia Art Print", store: "store-letitrip-official" },
60
- { id: "product-millennium-puzzle-model", title: "Millennium Puzzle Model", store: "store-letitrip-official" },
61
- { id: "product-duel-disk-replica", title: "Duel Disk Replica", store: "store-kaiba-corp-cards" },
62
- { id: "product-cyber-dragon-dp1", title: "Cyber Dragon DP1", store: "store-kaiba-corp-cards" },
63
- { id: "product-mirror-force-mrd", title: "Mirror Force MRD", store: "store-kaiba-corp-cards" },
64
- { id: "product-pot-of-greed-lob", title: "Pot of Greed LOB", store: "store-kaiba-corp-cards" },
65
- { id: "product-monster-reborn-lob", title: "Monster Reborn LOB", store: "store-kaiba-corp-cards" },
66
- { id: "product-kaiba-figure-15cm", title: "Kaiba 15cm Figure", store: "store-kaiba-corp-cards" },
57
+ { id: "auction-beyblade-original-dragoon-storm", title: "Beyblade Original Dragoon Storm", store: "store-beyblade-arena" },
58
+ { id: "auction-beyblade-metal-lightning-l-drago", title: "Beyblade Metal Lightning L-Drago", store: "store-beyblade-arena" },
59
+ { id: "classified-beyblade-stadium-set", title: "Beyblade Stadium Set", store: "store-beyblade-arena" },
60
+ { id: "digitalcode-beyblade-x-app-unlock", title: "Beyblade X App Unlock Code", store: "store-beyblade-arena" },
61
+ { id: "preorder-beyblade-x-bx-08-wave", title: "Beyblade X BX-08 Wave", store: "store-beyblade-arena" },
62
+ { id: "prizedraw-beyblade-mystery-box", title: "Beyblade Mystery Box", store: "store-letitrip-official" },
63
+ { id: "product-beyblade-original-dranzer-s", title: "Beyblade Original Dranzer S", store: "store-beyblade-arena" },
64
+ { id: "product-beyblade-original-driger-v", title: "Beyblade Original Driger V", store: "store-beyblade-arena" },
65
+ { id: "product-beyblade-metal-storm-pegasus", title: "Beyblade Metal Storm Pegasus", store: "store-beyblade-arena" },
66
+ { id: "product-beyblade-metal-flame-sagittario", title: "Beyblade Metal Flame Sagittario", store: "store-beyblade-arena" },
67
+ { id: "product-beyblade-burst-valkyrie", title: "Beyblade Burst Valkyrie", store: "store-beyblade-arena" },
68
+ { id: "product-beyblade-burst-regalia-genesis", title: "Beyblade Burst Regalia Genesis", store: "store-beyblade-arena" },
69
+ { id: "product-beyblade-x-wizard-arrow", title: "Beyblade X Wizard Arrow", store: "store-beyblade-arena" },
70
+ { id: "product-beyblade-x-knife-shinobi", title: "Beyblade X Knife Shinobi", store: "store-beyblade-arena" },
67
71
  ];
68
72
  const buyers = [
69
- { id: "user-yugi-muto", name: "Yugi Muto" },
70
- { id: "user-admin-letitrip", name: "LetItRip Admin" },
71
- { id: "user-seto-kaiba", name: "Seto Kaiba" },
73
+ { id: "user-yugi-muto", name: "Mock User 3" },
74
+ { id: "user-admin-letitrip", name: "Mock User 1" },
75
+ { id: "user-seto-kaiba", name: "Mock User 2" },
76
+ { id: "user-meera-bey", name: "Mock User 11" },
77
+ { id: "user-rohit-collector", name: "Mock User 14" },
72
78
  ];
73
79
  const _rawReviewsSeedData = [];
74
80
  for (let i = 0; i < 65; i++) {
@@ -77,7 +83,11 @@ for (let i = 0; i < 65; i++) {
77
83
  const buyer = buyers[i % buyers.length];
78
84
  const daysAgoCreated = 90 - i;
79
85
  const hasSellerReply = i % 4 === 0;
86
+ // ~17% of reviews ("detailed" ones) carry buyer-submitted photos.
80
87
  const hasImage = i % 6 === 0;
88
+ const imageCount = (i % 3) + 1;
89
+ // A smaller handful (5 of 65) also carry an unboxing/battle-test video.
90
+ const hasVideo = i % 13 === 0;
81
91
  _rawReviewsSeedData.push({
82
92
  id: `review-${i + 1}`,
83
93
  productId: product.id,
@@ -88,8 +98,17 @@ for (let i = 0; i < 65; i++) {
88
98
  rating: template.rating,
89
99
  title: template.title,
90
100
  comment: template.comment,
91
- images: hasImage ? [`/media/review-image-${product.id.replace("product-", "")}-1-20260508.jpg`] : [],
101
+ images: hasImage
102
+ ? Array.from({ length: imageCount }, (_, n) => seedExtMedia(`https://picsum.photos/seed/review-image-${product.id}-${i + 1}-${n + 1}/800/800`))
103
+ : [],
92
104
  hasImages: hasImage,
105
+ video: hasVideo
106
+ ? {
107
+ url: SAMPLE_VIDEO_URL,
108
+ thumbnailUrl: seedExtMedia(`https://picsum.photos/seed/review-video-thumb-${product.id}-${i + 1}/800/450`),
109
+ duration: 18 + (i % 5) * 6,
110
+ }
111
+ : undefined,
93
112
  verified: i % 3 !== 2,
94
113
  status: "approved",
95
114
  helpfulCount: Math.floor(Math.random() * 20),
@@ -1,6 +1,6 @@
1
1
  /*
2
- * WHY: Seeds scammer profiles for YGO marketplace — 3 profiles covering the full status workflow.
3
- * WHAT: 1 verified, 1 pending_review, 1 rejected. Fictional YGO-related scam scenarios.
2
+ * WHY: Seeds scammer profiles for the collectibles marketplace — 3 profiles covering the full status workflow.
3
+ * WHAT: 1 verified, 1 pending_review, 1 rejected. Fictional Beyblade-related scam scenarios.
4
4
  *
5
5
  * EXPORTS:
6
6
  * scammersSeedData — Array of Partial<ScammerDocument> for seed runner
@@ -21,20 +21,20 @@ export const scammersSeedData = [
21
21
  {
22
22
  id: "scammer-fake-lob-seller",
23
23
  seoSlug: "scammer-fake-lob-seller",
24
- displayNames: ["YGO_King_India", "LOB Cards Official"],
24
+ displayNames: ["Bey_King_India", "Rare Blades Official"],
25
25
  phones: ["9876543210", "8765432109"],
26
- upiIds: ["9876543210@paytm", "ygokingcards@okicici"],
27
- emails: ["ygokingcards.fake@gmail.com"],
26
+ upiIds: ["9876543210@paytm", "beykingblades@okicici"],
27
+ emails: ["beykingblades.fake@gmail.com"],
28
28
  socialMedia: [
29
- { platform: "instagram", handle: "ygo_king_india_official", url: "https://instagram.com/ygo_king_india_official" },
29
+ { platform: "instagram", handle: "bey_king_india_official", url: "https://instagram.com/bey_king_india_official" },
30
30
  { platform: "whatsapp", handle: "9876543210" },
31
31
  ],
32
32
  scamType: "advance_payment_ghost",
33
33
  scamPlatform: "whatsapp",
34
- description: "Seller listed a Blue-Eyes White Dragon LOB 1st Edition PSA 9 on a Facebook group for ₹25,000 — significantly below market. When I messaged, he asked for ₹5,000 advance to 'hold' the card before shipping. After I paid via UPI (9876543210@paytm), he went silent. The account name on UPI matched 'YGO King'. Later found 2 more people in the same group who had the same experience with the same UPI ID.",
35
- amountLost: 5000,
36
- itemInvolved: "Blue-Eyes White Dragon LOB 1st Edition PSA 9 (Yu-Gi-Oh!)",
37
- evidence: [seedExtMedia("https://picsum.photos/seed/scammer-evidence-ygoking-chat-screenshot-20260402/800/600")],
34
+ description: "Seller listed an original-series Dranzer S sealed launcher set on a Facebook group for ₹2,500 — significantly below market. When I messaged, he asked for ₹500 advance to 'hold' the set before shipping. After I paid via UPI (9876543210@paytm), he went silent. The account name on UPI matched 'Bey King'. Later found 2 more people in the same group who had the same experience with the same UPI ID.",
35
+ amountLost: 500,
36
+ itemInvolved: "Beyblade Original Dranzer S Sealed Launcher Set",
37
+ evidence: [seedExtMedia("https://picsum.photos/seed/scammer-evidence-beyking-chat-screenshot-20260402/800/600")],
38
38
  reportedBy: "user-yugi-muto",
39
39
  reportedByAnon: false,
40
40
  status: SCAMMER_FIELDS.STATUS_VALUES.VERIFIED,
@@ -54,21 +54,21 @@ export const scammersSeedData = [
54
54
  },
55
55
  // ── 2. Pending review — fake pre-order listing ────────────────────────────────
56
56
  {
57
- id: "scammer-fake-konami-preorder",
58
- seoSlug: "scammer-fake-konami-preorder",
59
- displayNames: ["Konami_Agent_India", "KA India Cards"],
57
+ id: "scammer-fake-takara-tomy-preorder",
58
+ seoSlug: "scammer-fake-takara-tomy-preorder",
59
+ displayNames: ["TakaraTomy_Agent_India", "TT India Blades"],
60
60
  phones: ["7654321098"],
61
- upiIds: ["konamiagentindia@ybl"],
62
- emails: ["konami.agent.india@gmail.com"],
61
+ upiIds: ["takaratomyagentindia@ybl"],
62
+ emails: ["takaratomy.agent.india@gmail.com"],
63
63
  socialMedia: [
64
- { platform: "instagram", handle: "konami_agent_india_official" },
65
- { platform: "telegram", handle: "konami_agent_india" },
64
+ { platform: "instagram", handle: "takaratomy_agent_india_official" },
65
+ { platform: "telegram", handle: "takaratomy_agent_india" },
66
66
  ],
67
67
  scamType: "fake_preorder_listing",
68
68
  scamPlatform: "instagram",
69
- description: "Account posed as an authorized pre-order agent for the upcoming Konami 25th Anniversary Ultimate Collection booster box. Collected ₹4,500 from me for a 'guaranteed allocation slot' via UPI. Instagram profile had ~4,000 followers (likely bought) and fake order screenshots. After payment, the account blocked me. Similar reports found on Reddit r/YuGiOhIndia.",
70
- amountLost: 4500,
71
- itemInvolved: "Konami 25th Anniversary Ultimate Collection (fake pre-order)",
69
+ description: "Account posed as an authorized pre-order agent for the upcoming Beyblade X BX-08 wave. Collected ₹800 from me for a 'guaranteed allocation slot' via UPI. Instagram profile had ~4,000 followers (likely bought) and fake order screenshots. After payment, the account blocked me. Similar reports found on Reddit r/BeybladeIndia.",
70
+ amountLost: 800,
71
+ itemInvolved: "Beyblade X BX-08 Wave (fake pre-order)",
72
72
  evidence: [],
73
73
  reportedBy: "user-seto-kaiba",
74
74
  reportedByAnon: true,
@@ -95,9 +95,9 @@ export const scammersSeedData = [
95
95
  socialMedia: [],
96
96
  scamType: "empty_box_ship",
97
97
  scamPlatform: "olx",
98
- description: "Sold a sealed Duelist of the Roses booster box on OLX, buyer claims item never arrived but tracking shows delivered. Buyer opened a scam report. Seller provided courier tracking + photograph of sealed package at drop-off. Report rejected after review.",
98
+ description: "Sold a sealed Beyblade Burst Regalia Genesis on OLX, buyer claims item never arrived but tracking shows delivered. Buyer opened a scam report. Seller provided courier tracking + photograph of sealed package at drop-off. Report rejected after review.",
99
99
  amountLost: 0,
100
- itemInvolved: "Duelist of the Roses Booster Box (Yu-Gi-Oh!)",
100
+ itemInvolved: "Beyblade Burst Regalia Genesis Sealed",
101
101
  evidence: [],
102
102
  reportedBy: "user-yugi-muto",
103
103
  reportedByAnon: false,
@@ -1,5 +1,5 @@
1
1
  /*
2
- * WHY: Seeds user sessions for YGO marketplace — 3 users, mix of active/expired/revoked.
2
+ * WHY: Seeds user sessions for the Beyblade marketplace — 3 users, mix of active/expired/revoked.
3
3
  * WHAT: 5 sessions total (3 active, 1 expired, 1 revoked). Covers desktop + mobile, multi-device.
4
4
  *
5
5
  * EXPORTS:
@@ -38,7 +38,7 @@ export const sessionsSeedData = [
38
38
  expiresAt: daysAhead(25),
39
39
  isActive: true,
40
40
  },
41
- // Yugi — Chrome Android (active)
41
+ // Rehan — Chrome Android (active)
42
42
  {
43
43
  id: "session-yugi-chrome-android-001",
44
44
  userId: "user-yugi-muto",
@@ -49,13 +49,13 @@ export const sessionsSeedData = [
49
49
  device: "Mobile",
50
50
  ip: "203.0.113.10",
51
51
  },
52
- location: { country: _locale.countryName, city: "Domino City" },
52
+ location: { country: _locale.countryName, city: "Indore" },
53
53
  createdAt: daysAgo(3),
54
54
  lastActivity: daysAgo(0),
55
55
  expiresAt: daysAhead(27),
56
56
  isActive: true,
57
57
  },
58
- // Kaiba — Safari macOS (active)
58
+ // Vivaan — Safari macOS (active)
59
59
  {
60
60
  id: "session-kaiba-safari-mac-001",
61
61
  userId: "user-seto-kaiba",
@@ -66,13 +66,13 @@ export const sessionsSeedData = [
66
66
  device: "Desktop",
67
67
  ip: "203.0.113.20",
68
68
  },
69
- location: { country: _locale.countryName, city: "Domino City" },
69
+ location: { country: _locale.countryName, city: "Nagpur" },
70
70
  createdAt: daysAgo(2),
71
71
  lastActivity: daysAgo(0),
72
72
  expiresAt: daysAhead(28),
73
73
  isActive: true,
74
74
  },
75
- // Yugi — expired old session
75
+ // Rehan — expired old session
76
76
  {
77
77
  id: "session-yugi-expired-001",
78
78
  userId: "user-yugi-muto",
@@ -83,7 +83,7 @@ export const sessionsSeedData = [
83
83
  device: "Mobile",
84
84
  ip: "203.0.113.11",
85
85
  },
86
- location: { country: _locale.countryName, city: "Domino City" },
86
+ location: { country: _locale.countryName, city: "Indore" },
87
87
  createdAt: daysAgo(40),
88
88
  lastActivity: daysAgo(36),
89
89
  expiresAt: daysAgo(35),
@@ -87,20 +87,20 @@ const rawLots = [
87
87
  { id: "lot-beyblade-02", shipmentId: rawShipments[3].id, lotName: "Launchers + stadiums", supplierOrderRef: "BA-3302", weightGrams: 2200, purchaseCost: 25000 },
88
88
  ];
89
89
  const rawItems = [
90
- { id: "item-tokyo-01a", lotId: "lot-tokyo-01", shipmentId: rawShipments[0].id, title: "Base Set Booster Box (Japanese)", quantity: 6, isForSelfUse: false, price: 9500000 },
90
+ { id: "item-tokyo-01a", lotId: "lot-tokyo-01", shipmentId: rawShipments[0].id, title: "Base Set Booster Box (Japanese)", quantity: 6, isForSelfUse: false, price: 95000 },
91
91
  { id: "item-tokyo-02a", lotId: "lot-tokyo-02", shipmentId: rawShipments[0].id, title: "Charizard Base Set PSA 9", quantity: 1, isForSelfUse: true },
92
- { id: "item-vault-01a", lotId: "lot-vault-01", shipmentId: rawShipments[1].id, title: "Redline Custom Camaro", quantity: 4, isForSelfUse: false, price: 1800000 },
93
- { id: "item-vault-01b", lotId: "lot-vault-01", shipmentId: rawShipments[1].id, title: "Redline Python", quantity: 3, isForSelfUse: false, price: 2200000 },
94
- { id: "item-vault-02a", lotId: "lot-vault-02", shipmentId: rawShipments[1].id, title: "Matchbox Superfast Truck (sample)", quantity: 2, isForSelfUse: false, price: 650000 },
95
- { id: "item-gundam-01a", lotId: "lot-gundam-01", shipmentId: rawShipments[2].id, title: "MG RX-78-2 Gundam Ver 3.0", quantity: 8, isForSelfUse: false, price: 2100000 },
92
+ { id: "item-vault-01a", lotId: "lot-vault-01", shipmentId: rawShipments[1].id, title: "Redline Custom Camaro", quantity: 4, isForSelfUse: false, price: 18000 },
93
+ { id: "item-vault-01b", lotId: "lot-vault-01", shipmentId: rawShipments[1].id, title: "Redline Python", quantity: 3, isForSelfUse: false, price: 22000 },
94
+ { id: "item-vault-02a", lotId: "lot-vault-02", shipmentId: rawShipments[1].id, title: "Matchbox Superfast Truck (sample)", quantity: 2, isForSelfUse: false, price: 6500 },
95
+ { id: "item-gundam-01a", lotId: "lot-gundam-01", shipmentId: rawShipments[2].id, title: "MG RX-78-2 Gundam Ver 3.0", quantity: 8, isForSelfUse: false, price: 21000 },
96
96
  {
97
- id: "item-gundam-01b", lotId: "lot-gundam-01", shipmentId: rawShipments[2].id, title: "MG Sazabi Ver Ka", quantity: 5, isForSelfUse: false, price: 2800000,
97
+ id: "item-gundam-01b", lotId: "lot-gundam-01", shipmentId: rawShipments[2].id, title: "MG Sazabi Ver Ka", quantity: 5, isForSelfUse: false, price: 28000,
98
98
  linkedProductId: "product-gundam-mg-sazabi-ver-ka", linkedProductSlug: "product-gundam-mg-sazabi-ver-ka", linkedProductListingType: "standard",
99
99
  },
100
- { id: "item-gundam-02a", lotId: "lot-gundam-02", shipmentId: rawShipments[2].id, title: "HG Gunpla assorted mecha", quantity: 20, isForSelfUse: false, price: 350000 },
101
- { id: "item-beyblade-01a", lotId: "lot-beyblade-01", shipmentId: rawShipments[3].id, title: "Beyblade Burst Turbo Achilles", quantity: 15, isForSelfUse: false, price: 550000 },
102
- { id: "item-beyblade-01b", lotId: "lot-beyblade-01", shipmentId: rawShipments[3].id, title: "Beyblade Burst Genesis Valtryek", quantity: 12, isForSelfUse: false, price: 600000 },
103
- { id: "item-beyblade-02a", lotId: "lot-beyblade-02", shipmentId: rawShipments[3].id, title: "Beystadium Extreme", quantity: 6, isForSelfUse: false, price: 480000 },
100
+ { id: "item-gundam-02a", lotId: "lot-gundam-02", shipmentId: rawShipments[2].id, title: "HG Gunpla assorted mecha", quantity: 20, isForSelfUse: false, price: 3500 },
101
+ { id: "item-beyblade-01a", lotId: "lot-beyblade-01", shipmentId: rawShipments[3].id, title: "Beyblade Burst Turbo Achilles", quantity: 15, isForSelfUse: false, price: 5500 },
102
+ { id: "item-beyblade-01b", lotId: "lot-beyblade-01", shipmentId: rawShipments[3].id, title: "Beyblade Burst Genesis Valtryek", quantity: 12, isForSelfUse: false, price: 6000 },
103
+ { id: "item-beyblade-02a", lotId: "lot-beyblade-02", shipmentId: rawShipments[3].id, title: "Beystadium Extreme", quantity: 6, isForSelfUse: false, price: 4800 },
104
104
  ];
105
105
  function mainItemsRevenue(lotId) {
106
106
  return rawItems
@@ -65,6 +65,88 @@ export const siteSettingsSeedData = {
65
65
  alt: "LetItRip Logo",
66
66
  format: "svg",
67
67
  },
68
+ aboutContent: {
69
+ title: "Every collection has a story. Let It Rip.",
70
+ subtitle: "We built India's marketplace for people who chase the thrill of the find — action figures, trading cards, spinning tops, model kits, and everything in between.",
71
+ missionTitle: "Our Mission",
72
+ missionText: "Collectibles are more than objects — they're the Saturday-morning cartoons we grew up on, the cards we traded at recess, the tops we battled on the playground. LetItRip exists to give India's collectors a place built specifically for that obsession: verified sellers, live auctions that actually feel alive, pre-orders for the drops you can't miss, and an escrow-backed checkout so a rare find never turns into a rare regret. We're not trying to be everything to everyone — we're trying to be the best place on the internet to buy, sell, and obsess over the things you collect.",
73
+ howItWorksTitle: "How It Works",
74
+ howItems: [
75
+ {
76
+ title: "Browse & Discover",
77
+ text: "Search thousands of listings across action figures, trading cards, spinning tops, model kits, and vintage rarities — filtered by category, brand, condition, and price so you find exactly what you're hunting for.",
78
+ icon: "🛒",
79
+ tone: "indigo",
80
+ },
81
+ {
82
+ title: "Sell With Confidence",
83
+ text: "Open a store in minutes, list with our SEO-friendly slugging and media tools, and get paid through escrow-protected orders — no chasing buyers, no guessing games.",
84
+ icon: "🏪",
85
+ tone: "teal",
86
+ },
87
+ {
88
+ title: "Bid, Win, Rip",
89
+ text: "Live auctions with real-time bidding, transparent history, and instant outbid alerts. When the gavel falls, checkout and shipping are already lined up.",
90
+ icon: "⚡",
91
+ tone: "amber",
92
+ },
93
+ ],
94
+ valuesTitle: "Our Values",
95
+ valueItems: [
96
+ {
97
+ title: "Trust First",
98
+ text: "Every seller is verified, every payment is escrow-protected, and every listing is held to the same authenticity bar we'd want as buyers ourselves.",
99
+ icon: "🛡️",
100
+ },
101
+ {
102
+ title: "Built By Collectors",
103
+ text: "We're not a generic marketplace with a collectibles tab bolted on — every feature, from grading fields to condition tags, exists because a real collector asked for it.",
104
+ icon: "🤝",
105
+ },
106
+ {
107
+ title: "Move Fast, Ship Fast",
108
+ text: "Rare drops don't wait, and neither do we — from pre-order alerts to 3-7 day delivery, we optimise for the moment you finally get to unbox it.",
109
+ icon: "🚀",
110
+ },
111
+ ],
112
+ milestonesTitle: "Our Journey",
113
+ milestones: [
114
+ { year: "2024", text: "LetItRip started as a weekend project — a single developer, a spinning-top collection outgrowing its shelf, and a conviction that India's collectors deserved a marketplace built just for them." },
115
+ { year: "2025", text: "Live auctions, seller storefronts, and escrow-backed checkout shipped — turning a side project into a real marketplace with verified sellers across action figures, trading cards, and model kits." },
116
+ { year: "2026", text: "Pre-orders, events, raffles, and a mobile-first redesign — built for the community that showed up, bid, sold, and kept coming back." },
117
+ ],
118
+ teamTitle: "Who's Behind LetItRip",
119
+ teamSubtitle: "A small team obsessed with the same thing you are — the hunt for the next piece of the collection.",
120
+ teamMembers: [
121
+ {
122
+ name: "Arjun Verma",
123
+ role: "Founder & Developer",
124
+ bio: "Started LetItRip after one too many afternoons hunting for a specific 1st-edition card across a dozen disconnected forums and marketplaces. Built the entire platform — Next.js front end, Firebase backend, the auction engine, the whole thing — the same way most great collections start: one late night at a time. Still personally answers the support inbox.",
125
+ photoUrl: seedExtMedia("https://picsum.photos/seed/letitrip-team-arjun-verma-20260819/400/400"),
126
+ isFounder: true,
127
+ isDeveloper: true,
128
+ },
129
+ {
130
+ name: "Ananya Rao",
131
+ role: "Community & Trust",
132
+ bio: "Keeps the marketplace honest — seller verification, dispute resolution, and the reason LetItRip's escrow system actually works the way it's supposed to. Collects vintage diecast when she isn't reviewing seller applications.",
133
+ photoUrl: seedExtMedia("https://picsum.photos/seed/letitrip-team-ananya-rao-20260819/400/400"),
134
+ isFounder: false,
135
+ isDeveloper: false,
136
+ },
137
+ {
138
+ name: "Devansh Mehta",
139
+ role: "Seller Success",
140
+ bio: "Helps new stores go from zero listings to their first sale — onboarding, storefront setup, and the occasional 2 a.m. \"why isn't my auction showing up\" message. Runs a Beyblade collection that has outgrown two apartments.",
141
+ photoUrl: seedExtMedia("https://picsum.photos/seed/letitrip-team-devansh-mehta-20260819/400/400"),
142
+ isFounder: false,
143
+ isDeveloper: false,
144
+ },
145
+ ],
146
+ ctaTitle: "Ready to Let It Rip?",
147
+ ctaSell: "Start selling in minutes",
148
+ ctaShop: "Browse the marketplace",
149
+ },
68
150
  background: {
69
151
  light: {
70
152
  type: "gradient",
@@ -369,6 +451,13 @@ export const siteSettingsSeedData = {
369
451
  codDepositPercent: 10,
370
452
  codHandlingFeeMin: 200,
371
453
  codHandlingFeePercent: 10,
454
+ whatsappNotifyFeeEnabled: false,
455
+ whatsappNotifyFee: 10,
456
+ giftWrapFeeEnabled: false,
457
+ giftWrapFee: 49,
458
+ shipmentProtectionFeeEnabled: false,
459
+ shipmentProtectionFeePercent: 2,
460
+ shipmentProtectionFeeMin: 30,
372
461
  sellerShippingFixed: 0,
373
462
  platformShippingPercent: 0,
374
463
  platformShippingFixedMin: 0,
@@ -24,7 +24,7 @@ export const storeAddressesSeedData = [
24
24
  id: "saddr-letitrip-hq-001",
25
25
  storeSlug: "store-letitrip-official",
26
26
  label: "LetItRip HQ",
27
- fullName: "LetItRip Admin",
27
+ fullName: "Mock User 1",
28
28
  phone: `${_phonePrefix}9876500000`,
29
29
  addressLine1: "12, Collector's Lane, Okhla Phase III",
30
30
  addressLine2: "Tech City Industrial Area",
@@ -41,7 +41,7 @@ export const storeAddressesSeedData = [
41
41
  id: "saddr-letitrip-warehouse-002",
42
42
  storeSlug: "store-letitrip-official",
43
43
  label: "Fulfilment Warehouse",
44
- fullName: "LetItRip Admin",
44
+ fullName: "Mock User 1",
45
45
  phone: `${_phonePrefix}9876500000`,
46
46
  addressLine1: "Unit 7B, Connaught Logistics Park, Lajpat Nagar",
47
47
  city: "Delhi",