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.