Foo Rum

Una aplicación de foro desarrollada con Next.js, utilizada como prueba técnica para la empresa Atlys. Incluye una base de datos simulada en memoria con funciones de inicio de sesión y registro, así como pruebas unitarias. Nota: la base de datos se restablece a su estado inicial al recargar la página. Desarrollada con Next.js y TypeScript.

Captura de pantalla de Foo rum.

Foo Rum es una aplicación web tipo foro desarrollada como parte de un proceso de selección para Atlys. Construida con Next.js y TypeScript, demuestra un enfoque limpio y orientado a la producción para crear aplicaciones interactivas de múltiples páginas, utilizando herramientas modernas y garantizando una fuerte seguridad de tipos.

La aplicación incluye una base de datos simulada en memoria que gestiona la autenticación de usuarios, incluyendo los procesos de inicio de sesión y registro, así como el contenido del foro. Este enfoque mantiene el proyecto autónomo y con pocas dependencias, lo que facilita su ejecución y evaluación sin necesidad de configurar un servidor o base de datos externos.

Se incluye un conjunto de pruebas unitarias para validar la funcionalidad principal y demostrar el compromiso con la calidad del código. Es importante tener en cuenta una limitación conocida: debido a que la base de datos se almacena en memoria, todos los datos se restablecen a su estado inicial al recargar la página. Esto es un intercambio intencionado dentro del alcance de la tarea.

Acciones protegidas por autenticación sin un control de acceso.

No existe una página de inicio de sesión a la que se redirija al visitante. La publicación o reacción está integrada con `withAuthCheck`, una pequeña función de orden superior que toma la acción que realmente desea realizar (publicar esto, dar "me gusta" a eso) y la ejecuta solo si el visitante está autenticado; de lo contrario, abre el modal de autenticación en su lugar y deja la acción sin ejecutar. El estado global, como quién ha iniciado sesión o si el modal está abierto, se gestiona con un único contexto de React y una tienda `useReducer` (AppStateProvider), que es todo lo que necesita una aplicación de este tamaño; no se utiliza Redux ni Zustand para gestionar solo cuatro elementos de estado.

Una base de datos que, siendo sinceros, son simplemente dos arreglos.

db.ts contiene toda la parte del servidor: un array de usuarios y un array de publicaciones, definidos a nivel de módulo, y pre-cargados con dos cuentas de demostración y algunas publicaciones de texto "lorem ipsum". Las funciones login(), signup(), getAllPosts() y addPost() realizan operaciones básicas sobre estos datos iniciales; no utilizan ORM, ni esquema, ni llamadas a la red. Esta es precisamente la razón por la que la aplicación funciona sin ninguna configuración y también explica por qué una actualización de página la devuelve al estado inicial. Los componentes están divididos en átomos/moléculas/organismos, siguiendo la misma estructura de capas utilizada en el panel Task Tracker Dashboard.

demo login — github.com/jatinrao/foo-rumtext
email:    [email protected]
password: password123

db.test.ts cubre directamente ese backend simulado con Jest: el registro crea un usuario con un ID generado y una imagen de perfil provisional; el inicio de sesión devuelve al usuario correcto si las credenciales coinciden; tanto una contraseña incorrecta como una dirección de correo electrónico desconocida provocan errores; y un segundo par de registros/inicios de sesión confirma que el ID devuelto en el registro es el mismo ID que se encuentra más tarde durante el inicio de sesión: son cinco pruebas pequeñas y específicas, en lugar de una única prueba general.

Captura de pantalla de la vista de escritorio del foro.