vamos a crear una nueva plataforma, muy simple diría yo, pero quiero hacer un sitio que ayude a las personas y obviamente usarlo para mi: El sitio constará al menos por ahora de estas features principales: -El nombre de la plataforma es: "HandsOn" -La página estará alojada y será parte de otra de mis marcas: XMA™ Corporation, y estará alojada en handson.xmacorporation.com -Sitio landing, donde las personas pueden entrar y ver qué hay en esta página, que será: -Plataforma para portafolio digital: --Creará páginas personalizadas por cada usuario que se registre, brindando la posibilidad de exponer su portafolio de la siguiente manera: handson.xmacorporation.com/nombredeusuario (el usuario podrá configurar si pone un nombre de usuario o un slug que quiera configurar) --El usuario podrá elegir si su portafolio es: ---Desarrollador / Developer: Muestra tus proyectos, repositorios y stack tecnológico. Ideal para programadores, ingenieros de software y entusiastas del código. ----Considera estas limitaciones técnicas: Hasta 12 proyectos (gratuito), Cada proyecto: título, descripción (500 chars), enlace externo (GitHub, demo, etc.), 1 imagen de preview (máx 500KB), Sección de skills/tecnologías (tags seleccionables) Link a GitHub/GitLab/LinkedIn ---Fotógrafo / Photographer: Exhibe tu mejor trabajo fotográfico organizado por categorías o sesiones. ----Considera estas limitaciones técnicas: Hasta 6 álbumes (de forma gratuita) (puede o no ponérsele contraseña), Cada álbum: hasta 25 fotos (máx 1.5MB c/u, redimensionadas a 1920px de ancho máximo en servidor sino servidor ajusta calidad), Título y descripción por álbum (300 chars) ---Diseñador Gráfico / Graphic Designer: Presenta tus diseños, branding, ilustraciones y piezas creativas. ----Considera estas limitaciones técnicas: Hasta 15 proyectos, Cada proyecto: hasta 5 imágenes (máx 800KB c/u sino servidor ajusta calidad), Título, descripción (400 chars) y categoría (logo, branding, editorial, social media, etc.) ---Arquitecto / Architect: Muestra tus proyectos arquitectónicos, renders y planos de forma profesional. ----Considera estas limitaciones técnicas: Hasta 10 proyectos, Cada proyecto: hasta 8 imágenes (máx 800KB c/u sino servidor ajusta calidad), Campos: nombre del proyecto, ubicación, año, tipo (residencial, comercial, institucional), descripción (500 chars) ---Videomaker / Audiovisual: Comparte tu reel y producciones audiovisuales sin saturar el servidor. ----Considera estas limitaciones técnicas: Hasta 12 proyectos, Cada proyecto: título, descripción (400 chars), enlace embebido (YouTube, Vimeo — no se alojan videos en servidor), 1 thumbnail personalizado por proyecto (máx 500KB sino servidor ajusta calidad) o auto-generado del embed, Categorías: comercial, documental, musical, cortometraje, reel ---Artista / Artist: Para artistas plásticos, ilustradores, tatuadores y cualquier creador visual. ----Considera estas limitaciones técnicas: Hasta 8 colecciones, Cada colección: hasta 10 obras (máx 700KB c/u sino servidor ajusta calidad), Cada obra: título, técnica/medio, año, dimensiones (opcional), descripción (300 chars), Campo "disponible para venta" (sí/no, sin pasarela, solo indicativo) ---Chef / Gastronomía: Presenta tus creaciones culinarias, menús y experiencias gastronómicas. ----Considera estas limitaciones técnicas: Hasta 10 colecciones (ej: postres, entradas, menú degustación), Cada colección: hasta 8 fotos (máx 600KB c/u sino servidor ajusta calidad), Cada plato: nombre, descripción corta (200 chars), tags (vegano, sin gluten, etc.) ---Marketing & Contenido / Content Creator: Ideal para community managers, copywriters, publicistas y creadores de contenido. ----Considera estas limitaciones técnicas: Hasta 12 proyectos/campañas, Cada proyecto: hasta 4 imágenes (máx 500KB c/u sino servidor ajusta calidad) + enlaces externos (posts, artículos, campañas), Métricas destacadas opcionales (ej: "alcance 50K", "engagement 8%") — texto libre, sin verificación, Categorías: redes sociales, copywriting, campañas, branding, email marketing ---Ingeniería & Construcción / Engineering: Para ingenieros civiles, contratistas, topógrafos y profesionales de obra. ----Considera estas limitaciones técnicas: Hasta 10 proyectos, Cada proyecto: hasta 6 fotos (máx 700KB c/u sino servidor ajusta calidad), Campos: nombre, ubicación, tipo de obra, rol desempeñado, año, descripción (500 chars), Ideal para mostrar avances tipo "antes y después" ---Educador & Consultor / Educator: Para profesores, coaches, speakers y consultores que quieren mostrar su trayectoria. ----Considera estas limitaciones técnicas: Hasta 10 items de portafolio (cursos, talleres, conferencias, publicaciones), Cada item: título, descripción (400 chars), 1 imagen (máx 500KB sino servidor ajusta calidad), enlace externo, Sección de certificaciones/logros (hasta 8, solo texto + imagen opcional de 300KB sino servidor ajusta calidad), Calendario de disponibilidad (texto simple, sin integración externa por ahora) **Restricciones globales aplicables a todos: -Almacenamiento máximo por usuario: 50MB (ajustable desde admin) -Todas las imágenes se comprimen y redimensionan en servidor al subirse (WebP preferido) -Bio general: máximo 800 caracteres -Foto de perfil: 1 imagen, máx 300KB -Links sociales: hasta 6 (seleccionables de lista predefinida: LinkedIn, GitHub, Instagram, Behance, X, sitio web) -Rate limit en uploads: máximo 20 archivos por hora --Desde el panel admin puedo liberar los límites para determinados usuarios (por ejemplo, yo) --La idea es brindar una solución a las personas que necesiten un espacio así y no cuenten con tiempo, recursos para poder hacerlo. -Sistema que ayude a hacer un buen CV: --El sistema genera CVs con formato achievement-based (orientado a logros), que es lo que valoran los reclutadores actuales: ---Máximo 2 páginas, orden cronológico inverso ---Sin gráficos de habilidades, sin diseños recargados — limpio y ATS-friendly ---Logros cuantificados, no descripción de tareas ---El sistema detecta frases relleno ("proactivo", "trabajo en equipo") y muestra advertencias suaves con sugerencias de mejora, sin bloquear --Estructura del formulario (wizard paso a paso) ---Datos personales: nombre, título profesional, email, teléfono, ciudad/país, LinkedIn, web, foto opcional (máx 200KB, resize a 300x300, WebP) ---Perfil profesional: resumen de 100-500 caracteres, tipo elevator pitch ---Experiencia laboral: hasta 5 experiencias, cada una con 2-4 logros (bullets). Los logros deben iniciar con verbo de acción (el sistema valida con lista mantenible de verbos en español e inglés) ---Educación: hasta 3 entradas con grado, institución, años, logro destacado opcional ---Habilidades: técnicas (3-10) y blandas (0-5) como tags. Sin barras ni porcentajes ---Idiomas: hasta 5, con nivel (básico, intermedio, avanzado, nativo) ---Certificaciones: hasta 6, opcional. Nombre, institución, año, URL de verificación ---Proyectos destacados: hasta 4, opcional. Nombre, descripción, URL, rol ---Preview y descarga: renderizado en plantilla limpia, descarga PDF + JSON **Cada paso incluye instrucciones claras para el usuario, ejemplos de qué hacer y qué no hacer, y un panel colapsable con un prompt pre-armado que se autocompleta con los datos ya ingresados para que el usuario lo copie a su IA favorita. --Sistema de prompts sugeridos ---No es integración de IA. Son templates de texto almacenados en BD (editables desde admin sin deploy) con placeholders como {professional_title}, {company}, {target_position}. El frontend reemplaza los placeholders con datos del formulario y muestra un botón "Copiar". Cada paso del wizard tiene su prompt en español e inglés. Los prompts guían al usuario para obtener: títulos profesionales, resúmenes, logros cuantificados, y priorización de habilidades. --PDF: generación y expiración ---Generar con WeasyPrint desde template HTML/CSS. Una columna, una fuente, ATS-friendly, links clickeables. ---El PDF se almacena y está disponible para descarga por 48 horas, luego se borra del disco automáticamente. ---Un management command (cron cada 6 horas) limpia los PDFs expirados. ---El registro en BD se conserva 90 días como auditoría, luego se elimina. ---Rate limit: 5 generaciones/hora por usuario. Máx 3 PDFs activos simultáneos. ---El peso del PDF cuenta contra el límite de almacenamiento del usuario (50MB). --Micro sistema de import/export (CV Reader) Permite el ciclo: crear → descargar → meses después, reimportar → editar → regenerar. ---Export: al descargar, el usuario recibe PDF + archivo JSON (cv_data.handson.json) con toda la data estructurada. ---Import: el usuario sube el .handson.json, el sistema valida todos los campos con las mismas reglas del formulario, crea un CV nuevo en modo borrador con todo pre-llenado, y el usuario puede editar y regenerar. ---Límites: máx 3 CVs por usuario, archivo JSON máx 500KB, sanitización completa al importar. --Vista pública del CV ---URL: handson.xmacorporation.com/{username}/cv/{cv_slug} ---Solo visible si el usuario marcó el CV como público ---Vista read-only estilizada (misma plantilla que PDF adaptada a web) ---Botón de descarga PDF público con rate limit separado (10/hora por CV) ---Footer: "Built with HandsOn by XMA™ Corporation" ---Meta tags SEO con nombre y título profesional --Orden de implementación ---Modelos y migraciones ---Utilidades de sanitización y validación ---API CRUD (CV + todas las secciones) ---Generación de PDF + sistema de expiración ---Import/export JSON ---Detección de frases relleno + validación de verbos de acción ---API de prompt templates ---Vista pública --- — Backend completo. Recién ahí empezar frontend. — ---Frontend React: wizard, preview, prompt panel, gestión de PDFs, import/export, vista pública --Límites globales del usuario ---Máx 3 CVs por usuario ---Almacenamiento total: 50MB (fotos + PDFs activos) ---Configurable por usuario desde panel admin *Los features antes descritos serán modulares y podrán desarrollarse uno por uno *Asimismo, la plataforma funcionará de la siguiente manera: -Una página de login/registro que distribuya a los usuarios o bien para el panel admin o bien para panel usuario. -Un panel de control administrativo simple, donde se vean los usuarios registrados, cuánto ocupan de espacio (en MB) y qué features han usado (y cuántas veces) de las disponibles. Además, la opción para habilitar y deshabilitar usuarios y un checkbox (tipo slider) para deshabilitar temporalmente servicios. En este panel, puedo además, asignar un dominio personalizado a cada usuario, permitiendo que no aparezca bajo mi dominio handson.xmacorporation.com (si quieren ese servicio, deberán hacer una pequeña donación certificada) -Un botón siempre en la barra de navegación de "buy me a coffee", no tengo el link ahora, instrúyeme en cómo crearlo. -Qué gano yo si nadie me regala un café? Pon una barrita chiquita como footer que diga algo como: HandsOn by XMA™ Corporation y que tenga link a mi propia página de portafolio que será (desarrollo.xmacorporation.com), también estará hecha con esta plataforma. -Un panel de control de usuario, y aquí si nos detendremos un poco porque albergará todo lo que describimos arriba como features pero funcionalmente, es decir, no sólo será descrito, sino implementado. --Se desarrollará en orden, primero backend y sólo una vez terminado el backend, pasaremos al frontend conectando todo con el backend. --El stack será python django django ninja y react. *Dada la característica de este sitio y permitiendo insertar mucha información, te pido ser muy cuidadoso con el hardening de seguridad, es importante cuidar nuestros recursos informáticos y quiero proteger tanto como se pueda el sistema de inyecciones, exploits y demás riesgos que este sistema pueda significar. *Seguridad (no negociable) "Sanitizar TODO input: strip HTML (bleach), strip null bytes, normalizar unicode, trim Validar URLs: solo http/https, rechazar javascript:, data:, file: Fotos: validar MIME server-side, re-procesar con Pillow (strip EXIF), UUID como nombre de archivo UUIDs como primary keys (no secuenciales) Verificar ownership en cada endpoint (el CV pertenece al usuario autenticado) Rate limiting por usuario en todos los endpoints de escritura y generación Django ORM exclusivamente, cero raw SQL CORS restringido al dominio de la plataforma" Por último mencionar: Manten siempre el plan y el Claude.md actualizado, así como hacer commits constantes en local Creo que eso sería todo para empezar, preguntas?