Dudas frecuentes
Preguntas frecuentes
Todo lo que suelen preguntarme sobre cómo está hecho y desplegado este portafolio.
¿No encuentras lo que buscas? Escríbeme directamente y te respondo.
Está construido con Django 5 y templates server-side para mantener la lógica simple y rápida de iterar. La UI usa Bootstrap 5.3 y Bootstrap Icons. En producción se sirve con Gunicorn y WhiteNoise, y se integra GA4/GTM para analítica.
El código vive en portfolio/apps con apps separadas (core, contact, faq, openapp, analytics). Las vistas usan templates y los assets viven en static. La configuración se divide en settings base/local/production, y urls centraliza el enrutamiento.
El Dockerfile instala dependencias, ejecuta collectstatic y levanta Gunicorn. El script start.sh corre migraciones. En Railway solo configuro variables de entorno y despliego el contenedor.
El formulario usa Django Forms con validaciones y anti-bot (honeypot + timestamp). Si RECAPTCHA_ENABLED=1, valida reCAPTCHA v2. Además, Django incluye protección CSRF por defecto.
En templates/base.html se inicializa el dataLayer y se disparan eventos personalizados. Si hay GTM se usa el contenedor, y si no hay, se hace fallback con gtag. La guía completa está en docs/analytics/README.md.
Los gadgets viven en el modelo OpenEntity y se asocian con Tag (ManyToMany). Se generan slugs y se filtra por is_published. En las vistas se usa prefetch_related para optimizar la carga.
El modelo Developer permite avatar subido, URL externa o fallback a UI-Avatars. Además, tracked_url agrega UTM automáticamente para medir clics en GA4.