Chatterbox es una aplicación de mensajería en tiempo real construida con el próximo 13 y el empuje.
Puede crear un chat grupal o comenzar un DM. Los usuarios pueden enviar mensajes de texto o cargar múltiples videos o imágenes.
La interfaz de usuario se actualiza en tiempo real. Es decir, cuando otro usuario crea un canal, o cuando se envía un mensaje, verá instantáneamente la actualización.
Implementado en Vercel: https://chatterboxes.vercel.app/
Este proyecto utiliza el nuevo enrutador de aplicaciones Next.js 13, Componentes del servidor React, acciones del servidor, suspenso y cache()
de React 18
También utilizamos rutas API (implementadas como funciones sin servidor a Vercel) para acciones como registrar un nuevo usuario, crear un mensaje, etc.
Cada vez que un usuario envía un mensaje, crea un chat o viene en línea, por ejemplo, todos los demás usuarios serán notificados y su interfaz de usuario se actualizará en tiempo real.
Esto se hace con Pusher. Escuchamos eventos como message:new
o chat:update
. Cuando un usuario realiza una acción, activamos el evento en el servidor, y la escucha de otros usuarios recibirá las actualizaciones.
Además de escuchar y activar eventos, los canales de presencia de Pusher se usan para poner a todos los usuarios actualmente en línea.
Cuando un usuario inicia sesión, obtenemos a todos los usuarios activos de Pusher y los almacenamos en una tienda local de Jotai. Cuando un usuario inicia sesión o inicia sesión, Pusher envía una actualización y actualizamos la tienda Jotai localmente.
Este proyecto está escrito en TypeScript y utiliza tipos generados por Prisma y esquemas y tipos de ZOD para garantizar la seguridad de los tipos en la base de código. Debido a que Prisma genere automáticamente tipos, rara vez tenemos que declarar o mantener cualquier tipo.
zod
se usa para validar cada formulario del lado del cliente para garantizar que los valores sean correctos antes de realizar cualquier llamada o mutación de API.
En el servidor, cada ruta API también tiene validación de ZOD para garantizar que la entrada sea válida y corresponde al esquema Zod antes de continuar.
Eslint también está configurado con reglas estrictas para garantizar la calidad del código y minimizar los errores.
nodemailer