Skip to main content

Stack

CamellApp corre sobre un stack con varias versiones no obvias:

Por qué useTypeScriptCli

TypeScript 7 no expone el compiler API que Next.js usa por defecto. Por eso next.config.ts activa una bandera experimental:
No quites experimental.useTypeScriptCli de next.config.ts. Sin ella, Next.js no puede tipar el proyecto con TypeScript 7.

Flujo de una petición

A alto nivel, así encajan las piezas:
  • Next.js sirve tanto la UI como los route handlers de API (/api/*).
  • Prisma habla con MySQL/MariaDB.
  • NextAuth gestiona la sesión por cookie.
  • Los uploads (avatares y fotos de camellos) viven en public/uploads/.
  • Los trabajos (Job) siguen un ciclo propio: el cliente los solicita desde Explorar o desde /trabajos/nuevo, el admin asigna un camello y el camello acepta o rechaza. WhatsApp queda como coordinación secundaria una vez aceptado el trabajo.

Uploads

public/uploads/ está gitignored y no se sirve como estático en producción: Next.js solo indexa el contenido de public/ al arrancar, así que cualquier archivo escrito ahí en runtime queda invisible para el servidor de estáticos. Por eso las imágenes subidas en runtime se sirven a través de un route handler dedicado, src/app/uploads/[...path]/route.ts. Toda escritura y lectura de imágenes pasa por src/lib/upload-image.ts, que aplica las mismas reglas en ambos sentidos:
  • Subdirectorios permitidos: avatars y camellos.
  • Tamaño máximo: 2 MB.
  • Formatos aceptados: JPEG, PNG o WebP.
  • Los nombres de archivo se sanean antes de escribirlos a disco.