App de escalas de trabalho para pequenos negócios, com a demo de um bar fictício: o responsável indica quem está e quantas pessoas são precisas, e o Turni prepara a semana respeitando descansos, pausas e contratos, e explica o que não consegue cobrir. A equipa vê os turnos no telemóvel e pede férias e trocas. O cálculo corre no navegador. Experimenta-se sem conta.
O **Turni** («turnos» em italiano) é uma app de escalas de trabalho para um pequeno negócio (um bar, uma farmácia, uma loja, um lar de idosos), e aqui experimenta-se com **um bar que não existe**: o Caffè Clessidra, com quinze funcionários fictícios. O responsável indica quem trabalha e quantas pessoas são precisas, meia hora a meia hora; o Turni propõe a semana, o responsável ajusta-a e publica-a, e a equipa vê-a no telemóvel.
**O que faz**
- **A semana gerada**: primeiro cobre tudo o que se pode cobrir sem violar regras, depois reparte com equidade fins de semana e fechos, segue as preferências e mantém horários regulares. - **As regras laborais**: as 11 horas de descanso entre dois turnos, o descanso semanal, a pausa a partir das 6 horas, a média de 48 horas, os horários dos contratos a tempo parcial, cada uma com o seu artigo (decretos legislativos italianos 66/2003 e 81/2015); o que muda de uma convenção coletiva para outra fica num perfil. À mão corrige-se arrastando, e enquanto se arrasta a app diz o que seria violado. - **As explicações**: na terça à noite falta uma pessoa na cozinha, e o Turni diz porquê, pessoa a pessoa, em italiano: «Nessuno può coprirla: Simone è in permesso dalle 14; Luca è in ferie; Sara non è disponibile il martedì sera; Paolo ha il riposo fisso il martedì…» (ninguém a pode cobrir: o Simone está de dispensa a partir das 14h, o Luca está de férias, a Sara não está disponível à terça à noite, o Paolo tem folga fixa à terça…). O Turni só escreve que não se pode cobrir sem violar uma regra quando o solver o demonstrou. - **A app da equipa**: uma PWA com os próprios turnos, mesmo sem rede, os pedidos de férias e as trocas com colegas, as notificações e o calendário do telemóvel, ligado por um endereço secreto que se pode revogar. Entra-se com um convite, sem e-mail nem palavra-passe.
**Experimentar sem conta**: a partir da página de apresentação entra-se no painel como responsável, ou na app como funcionária. O servidor envia uma cópia dos dados fictícios, a sua lógica corre no navegador e as alterações ficam lá: mais ninguém as vê.
**A parte difícil** é o cálculo. O HiGHS, o solver de otimização, ocupa mais de 100 MB enquanto trabalha, e no meu servidor o Turni tem 150 no total: por isso está compilado para WebAssembly e corre no navegador de quem gera a semana, dentro de um Web Worker. No meu PC demonstra em menos de dois segundos que a falha de terça à noite não se pode fechar.
Vue 3 e TypeScript, Fastify e MongoDB; cada alteração passa por 368 testes automáticos e chega ao servidor com uma GitHub Action.
Conceção, desenvolvimento full-stack e publicação · 2026
Vue.js, Fastify, MongoDB, HiGHS, WebAssembly