Este projeto é um sistema de sinalização digital (Digital Signage) baseado na web, construído com Node.js e Express. Ele permite a criação e gerenciamento de telas informativas que exibem conteúdo dinâmico, como notícias de feeds RSS e avisos internos. O sistema foi projetado para ser flexível, escalável e compatível com diversos dispositivos que possuam um navegador web.
O projeto nasceu da necessidade de substituir um script Python limitado ao Windows, buscando uma solução moderna e multiplataforma para a divulgação de informações na universidade.
- Painel de Administração: Uma interface web segura para gerenciar todo o sistema.
- Gerenciamento de Telas: Crie, edite e exclua múltiplas telas de exibição.
- Configuração por Tela: Cada tela pode ter suas próprias fontes de conteúdo e configurações.
- Gerenciamento de Avisos: Um CRUD completo para criar avisos com título, descrição, período de validade e imagem. Avisos são exibidos automaticamente durante seu período de vigência.
- Layout Dinânico:
- O layout se ajusta de acordo com o conteúdo exibido.
- Atualização em Tempo Real: Administradores podem forçar a atualização de todas as telas ativas com um único clique, graças à tecnologia WebSocket.
- Persistência de Dados: Configurações de telas e avisos são salvas em arquivos JSON, funcionando como um banco de dados simples.
- Node.js: Ambiente de execução JavaScript no servidor.
- Express.js: Framework web para gerenciamento de rotas e da API.
- EJS (Embedded JavaScript): Template engine para renderizar HTML dinâmico.
- Multer: Middleware para lidar com upload de arquivos (imagens dos avisos).
ws: Biblioteca para implementação do servidor WebSocket para atualizações em tempo real.rss-parser: Para analisar e extrair dados de feeds RSS.cheerio: Para fazer parsing de HTML (usado para limpar descrições de notícias).googleapi: Para busca de dados de agendas.outras...: Consulte arquivo package.json para visualizar as outras bibliotecas utilizadas.
- HTML5 & CSS3: Estrutura e estilização das páginas.
- JavaScript (Vanilla): Lógica do lado do cliente para o carrossel, chamadas de API e interações.
qrcode.js: Biblioteca para gerar QR Codes dinamicamente no navegador.
/
├── public/ # Arquivos estáticos (CSS, JS do cliente, imagens)
│ ├── css/
│ ├── js/
│ └── logo.png
├── uploads/ # Pasta para as imagens dos avisos (criada automaticamente)
├── views/ # Arquivos de template EJS
├── .env # Arquivo de senhas
├── avisos.json # "Banco de dados" para os avisos
├── content-manager.js # Lógica para buscar e processar conteúdo
├── db.json # "Banco de dados" para as telas
├── Dockerfile # Define a imagem Docker da aplicação
├── docker-compose.yml # Orquestra o container para deploy facilitado
├── package.json # Dependências e scripts do projeto
└── server.js # Servidor principal (coração da aplicação)
-
Clone o repositório:
git clone [URL_DO_SEU_REPOSITÓRIO] cd [NOME_DA_PASTA_DO_PROJETO] -
Se necessário crie os arquivos de dados iniciais para evitar erros de volume no Docker.:
touch db.json avisos.json
-
Configure o arquivo .env: Arquivo .env contem os parâmetros para o funcionamento do painel, copie o arquivo .env.exemplo e o configure de acordo com os comentários
-
Suba o serviço com o Docker Compose:
docker-compose up -d docker-compose up --build -d (para atualizar o serviço já em funcionamento, lembre-se de copiar as pastas uploads e arquivos json e .env)
-
Acesse a aplicação:
- O servidor estará rodando em
http://localhost:3000(ou no seu IP). - Painel de Administração: Acesse
http://localhost:3000/admin/login - Telas de Exibição: Serão acessíveis através de URLs como
http://localhost:3000/display/[ID_DA_TELA].
- O servidor estará rodando em
- Usuário Padrão:
admin - Senha Padrão:
adminRecomenda-se alterar essas credenciais diretamente no arquivo.envpara um ambiente de produção.
Após o login, você verá o dashboard principal, que lista todas as telas criadas. A partir daqui, você pode:
- Adicionar Nova Tela: Inicia o processo de criação de uma nova tela de exibição.
- Gerenciar Avisos: Leva para a interface de gerenciamento de avisos.
- Forçar Atualização de Telas: Envia um comando para que todas as telas públicas abertas recarreguem seu conteúdo imediatamente.
- Nome da Tela: Um nome descritivo (ex: "Tela da Biblioteca", "Painel do Auditório").
- Fontes de Conteúdo:
- Selecionar suas fontes: Escolha e marque a fonte que deseja exibir.
- Configurações de Exibição:
- Intervalo do Carrossel: Tempo em segundos que cada slide ficará visível.
Na página de avisos, você pode realizar operações de CRUD (Criar, Ler, Atualizar, Deletar) para os avisos.
- Título e Descrição: Conteúdo principal do aviso.
- Data de Início e Fim: Período em que o aviso estará ativo e será exibido nas telas configuradas para isso.
- Imagem e Link: Campos opcionais para enriquecer o aviso.
- Seletor de Telas Campo de seleção para quais telas deverão aparecer os avisos.
- Melhorar organização e comentários do código.
- Desenvolver e implementar um sistema/script automatizado de instalação e backup.
- Dar um nome ao software, atualizando também todas as referências internas (documentação, código-fonte, instaladores e arquivos de configuração).
- Validar o funcionamento completo do sistema (instalação, restauração de backup e integridade dos dados).
- Preparar a documentação técnica e manual do usuário.
- Melhorar Gerenciamento de Dados (race condition)
- Permitir a configuração de múltiplas fontes de conteúdo (mais de um feed RSS) por tela.
- Implementar estratégias de cache inteligentes com Service Worker. (Exige HTTPS)
- Implementar HTTPS com Certificado Autoassinado (o certificado tem que ser instalado manualmente em cada dispositivo)
Este projeto foi desenvolvido por TI FCT.
