ChatterboxChatterbox - это приложение для обмена сообщениями в реальном времени, построенное со следующим 13 и толкателем.
Вы можете создать групповой чат или начать DM. Пользователи могут отправлять текстовые сообщения или загружать несколько видео или изображений.
Пользовательский интерфейс обновляется в режиме реального времени. То есть, когда канал создается другим пользователем или когда отправляется сообщение, вы сразу же увидите обновление.
Развернуто на Vercel: https://chatterboxes.vercel.app/
В этом проекте используется новый маршрутизатор приложения next.js 13, компоненты сервера React, действия сервера, приостановка и React 18 cache()
Мы также используем маршруты API (развернутые в качестве без серверных функций для Vercel) для таких действий, как регистрация нового пользователя, создание сообщения и т. Д.
Всякий раз, когда пользователь отправляет сообщение, создает чат или, например, выходит в режиме онлайн, все остальные пользователи будут уведомлены, а их пользовательский интерфейс будет обновлен в режиме реального времени.
Это делается с толкателем. Мы слушаем такие события , как message:new или chat:update . Когда пользователь делает действие, мы запускаем событие на сервере, а прослушивание другого пользователя получит обновления.
Помимо прослушивания и запуска событий, каналы присутствия Pusher используются, чтобы вывести каждого пользователя в настоящее время онлайн.
Когда пользователь входит в систему, мы получаем каждого активного пользователя от Pusher и храним его в локальном магазине Jotai. Когда пользователь входит в систему или выйдет из системы, Pusher отправляет обновление, и мы обновляем магазин Jotai локально.
Этот проект написан в TypeScript и использует сгенерированные типы Prisma , схемы и типы ZOD для обеспечения типов в кодовой базе. Поскольку Prisma автоматически генерирует типы, нам редко приходится объявлять или поддерживать любые типы.
zod используется для проверки каждой формы клиента, чтобы убедиться, что значения являются правильными перед выполнением любых вызовов или мутаций API.
На сервере каждый маршрут API также имеет проверку ZOD, чтобы убедиться, что ввод действителен и соответствует схеме ZOD, прежде чем продолжить.
Eslint также настроен со строгими правилами для обеспечения качества кода и минимизации ошибок.
nodemailer