Facundo Cornejo.
Volver a proyectos

Case study

Beast Motors — Catálogo de una concesionaria

Un catálogo que tiene que aparecer en Google y convertir por WhatsApp. El problema más interesante no fue el SEO: fue ordenar por precio un inventario con autos en dólares y motos en pesos.

Next.jsTypeScriptSupabaseCloudinaryTailwind CSS

Contexto

Beast Motors es una concesionaria de Paraná que vende autos usados, 0km, motos y vehículos importados. Me contrataron para hacerles el sitio, y la primera decisión fue de alcance: esto no es un e-commerce. Nadie compra un auto con un botón. Es un catálogo digital cuyo único objetivo es que suene el WhatsApp del vendedor.

Problema

Dos frentes. El primero, que los encuentren: una concesionaria de barrio compite en Google contra los portales grandes, así que el sitio tiene que estar impecable en datos estructurados y velocidad. El segundo, más silencioso: el inventario tiene precios en dos monedas al mismo tiempo. Un auto en US$ 16.000 y una moto en $ 1.680.000 conviven en la misma grilla, y el cliente espera poder ordenarlos de menor a mayor.

La trampa de las dos monedas

Ordenar por precio era, en apariencia, una cláusula de SQL. Con esa consulta, una moto de $1.680.000 salía "más cara" que un auto de US$16.000, porque se comparaban los números crudos. Y los vehículos que solo tenían precio en pesos, con el campo de dólares vacío, saltaban al tope del orden descendente por el manejo de los nulos. La solución no fue tocar la consulta sino sacar el orden de la base: se convierte todo a dólares efectivos y recién ahí se ordena. Lo que más me gustó de la solución es de dónde sale la cotización: no de una API externa que puede caerse, sino del propio inventario — la mediana entre los vehículos que tienen los dos precios cargados. El dato ya estaba ahí. La regla que me quedó: con precios en más de una moneda, nunca ordenar ni filtrar por la columna cruda.

Solución y decisiones técnicas

  • Next.js con renderizado en el servidor e ISR para las páginas públicas: el contenido llega ya armado al crawler, y el catálogo se revalida solo.
  • SEO como abstracción, no como parche. Mi primer plan editaba página por página para agregar canonical, Twitter cards y datos estructurados. Facu lo frenó con un "¿no hay una forma mejor?" y tenía razón: salió un helper único de metadata y un componente de JSON-LD que consumen todas las páginas. Menos código, y es imposible olvidarse un campo en una página futura.
  • Datos estructurados de Vehicle por unidad y de LocalBusiness en la portada, más sitemap automático.
  • WhatsApp como único canal de conversión: cada ficha arma el mensaje con modelo, precio y link de la página. Cero formularios de contacto, por pedido del cliente y porque nadie los completa.
  • Imágenes en Cloudinary con formato automático, para que negocie AVIF o WebP según el navegador en vez de hardcodear uno.
  • Sin funciones atadas al proveedor de hosting: el proyecto tiene planeada una mudanza a un VPS propio, así que todo corre en Node estándar. Es una restricción que me impuse desde el día uno para que la mudanza no sea una reescritura.
  • Panel de administración para una sola persona no técnica, pensado para usarse desde el celular.

Otras dos que me costaron

  • Las imágenes se servían a 750 px para mostrarse a 380. Marcarlas como prioritarias no alcanzó: en render dinámico el framework no siempre emite el preload, y hubo que ponerlo a mano en el servidor. Aprendizaje lateral: medir performance en modo desarrollo no sirve, el JavaScript sin minificar infla los números.
  • El login del admin devolvía credenciales inválidas con la contraseña correcta. La causa no estaba en el código: el usuario se había creado antes de desactivar la confirmación por email, y quedó sin confirmar. Cambiar la configuración de autenticación no actualiza a los usuarios que ya existen.

Mi rol

Freelance, de punta a punta: relevamiento con el dueño, diseño, desarrollo, panel de administración, SEO, deploy y el dominio propio. También el soporte posterior, que es donde salieron la mitad de los problemas de arriba.

Resultado

En producción, con dominio propio y 28 vehículos publicados. El catálogo filtra por tipo y marca, ordena bien en las dos monedas, y cada unidad tiene su ficha con financiación y su botón de WhatsApp.

En pantalla

Catalogo de Beast Motors con autos usados y sus precios