Gestor de Contactos

Aplicación web moderna desarrollada con Node.js y Express para gestión completa de contactos. Implementa CRUD completo, persistencia en archivos de texto y enfoque en UX/UI.

Node.js Express EJS UX/UI
Ver Código Volver a Proyectos

Interfaz de la Aplicación

Interfaz del Gestor de Contactos

Vista principal de la aplicación: Lista de contactos con colores personalizados, botones de acción (favorito, editar, eliminar) y diseño responsive optimizado para todos los dispositivos.

Objetivo del Reto Académico

Evaluación del Módulo Node.js

Objetivo General: Desarrollar una aplicación web utilizando Node.js y Express para gestionar contactos. La aplicación debe permitir agregar, editar, eliminar y listar contactos. Los datos deben almacenarse en archivos de texto plano, y la aplicación debe utilizar un motor de plantillas para renderizar vistas dinámicas.

Requisitos del Reto

Características Obligatorias
  • Servidor web básico con Express
  • Motor de plantillas para vistas dinámicas
  • Almacenamiento en archivos de texto plano
  • Rutas CRUD (Crear, Leer, Actualizar, Eliminar)
  • Gestión de dependencias con NPM
  • Manejo de errores y middleware
Mejoras Adicionales Implementadas
  • Enfoque pedagógico en UX/UI
  • Búsqueda en tiempo real
  • 15 colores pasteles personalizados
  • Accesibilidad completa (ARIA, teclado)
  • Diseño responsive y moderno
  • Documentación completa del proceso

Fases de Desarrollo

Siguiendo las 6 fases establecidas en el reto académico, cada una con objetivos específicos de aprendizaje

1
Configuración del Entorno

Objetivo: Configurar el entorno de desarrollo Node.js

  • npm init - Inicializar proyecto
  • npm install express - Framework web
  • npm install ejs - Motor de plantillas
  • • Configurar package.json
Aprendizaje: Gestión de dependencias y configuración de proyectos
2
Servidor y Rutas Básicas

Objetivo: Crear servidor Express con rutas CRUD

  • express.static() - Archivos estáticos
  • app.get() - Ruta principal
  • app.post() - Crear contactos
  • app.put() - Actualizar contactos
  • app.delete() - Eliminar contactos
Aprendizaje: Arquitectura REST y manejo de rutas
3
Persistencia en Archivos

Objetivo: Implementar almacenamiento en archivos de texto

  • fs.readFileSync() - Leer contactos
  • fs.writeFileSync() - Guardar contactos
  • • Manejo de errores con try-catch
  • • Formato JSON en archivos .txt
Aprendizaje: Persistencia de datos sin base de datos
4
Motor de Plantillas

Objetivo: Crear vistas dinámicas con EJS

  • <%= %> - Renderizar datos
  • <% %> - Lógica JavaScript
  • • Formularios dinámicos
  • • Rutas con parámetros /editar/:id
Aprendizaje: Separación de lógica y presentación
5
Manejo de Errores

Objetivo: Implementar manejo robusto de errores

  • • Middleware de errores 404/500
  • • Try-catch en operaciones de archivos
  • • Mensajes de error amigables
  • • Validación de datos de entrada
Aprendizaje: Debugging y manejo de excepciones
6
Código Limpio + UX/UI

Objetivo: Organizar código y mejorar experiencia

  • • Separación en archivos (routes/, views/)
  • • Comentarios y documentación
  • • Búsqueda en tiempo real
  • • Accesibilidad y responsive design
Aprendizaje: Buenas prácticas y UX/UI

Características Técnicas

Backend - Node.js

  • Servidor Express con rutas dinámicas
  • Motor de plantillas EJS para vistas
  • Persistencia en archivos de texto plano
  • Middleware para manejo de formularios
  • Manejo de errores 404 y 500
  • Archivos estáticos con express.static()

Frontend - UX/UI

  • Búsqueda en tiempo real con debouncing
  • 15 colores pasteles personalizados
  • Navegación por teclado completa
  • Gestos táctiles para móviles
  • Toast notifications elegantes
  • Diseño responsive y accesible

Código de Ejemplo

Servidor Express Principal

