Doplax.Dev
← Volver a proyectos
LopezCars

Capacidades

  • Back office
  • Login sin contraseña
  • Imágenes en CDN
  • Email transaccional

Frontend

Next.jsNext.js
TypeScriptTypeScript
TailwindTailwind

Backend

PostgreSQLPostgreSQL
DrizzleDrizzle
CloudinaryCloudinary
ResendResend

LopezCars

Completado

López Cars es un concesionario de vehículos de ocasión en Carabanchel (Madrid) que vivía dentro de un CRM multi-tenant de terceros. Reconstruí su web completa como un proyecto Next.js 16 propio —catálogo, fichas de vehículo, colecciones, servicios, tasación y contacto— y le añadí un back office desde el que el cliente gestiona el 100% del contenido sin depender de nadie.

El reto

El cliente pagaba una plataforma que no controlaba: no podía tocar el diseño, ni exportar sus datos, ni añadir nada fuera de lo que el CRM permitía. El encargo era migrar sin perder posicionamiento ni contenido, replicando lo que ya funcionaba y dándole por fin la llave de su propia web.

Implementación

  • Migración desde un CRM de terceros

    Inventarié assets, textos y estructura del sitio antiguo antes de escribir código, para mantener paridad de páginas, URLs y tono, y no romper el SEO ya ganado durante el cambio.

  • Back office con Server Actions

    Panel de administración propio con vehículos y galerías, marcas, colecciones, contabilidad, leads, valoraciones, usuarios y ajustes del sitio. Todas las mutaciones son Server Actions de Next validadas con Zod, sin API REST intermedia.

  • Login sin contraseñas (Auth.js v5 + Resend)

    Acceso al admin por magic link enviado con Resend. El login rechaza cualquier email que no exista en la tabla de usuarios, así que dar de alta a alguien es simplemente invitarlo, y no hay contraseñas que filtrar.

  • Drizzle ORM sobre PostgreSQL

    Esquema tipado con Drizzle (vehículos, imágenes, marcas, transacciones, colecciones, leads, valoraciones, ajustes, auditoría) con migraciones versionadas y utilidades de snapshot e importación de la base de datos.

  • Imágenes en Cloudinary

    Las fotos de los vehículos se suben a Cloudinary con un upload preset dedicado y se sirven optimizadas con next-cloudinary, de modo que las fichas cargan rápido incluso con galerías largas.

  • Captación de leads end-to-end

    Los formularios de contacto y tasación gratuita usan React Hook Form + Zod, están protegidos con rate limiting, notifican por email al concesionario y aterrizan como registros gestionables en el panel.

  • Modo solo-lectura del despliegue

    Una variable de entorno (ADMIN_READONLY) congela el admin: la web pública y los formularios siguen vivos, pero cualquier mutación se ignora y se avisa con un banner. Pensado para que el sitio siga en pie si algún día el cliente migra de hosting.

  • Trazabilidad y SEO

    Registro de eventos de auditoría de las acciones del admin, y del lado público renderizado en servidor con metadatos, sitemap y robots generados por código.