Code Monkey home page Code Monkey logo

bemobile-marvel-challenge's Introduction

BeMobile Marvel Challenge

Marvel Bemobile Challenge Marvel Bemobile Challenge

Descripción

Este proyecto es una aplicación web creada con Next.js y TypeScript que utiliza la API de Marvel para mostrar información sobre personajes. La aplicación está optimizada para tiempos de carga y rendimiento, utilizando Cypress para pruebas end-to-end y Vitest para pruebas unitarias. La gestión del estado se realiza con useContext y useReducer, y el estilado se maneja con CSS puro. La aplicación está desplegada en Vercel.

Arquitectura y Estructura

Arquitectura

  • Next.js: Framework de React utilizado para el desarrollo del frontend y la gestión de server components y route handlers.
  • TypeScript: Lenguaje de programación utilizado para asegurar la calidad del código.
  • CSS puro: Para el estilado de la aplicación. Utilizando la metodología BEM y SMACSS.
  • useContext y useReducer: Para la gestión del estado de la aplicación.
  • API Folder: Para gestionar la carga de datos desde la API de Marvel, con optimización de la carga a través de la precarga de la homepage.

Estructura del Proyecto

  • test/: Contiene los tests de la aplicación, incluyendo pruebas unitarias y pruebas end-to-end.

  • pages/: Contiene las páginas de la aplicación, como /home, /favorites, y /heroes[id].

  • api/: Carpeta para gestionar las peticiones a la API y el manejo de datos mediante Server-Side Rendering (SSR). Incluye la implementación de una API propia para mejorar la carga de la aplicación.

  • components/: Componentes reutilizables de la aplicación. Incluye subcarpetas:

    • common/: Componentes comunes reutilizables en toda la aplicación.
    • layout/: Componentes relacionados con el diseño y la estructura de la página.
  • css/: Contiene archivos CSS siguiendo la metodología SMACSS para una mejor organización y modularidad. Subcarpetas:

    • /base/: Estilos básicos y globales.
    • /container-queries/: Consultas de contenedor para el diseño responsivo.
    • /layout/: Estilos relacionados con la estructura y diseño de la página.
    • /module/: Estilos para componentes modulares.
    • /pages/: Estilos específicos para cada página.
    • /state/: Estilos que reflejan el estado de los componentes.
    • /theme/: Estilos relacionados con la temática general de la aplicación.
  • utils/: Utilidades y funciones auxiliares. Subcarpetas:

    • /constants/: Constantes utilizadas en la aplicación.
    • /fetching/: Funciones y helpers para la gestión de peticiones y datos.
    • /interfaces/: Interfaces TypeScript para tipado.
  • context/: Contextos de React para la gestión del estado global y acciones para el reducer.

    • reducers/: Reducers para manejar la lógica del estado de la aplicación.

Instalación y Ejecución

  1. Clonar el repositorio:

    git clone https://github.com/Jose1i1o/bemobile-marvel-challenge.git
  2. Instalar dependencias:

    bun install
    pnpm install
    npm install
  3. Configurar variables de entorno

Crea un archivo .env.local en la raíz del proyecto con el siguiente contenido:

   NODE_ENV="development" o "production"
   MARVEL_API="https://gateway.marvel.com/v1/public/"
   MARVEL_API_PUBLIC_KEY="your marvel api public key"
   MARVEL_API_PRIVATE_KEY="your marvel api private key"
   PUBLIC_API="tu url de desarrollo o producción"
   MY_PUBLIC_VERCEL_URL="tu url de producción"
   API_TIMEOUT=500000
   DEFAULT_LIMIT="2" # recomendado para desarrollo; usa 10 para producción --> latencia elevada
  1. Scripts:

    # Para desarrollo
    bun run dev
    
    # Para testear build en local
    bun run build
    
    # Para inicio de build en local
    bun run start
    
    # Para pruebas unitarias (Vitest)
    bun run test
    
    # Para cobertura de pruebas (Vitest)
    bun run coverage
    
    # Para pruebas end-to-end (Cypress - Interfaz gráfica)
    bun run cy:open
    
    # Para pruebas end-to-end (Cypress - Ejecutar pruebas)
    bun run cy:run
    
    # Para analizar el tamaño del build
    ANALYZE=true bun run build
    

