Este é o projeto frontend para uma aplicação de transmissão ao vivo, construído com React, TypeScript e Vite. Ele permite que usuários criem e participem de salas de streaming, com uma funcionalidade dedicada para gravação e envio de áudio para interação em tempo real, onde o gemini irá verificar as perguntas e procurar respostas adequadas, baseada em vetores (embeddings).
- Criação de Salas: Interface para criar novas salas de transmissão.
- Participação em Salas: Usuários podem entrar em salas existentes através de um link.
- Gravação de Áudio: Uma página dedicada permite que os participantes gravem suas contribuições de áudio.
- Comunicação com Backend: Envio do áudio gravado para um serviço de backend para processamento e distribuição.
- Gerenciamento de Estado: Utiliza TanStack Query (React Query) para um gerenciamento de estado de servidor eficiente e robusto.
Abaixo se encontram imagens dos layouts da aplicação:
- React: Biblioteca para construir a interface de usuário.
- TypeScript: Superset do JavaScript que adiciona tipagem estática.
- Vite: Ferramenta de build moderna e ultrarrápida.
- React Router: Para roteamento declarativo no lado do cliente.
- TanStack Query: Para data-fetching, cache e gerenciamento de estado do servidor.
- Tailwind CSS: Framework CSS utility-first para estilização.
- Biome: Ferramenta integrada para formatação e linting de código, garantindo qualidade e consistência.
Siga as instruções abaixo para configurar e executar o projeto em seu ambiente local.
-
Clone o repositório:
git clone https://github.com/patrick-cuppi/live-streaming-frontend
-
Navegue até o diretório do projeto:
cd live-streaming-frontend -
Instale as dependências:
pnpm install
Para iniciar o servidor de desenvolvimento, execute o comando:
pnpm devO servidor será iniciado em http://localhost:5173 (ou outra porta, se a 5173 estiver em uso).
A aplicação é estruturada com as seguintes rotas principais, gerenciadas pelo react-router-dom:
-
GET /:- Componente:
<CreateRoom /> - Descrição: Esta é a página inicial da aplicação. Ela apresenta a interface para que o usuário possa criar uma nova sala de transmissão.
- Componente:
-
GET /room/:roomId:- Componente:
<Room /> - Descrição: A página principal da sala de transmissão. Aqui, os usuários podem assistir e interagir com o conteúdo ao vivo. O
:roomIdé um parâmetro dinâmico que identifica a sala.
- Componente:
-
GET /room/:roomId/audio:- Componente:
<RecordRoomAudio /> - Descrição: Uma página específica para participantes que desejam enviar uma contribuição de áudio. Esta rota isola a funcionalidade de gravação, permitindo uma experiência focada.
- Componente:
A interação por áudio é um recurso central do projeto. O fluxo de envio de uma contribuição de áudio funciona da seguinte maneira:
- Acesso à Página de Gravação: O participante navega para a rota
/room/:roomId/audio. - Captura de Áudio: O componente
RecordRoomAudioutiliza a APIMediaRecorderdo navegador para solicitar permissão e gravar o áudio do microfone do usuário. - Finalização da Gravação: Ao finalizar a gravação, o áudio é processado e encapsulado, geralmente como um objeto
Blob. - Envio para o Backend: Uma requisição (provavelmente
POST) é feita para um endpoint do backend (ex:/api/rooms/:roomId/audio). OBlobde áudio é enviado no corpo da requisição, muitas vezes dentro de umFormData. - Conexão com a Sala Principal: Após o backend receber e processar o áudio, ele o distribui para os outros participantes na sala principal (
/room/:roomId), permitindo que a contribuição seja ouvida por todos em tempo real.
O projeto utiliza o Biome para garantir um código limpo, consistente e livre de erros comuns.
-
Para verificar formatação e erros de lint:
pnpm biome:check
-
Para formatar todos os arquivos automaticamente:
pnpm biome:format
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests.
- Faça um fork do projeto.
- Crie uma nova branch (
git checkout -b feature/sua-feature). - Faça o commit de suas alterações (
git commit -m 'feat: Adiciona nova feature'). - Faça o push para a branch (
git push origin feature/sua-feature). - Abra um Pull Request.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.



