The Bicyblex storefront displays two dedicated product sections on the homepage — bicycles (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/bicyblex/bicyblexStore/llms.txt
Use this file to discover all available pages before exploring further.
bikeProducts.jsx) and electric motos (electricMotos.jsx). Both sections pull their inventory live from the Supabase products table, filter by category, and render each item as a product card with specs and a direct WhatsApp purchase inquiry button. This architecture means the storefront always reflects the current state of the database: publish a product in the admin dashboard and it appears on the public site immediately.
Data Fetching
Both components follow the same data-fetching pattern: on mount, they query theproducts table using a join on the categories table, then filter the results by category name in the frontend.
Bicycle fetch (bikeProducts.jsx):
electricMotos.jsx):
specs.aro field stored in the product’s JSON specs column. When no products match the selected aro, the section renders a “Sin existencias” empty state.
Product Cards
Each product card surfaces the most important information at a glance: name, price (prefixed withS/), product image, a tag badge (e.g. "NUEVO" or "ELECTRICA"), and up to three spec fields from the product’s specs JSON column.
The call-to-action button at the bottom of every card opens a pre-filled WhatsApp chat using the productWhatsAppMessageUrl from GlobalContext, with the product name (and for bikes, the aro size) appended to the message:
WhatsApp URL Pattern
The base URL for all product inquiries comes fromGlobalContext:
Product Spec Fields by Category
Product specs are stored as a flexible JSON object in thespecs column of the products table. The fields vary by category:
| Category | Category Slug | Spec Fields Displayed |
|---|---|---|
| Bicicletas | bicicletas | aro, material, freno |
| Bicimotos Eléctricas | bicimotos-electricas | autonomia, potencia, velocidad |
| Kits Eléctricos | kits-electricos | descripcion |
| Accesorios | accesorios | Dato 1, Dato 2, Dato 3 |
aro field is also used by the storefront filter — it must be a numeric string matching one of the filter options ("12", "16", "20", "24", "26", "27.5", "29"). If aro is absent from the stored specs, the component defaults to "29".
For electric motos, the component reads specs.potencia as the primary motor field, with specs.motor as a fallback:
