Synaplan
기업을 위한 오픈소스 AI 플랫폼
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
O sistema deve permitir criar ordens de serviço rápidas por matrícula, gerir pacotes mensais e créditos de lavagem por cliente,e enviar notificações automáticas via WhatsApp com ligações públicas de acompanhamento de estado da viatura. O objetivo é ter uma aplicação web responsiva, simples, de alta velocidade e pronta para produção.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Micro-SaaS mobile-first para estética automotiva: entrada por placa, vistoria fotográfica, planos mensais com créditos, acompanhamento público da OS e aviso no WhatsApp.
Next.js 16 (App Router), TypeScript, Tailwind CSS 4, Supabase (Postgres, Auth, Storage, RLS), Zod.
npm install.env.example para .env.local e preencha as variáveis.supabase/migrations/ (supabase db push ou cole no SQL Editor).npm run devUNIQUE (tenant_id, placa). Duas estéticas podem atender o mesmo carro.tenant_id. As policies usam tenant_atual(), que lê o tenant do perfil do usuário logado. As FKs são compostas (tenant_id, id), então uma OS não aponta para um veículo de outra empresa nem por erro de aplicação.criar_ordem_servico. O insert direto na tabela é revogado para impedir que alguém crie uma OS vinculada a um plano sem debitar o crédito. O débito usa FOR UPDATE, então duas entradas simultâneas não consomem o mesmo crédito.esgotado; planos vencidos viram expirado na próxima tentativa de uso.valor_total é a soma dos servicos_avulsos, calculada no banco. Com plano, os avulsos são os extras cobrados à parte.recebido → lavando → acabamento → pronto → entregue), via avancar_status_os. pronto_em e entregue_em são preenchidos automaticamente.x-os-token é igual ao token da OS, então não é possível listar ordens com a chave pública. O anônimo vê apenas colunas liberadas: nada de WhatsApp do cliente, observações internas ou plano.tenant_id/os_id/arquivo. A policy de upload exige que a primeira pasta seja o tenant do usuário. O bucket é público para leitura por link.chave_pix e da cidade da empresa. Chaves de telefone devem ser salvas no formato +5584999999999.WHATSAPP_NOTIFICAR_STATUS (padrão pronto). Falhas no envio não desfazem a OS; a interface mostra um aviso./api/os/[token] a cada 15 s e quando a aba volta ao foco. O Realtime do Supabase não repassa o cabeçalho do token para o RLS./agendar/[slug]. O cliente escolhe serviço, dia e horário, informa nome, WhatsApp e, se quiser, placa e modelo. Recebe um link /agendamento/[token] para acompanhar e cancelar até 2 horas antes.horarios_disponiveis, a partir do horário de funcionamento do dia, do intervalo da grade, da duração do serviço, da antecedência mínima, dos dias fechados e da capacidade (carros ao mesmo tempo). Um serviço de 3h ocupa a vaga pelas 3h.criar_agendamento_publico trava a agenda da empresa durante a gravação e confere o horário de novo, então dois clientes não pegam a mesma vaga. Cada WhatsApp pode ter até 3 agendamentos ativos por loja./painel/agenda/config para ligar a agenda, confirmação automática, horários por dia, intervalo, capacidade, antecedência, janela de dias, serviços e dias fechados.supabase/migrations/ schema, RLS, funções e bucket
types/ database.types.ts
lib/supabase/ clientes server, browser, proxy e por token
app/actions/ auth, veiculos, ordens
app/os/[token]/ página pública do cliente
app/api/os/[token]/ status para polling
app/painel/ pátio e nova entrada
Para regenerar os tipos a partir do banco: npm run db:types.