Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Painel de operação de delivery com alertas e agente de insights sobre o recorte filtrado. 369 mil pedidos reais do Delivery Center.
Translation pending
BusinessTypeScript · PythonGitHub @EmersonPalattiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Central de Operações: dashboard Streamlit de food delivery com agente de insights no recorte filtrado
Translation pending
Loading the full README.
Read the full README ↗Painel interno para quem opera hubs de delivery: filtre um recorte (período, cidade, hub, loja, segmento, canal, modal, status) e veja o que está fora da curva e o que fazer hoje: qual hub estourou o SLA e em qual etapa, qual loja ligar, quando reforçar a frota.
Roda sobre 368.990 pedidos reais do dataset Delivery Center (jan–abr/2021, 32 hubs em São Paulo, Rio, Curitiba e Porto Alegre).
App: dashboard-insight-kappa.vercel.app · API: central-operacoes-api.onrender.com/docs
A API roda no plano grátis do Render e dorme sem acesso. Na primeira visita o topo mostra "Acordando o servidor (até ~40 s)".
Todo dia às 8h, horário de São Paulo, o n8n pede à API o briefing de um dia do dataset e o roteamento dos alertas, e envia as mensagens no Telegram. Se a API não responder, o chat recebe o aviso de que o briefing não foi gerado.
flowchart LR
sched["Schedule n8n (8h)"] --> api["API no Render<br/>/api/health, /api/briefing, /api/alerts/routing"]
api --> texto["Briefing e roteamento"]
texto --> tg["Telegram<br/>operador + mensagem por responsável"]
api -->|falha| aviso["Telegram<br/>Briefing não gerado: API indisponível"]
O n8n roda local, na Community Edition gratuita. O workflow está em n8n/ e pode ser importado em qualquer instância. Ele chama a API sem header de autenticação. Se AUTOMATION_TOKEN estiver definido no backend, /api/briefing e /api/alerts/routing passam a exigir X-Automation-Token; deixe a variável vazia para o workflow versionado continuar funcionando.
Importar e ligar o bot: n8n/README.md. O que cada nó faz: n8n/COMO-FUNCIONA.md. Mensagens de uma execução real: n8n/exemplo-briefing.md.
Um dashboard com gráficos não diz para o operador o que fazer. Ele precisa de respostas no recorte que está olhando:
Por isso tudo aqui (KPIs, gráficos, tabelas, exportação, alertas e agente) usa o mesmo recorte, e cada alerta termina com uma ação específica e um botão que filtra o painel no hub ou loja em questão.
| Fila de comandas | Os alertas aparecem como comandas num trilho, da mais grave para a menos grave. A severidade aparece também na forma (círculo cheio = crítico, vazado = atenção, traço = observar). A comanda aberta mostra o problema com números, a ação (quem faz o quê, onde e quando) e três saídas: filtrar o painel no hub/loja, ver no gráfico (rola até o gráfico e destaca as barras, horas ou lojas do alerta) e perguntar ao agente. |
| Alertas cobertos | Hub lento com a etapa que explica o atraso; cancelamento alto no recorte, no hub ou na loja; loja sem entregas (tirar do ar); SLA no horário de pico; pedidos presos no fluxo; queda de volume com o canal que mais caiu; subsídio de frete com a loja que mais pesa. Com menos de 100 entregas medidas, o alerta vira "observar" e sugere ampliar o período. |
| Agente do recorte | Abre num painel lateral (telas largas), flutuante (médias) ou numa folha (celular), com Ctrl+K ou pelo botão "Perguntar" de cada painel, que já preenche a pergunta. Sem API key, responde com regras e estatísticas locais. Com OPENROUTER_API_KEY, usa LLM com tool calling (get_kpis, get_breakdown, get_alerts, get_timeseries). O recorte é aplicado pelo servidor, então o modelo escolhe o que consultar mas nunca sobre quais dados. Cada resposta diz se veio de regras locais ou quais ferramentas o LLM consultou. |
| KPIs | No prazo (SLA), ciclo mediano (com p90) e cancelamento, com veredito, referência e minigráfico diário; pedidos, GMV e ticket médio. A referência é a rede no mesmo período, ou a faixa entre os hubs quando o recorte já é a rede. Compara com o período anterior de mesmo tamanho e avisa quando a base é pequena demais para comparar. |
| Gráficos (ECharts) | Tendência com zoom que vira período do filtro; etapas do ciclo por hub (clique filtra); mapa de calor dia × hora; dispersão de lojas com seleção retangular para filtrar um grupo. |
| Tabelas (TanStack) | Ranking por hub/loja/cidade/canal/modal/pagamento/dia da semana, com setas onde o SLA ou o cancelamento fogem do recorte. Pedidos brutos com ordenação e filtros de coluna no servidor e rolagem virtualizada. |
| Compartilhar e exportar | O recorte fica na URL (?city=Curitiba&hub=8). O menu "Compartilhar" copia o link, baixa os pedidos em CSV, copia um briefing em Markdown (KPIs + alertas com ação) e gera PDF da tela. |
This is the beginning of the README. Read the rest at the original. Read the full README ↗
| Tema e celular | Tema claro e escuro. No celular os filtros viram uma folha e o agente abre por um botão flutuante. |