Portfolio

Portfolio profesional desarrollado con Next.js, React y TypeScript, diseñado con Tailwind CSS y una estética cyberpunk/futurista definida.

Este proyecto combina diseño visual sólido, animaciones controladas, integración 3D y backend real con Firebase, incluyendo sistema de notificaciones por correo en tiempo real.


Descripción General

Es una aplicación moderna lista para producción que demuestra:

El formulario de contacto:

Todo mediante entorno server-side seguro.


Stack Tecnológico

Frontend

Next.js PostCSS React Tailwind CSS TypeScript

Animación y Visual

Anime.js Three.js Swiper

Sonidos

Howler.js

Experiencia de Usuario

SweetAlert2

Backend

Firebase Resend Nodemailer Zod

Complementos

ESLint CoffeeScript SVGR

Despliegue

Vercel


Instalación Local

npm install
cp .env.example .env.local
npm run dev

Aplicación disponible en:

http://localhost:3000

Estructura relevante


Configuración de Firebase

1. Crear Proyecto

2. Generar cuenta de servicio

3. Variables de entorno

Configurar en .env.local y en Vercel:

FIREBASE_PROJECT_ID=
FIREBASE_CLIENT_EMAIL=
FIREBASE_PRIVATE_KEY=

Importante: La clave privada debe mantener los saltos de línea usando \n.


Configuración de Resend

1. ¿Qué es Resend?

Resend es un servicio moderno de envío de correos electrónicos transaccionales diseñado para aplicaciones web.

En este proyecto se utiliza para gestionar el envío de mensajes desde el formulario de contacto, permitiendo notificaciones inmediatas y confiables sin necesidad de configurar manualmente un servidor SMTP.

Esta arquitectura permite una comunicación robusta, escalable y alineada con prácticas modernas de desarrollo.

2. Creación de cuenta

3. Variable de entorno necesarias

Agregar en .env.local y en Vercel:

RESEND_API_KEY=

4. Funcionamiento dentro del proyecto

Cada envío del formulario ejecuta:

  1. Guardado seguro en Firestore.
  2. Email transaccional de notificación al administrador.

Todos los envíos se realizan desde el entorno server-side usando API Routes.


Configuración de Nodemailer

1. ¿Qué es Nodemailer?

Nodemailer es una librería de Node.js que permite enviar emails usando protocolos SMTP tradicionales. A diferencia de servicios API como Resend, Nodemailer permite conectarse directamente a proveedores de correo como Gmail, Outlook u otros servidores SMTP.

En este proyecto se utiliza Nodemailer para enviar el email automático de confirmación al usuario que completa el formulario de contacto.

Esta implementación permite el envío programático de correos electrónicos mediante SMTP, ofreciendo control total sobre la configuración y el proveedor de envío.

Su uso resulta adecuado para entornos donde se requiere personalización avanzada o integración con servidores propios.


2. Instalación

Agregar la dependencia al proyecto:

npm install nodemailer

3. Variables de entorno necesarias

Agregar en .env.local y en Vercel:

GMAIL_USER=tu_email@gmail.com
GMAIL_APP_PASSWORD=tu_app_password

Importante: La GMAIL_APP_PASSWORD es una contraseña de aplicación generada desde la cuenta de Google (requiere 2FA activado).


4. Configuración del transporter

Ejemplo en /src/lib/mailer.ts:

import nodemailer from "nodemailer";

export const transporter = nodemailer.createTransport({
  service: "gmail",
  auth: {
    user: process.env.GMAIL_USER,
    pass: process.env.GMAIL_APP_PASSWORD,
  },
});

5. Funcionamiento dentro del proyecto

El flujo completo del formulario es:

  1. Guardado seguro del mensaje en Firestore.
  2. Envío de notificación al administrador usando Resend.
  3. Envío de email automático de confirmación al usuario usando Nodemailer + Gmail SMTP.

6. ¿Por qué usar Resend + Nodemailer juntos?

Resend

Nodemailer + Gmail


7. Seguridad


8. Ejecución

Todo el envío de emails se ejecuta server-side mediante API Routes de Next.js, evitando exponer credenciales en el frontend.


Deploy en Vercel

  1. Subir el repositorio a GitHub.
  2. Importar proyecto en Vercel.
  3. Configurar variables de entorno:

    • Firebase
    • Resend
    • Nodemailer
  4. Deploy automático.

No requiere servidor adicional.


Flujo del sistema

  1. Usuario envía mensaje.
  2. Validación con Zod.
  3. Persistencia en Firestore.
  4. Notificación por email al administrador.
  5. Auto-respuesta automática al usuario.
  6. Confirmación visual mediante SweetAlert2.

Sistema completamente serverless.


Enfoque

Este portfolio prioriza:

La base permite incorporar:

Sin necesidad de reestructuración.