Despliegue

La aplicación está desplegada en Vercel en el siguiente enlace Vercel URL

Organización del Proyecto

El proyecto se gestionó a través de GitHub Projects y se dividió en 3 sprints. Puedes consultar los todos los detalles en el siguiente enlace

Kanban Github Projects

Futuras implementaciones

  • Implementación de notificaciones utilizando Sonner.
  • Expansión del conjunto de pruebas, ya que el tiempo no permitió una cobertura completa.
  • Autenticación de usuarios para mejorar la seguridad y personalización.
  • Almacenamiento de datos en una base de datos propia para mayor control y eficiencia.
  • Integración de SonarQube para la optimización de pruebas.
  • Soporte para múltiples idiomas.
  • Mejora de la interfaz de usuario para hacerla más accesible.
  • Integración con otros servicios de terceros para enriquecer la experiencia del usuario.

Lecciones Aprendidas

  • La capa gratuita de Vercel solo permite requests con un tiempo máximo de 10 segundos.
  • La API de Marvel tuvo problemas con tiempos de carga que alcanzaban hasta los 2 minutos para los comics o más de 30 segundos para algunos personajes. alta latencia Ej: Alta latencia

Error request Ej: Imposibilidad de ejecutar query para 50 personajes

  • La necesidad de optimizar la carga de la aplicación y la importancia de gestionar correctamente los tiempos de espera en las peticiones a la API.
  • La importancia de tener un buen manejo de estado y optimización en las peticiones de datos para mejorar la experiencia del usuario.

Recursos

bemobile-marvel-challenge's People

Contributors

jose1i1o avatar

Watchers

 avatar

bemobile-marvel-challenge's Issues

README.md

En el repositorio deberá existir un archivo nombrado README donde se explicará cómo ejecutar la
aplicación, la arquitectura y estructura de esta, así como toda la información relevante acerca del
proyecto.

Detail View

Al hacer clic en un resultado, se deberá de redirigir a la vista de detalle del personaje.

  • Un listado de los cómics del personaje ordenados por fecha de salida.
  • Solo se deberán mostrar los primeros 20 cómics de cada personaje.

View - Favoritos

  • Para la gestión de estado, usar ContextAPI de React.

Al hacer clic en el icono de favoritos en cada resultado, deberá cambiar de color y se deberá
añadir una unidad al contador de la zona superior, como se indica en los diseños. Debe de
existir la posibilidad de eliminar los personajes favoritos, modificando el contador. La
información de favoritos debe persistir entre las diferentes vistas.

  • Al hacer clic en el icono superior de favoritos, se deberán mostrar únicamente las tarjetas
    con los personajes favoritos almacenados por el usuario.

  • Para volver al listado de personajes de nuevo, se deberá hacer clic en el logotipo Marvel situado en la barra de navegación.

Limpiar consola

La consola del navegador debe de estar limpia de errores y advertencias.

View - Mobile

La vista debe contener:

  • Un icono con el logotipo.
  • Un icono que mostrará el número de personajes favoritos.
  • Una barra de búsqueda en la que se podrán buscar personajes por su nombre.
    (Ejemplo: Si se busca por “Spider” se deberían mostrar todos los nombres que
    contengan dicha palabra).
  • Un contador con los resultados obtenidos tras cada búsqueda que se actualiza en
    tiempo real.
  • Un listado de resultados, cada uno de los cuales contendrá la imagen, nombre del
    personaje y una opción para añadir el personaje a favoritos.

Accesibilidad SP3

Revisar accesibilidad páginas de favoritos y detalles de personaje

Set up - Modo desarrollo y modo producción

La aplicación deberá tener un modo desarrollo en el que se sirvan los assets sin minimizar (pueden
estar concatenados) y otro modo producción donde se deben servir los assets concatenados y
minimizados.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.