¿Qué hace este código?
Configura el servidor web principal de la aplicación. Establece Express como framework, configura el motor de plantillas EJS para renderizar vistas dinámicas, y define los middleware necesarios para manejar archivos estáticos y datos de formularios.

¿Para qué se usa?
Es el punto de entrada de la aplicación que permite crear un servidor web funcional, servir archivos estáticos (CSS, JS, imágenes), procesar formularios y enrutar las peticiones a las diferentes secciones de la aplicación.

Código del servidor Express principal
Gestión de Contactos

¿Qué hace este código?
Implementa las funciones de persistencia de datos para leer y escribir contactos en archivos de texto plano. Utiliza el módulo `fs` de Node.js para manejar operaciones de archivos de forma síncrona, con manejo de errores para casos donde el archivo no existe.

¿Para qué se usa?
Permite almacenar y recuperar la información de contactos de forma persistente. La función `leerContactos()` carga los datos al iniciar la aplicación, mientras que `guardarContactos()` actualiza el archivo cada vez que se agrega, edita o elimina un contacto.

Código de gestión de contactos

Mejoras de UX/UI Implementadas

Búsqueda en Tiempo Real

Búsqueda instantánea con debouncing para optimizar performance y resultados inmediatos.

Colores Personalizados

15 colores pasteles únicos para cada contacto, creando identidad visual.

Navegación por Teclado

Soporte completo para navegación por teclado con atajos y ARIA labels.

Experiencia Móvil

Gestos táctiles, diseño responsive y botones optimizados para touch.

Entregables del Reto Académico

Archivos Entregados

Todos los archivos requeridos fueron entregados según las especificaciones del reto

Archivos Obligatorios
  • JS
    app.js
    Servidor principal con código del servidor y rutas
  • TXT
    contactos.txt
    Archivo con contactos de ejemplo en formato JSON
  • EJS
    Archivos de vista (.ejs)
    index.ejs, formulario.ejs, error.ejs para mostrar y gestionar contactos
  • MD
    README.md
    Instrucciones completas para configurar y ejecutar la aplicación
Archivos Adicionales
  • JS
    routes/contactos.js
    Rutas organizadas en archivo separado (buena práctica)
  • JS
    data/contactosManager.js
    Lógica de gestión de contactos separada
  • CSS
    public/ (CSS, JS, imágenes)
    Archivos estáticos para mejorar la experiencia de usuario
  • EJS
    landing.ejs
    Página de inicio adicional con información del proyecto

Estructura del Proyecto

gestor-contactos/
├── app.js                 # Servidor principal (ENTREGABLE)
├── package.json           # Dependencias del proyecto
├── README.md             # Documentación completa (ENTREGABLE)
├── data/
│   ├── contactos.txt     # Base de datos de contactos (ENTREGABLE)
│   └── contactosManager.js # Lógica de gestión (EXTRA)
├── routes/
│   └── contactos.js      # Rutas de la API (EXTRA)
├── views/
│   ├── index.ejs         # Página principal (ENTREGABLE)
│   ├── formulario.ejs    # Formulario de contacto (ENTREGABLE)
│   ├── landing.ejs       # Página de inicio (EXTRA)
│   └── error.ejs         # Página de errores (ENTREGABLE)
└── public/
    ├── css/
    │   ├── style.css     # Estilos principales (EXTRA)
    │   └── landing.css   # Estilos de landing (EXTRA)
    ├── js/
    │   ├── app.js        # JavaScript principal (EXTRA)
    │   └── landing.js    # JavaScript de landing (EXTRA)
    └── images/
        └── contact.png   # Imagen por defecto (EXTRA)
Leyenda: (ENTREGABLE) = Archivo obligatorio del reto | (EXTRA) = Mejora adicional

Aprendizajes y Desafíos

Aprendizajes Adquiridos

  • Configuración completa de servidor Express
  • Uso de motores de plantillas EJS
  • Persistencia de datos en archivos de texto
  • Implementación de CRUD completo
  • Manejo de errores y middleware
  • Principios de UX/UI en aplicaciones web

Desafíos Superados

  • Configuración correcta del entorno Node.js
  • Implementación de persistencia con archivos
  • Manejo asíncrono de operaciones de archivos
  • Creación de vistas dinámicas con EJS
  • Implementación de búsqueda en tiempo real
  • Optimización de experiencia de usuario

Enlaces y Recursos