LB
SaaSEm Produção2026

Vendaí

Ecossistema PDV offline-first para pequenos comércios — desktop Electron, nuvem de sincronização e app Flutter

Electron 42React 19Vite 7 (electron-vite)Tailwind CSS v4Flutter / DartNode.js 22
Roda emmacOSWindowsMicrosoft StoreAndroidiOS
usevendai.com.br
relatórios em 7 categorias
50+
apps: desktop, nuvem e celular
3
da operação funciona offline
100%
bancos com boleto e CNAB
7

01

Visão Geral

O Vendaí nasceu dentro de uma casa de ração e virou um produto para qualquer pequeno comércio. É um ecossistema em três partes, todas construídas por mim: o PDV desktop (Electron + React 19 + SQLite) que roda no balcão e funciona 100% offline; a API de sincronização (Node + Express + PostgreSQL no Railway), a 'nuvem premium' que recebe tudo do desktop e devolve o que foi alterado no celular; e o app Flutter (Android e iOS) para o dono acompanhar faturamento, vendas, estoque e caixa de onde estiver. Cada registro tem UUID, fila de sincronização e histórico imutável — vendas e movimentações nunca são apagadas, cancelamentos geram novos eventos. O sistema é distribuído como instalador macOS/Windows, pela Microsoft Store (MSIX) e pela Play Store, com atualização automática, telemetria Sentry, manual completo dentro do app e identidade visual própria (design system, site e materiais de loja).

Meu papel

Desenvolvedor full-stack solo — produto, arquitetura offline-first, desktop Electron/React/SQLite, API de sincronização Node/PostgreSQL, app Flutter, integrações com impressora térmica e balança etiquetadora, branding, site, publicação nas lojas e suporte aos lojistas.


Categoria

SaaS

Ano

2026

Status

Em Produção

Plataformas

macOSWindowsMicrosoft StoreAndroidiOS

Três aplicações, uma só loja. O desktop é a origem dos eventos, a nuvem é o ponto de encontro e o celular é a janela do dono.

PDV Desktop

Roda no balcão, 100% offline

ElectronReact 19SQLite

Vendaí Nuvem

API de sincronização (premium)

NodeExpressPostgreSQLRailway

App de gestão

Android e iOS

FlutterRiverpodFCM

Sincronização: Sincronização bidirecional: o desktop envia tudo; o celular devolve clientes e movimentações de estoque.


02

O Problema

Pequenos comércios brasileiros operam com caderno de fiado, caixa fechado 'de cabeça', estoque descoberto na hora que falta e boletos de fornecedor espalhados na gaveta. Os sistemas de PDV do mercado ou dependem de internet estável — que no interior e em lojas de bairro cai — ou são caros e feitos para redes. E o dono, quando sai da loja, perde completamente a visibilidade do que está acontecendo no balcão.

03 — A Solução

Um PDV desktop offline-first, rápido de operar no rush (atalhos F2–F9, leitor USB, troco em tempo real), que cuida da operação inteira — vendas, caixa, estoque, clientes e fiado, fornecedores, contas a pagar, PIX, boletos e relatórios — e sincroniza com a nuvem quando há conexão. O dono acompanha tudo pelo celular, o atendente só vê o que precisa, e a loja continua vendendo mesmo com a internet fora do ar.


04

Por dentro do produto

O sistema em funcionamento, gravado da aplicação real com uma loja de demonstração — nenhuma tela é mockup.

01

PDV

Uma venda em segundos, com o teclado ou o leitor

O produto passa no leitor e já entra no carrinho. Quantidade, desconto, cliente e pagamento têm tecla própria — o operador não tira a mão do teclado. O troco aparece enquanto o valor é digitado e a confirmação sai com número da venda e comprovante na térmica.

  • Atalhos F2–F9 na barra inferior o tempo inteiro
  • Alerta do fiado em aberto ao vincular o cliente
  • Pagamento dividido em várias formas com valor líquido antes de finalizar
PDV
02

Estoque

O estoque avisa antes de faltar

Entrada de mercadoria com fornecedor, nota e custo — se a compra foi a prazo, as contas a pagar nascem sozinhas. Cada ajuste tem motivo e responsável, e a tela 'Hoje' mostra o que precisa ser reposto antes de qualquer KPI.

  • Alertas de estoque mínimo e validade próxima
  • Histórico completo de movimentações
  • Importação e exportação por CSV
Estoque
03

Financeiro

Boletos de fornecedor lidos pelo código de barras

A agenda de pagamentos organiza o que venceu, vence hoje, em 7 dias e no mês. O código de barras do boleto (ou da conta de luz) é lido e validado na hora, reconhecendo cerca de 90 emissores. Pagamento parcial, em lote, com juros e desconto, estorno e anexos.

  • Selo de vencimento na barra lateral
  • 12 relatórios com exportação CSV, Excel e PDF
  • Emissão de boletos com CNAB 400/240 para 7 bancos
Financeiro
04

Relatórios

Mais de 50 análises, sem sair do sistema

Fluxo de caixa com saldo acumulado, lucro, curva ABC, giro de estoque, horários de pico, formas de pagamento com taxas, ranking de clientes, validade, auditoria. Busca, filtros, KPIs no topo e gráfico só onde a série informa algo.

  • Exportação em CSV, Excel e PDF e impressão A4
  • Histórico de vendas com reimpressão e cancelamento com estorno
  • Tudo calculado localmente — funciona offline
Relatórios
05

Recebimento Seguro

Conferência cega e trilha que ninguém edita

A nota entra por XML ou chave, mas não mexe no estoque. Quem descarrega conta sem ver o esperado; o sistema compara pedido × nota × físico item a item, mostra a divergência em dinheiro e leva a decisão para quem tem alçada — quem conferiu não aprova a própria diferença.

  • Estoque de quarentena e devolução ao fornecedor
  • Estoque e contas a pagar atualizados numa única transação
  • Trilha append-only assinada por dispositivo, com aprovação remota pelo app
Recebimento Seguro

05

9 fluxos em vídeo

Cada vídeo mostra uma tarefa completa, de ponta a ponta. Clique para assistir com controles.


06

Funcionalidades Principais

01

PDV de balcão feito para o rush

Busca por nome, código ou leitor de código de barras USB, descontos por item e geral, pagamento dividido (dinheiro, PIX, débito, crédito e fiado), troco calculado enquanto digita, cliente vinculado com alerta de fiado e atalhos F2–F9 sempre visíveis.

02

100% offline, sincroniza quando pode

Login, vendas, estoque, caixa, relatórios e impressão funcionam sem internet. Toda escrita vai para uma fila de sincronização com UUID e é enviada à nuvem com retries quando a conexão volta — nada se perde.

03

Estoque com entrada de mercadoria

Entrada com fornecedor, nota fiscal, custo e forma de pagamento — compra a prazo gera as contas a pagar automaticamente. Saídas, ajustes com motivo e responsável, alertas de mínimo e validade, importação e exportação CSV.

04

Financeiro: contas a pagar e boletos

Agenda de pagamentos (vencidas · hoje · 7 dias · mês) com leitura e validação do código de barras de boletos (47 dígitos) e contas de consumo (48), pagamento parcial/em lote com juros e desconto, anexos e 12 relatórios. Módulo de emissão de boletos com CNAB 400/240 e layouts de 7 bancos.

05

Central com 50+ relatórios

Financeiro, vendas, estoque, clientes, produtos, caixa e auditoria: fluxo de caixa, lucro, curva ABC, giro de estoque, horários de pico, taxas de cartão, previsão de recebíveis. KPIs no topo, gráficos onde a série informa algo e exportação em CSV, Excel e PDF.

06

Recebimento Seguro

Importação de NF-e por XML ou chave, conferência cega (quem conta não vê o esperado), comparação tripla pedido × nota × físico, divergências com alçada de aprovação, estoque de quarentena e trilha append-only assinada por dispositivo.

07

App de gestão no celular

Faturamento, vendas, ticket médio, estoque baixo, clientes e caixa em Android e iOS — a mesma loja do desktop, lida da nuvem. Vínculo por chave de licença, notificações push e tema escuro.

08

Hardware de loja e distribuição

Impressora térmica com fila de impressão confiável (nunca 'impresso' sem confirmação), balança e etiquetadora (MGV 7), PIX estático com QR Code no balcão, instaladores macOS/Windows, Microsoft Store (MSIX) e atualização automática.


07

Telas do sistema

Capturas reais do produto, organizadas por módulo. Clique em qualquer tela para ampliar.

Painel do dia: atalhos, pendências acionáveis, faturamento, vendas, ticket médio e estoque baixo
Vendas por dia do mês
Mais vendidos com receita por produto
A mesma tela no tema escuro escuro
Busca global (F1): produto, cliente ou venda
PDV em repouso: busca, atalhos F2–F9 e vitrine dos mais vendidos
Carrinho com itens, subtotal e total
Pagamento em dinheiro com troco calculado em tempo real
Confirmação da venda com número, total e troco
QR Code PIX do valor exato, gerado offline
PDV no tema escuro escuro
Produtos com categoria, marca, preço, estoque e situação

08

No celular

A mesma loja do desktop, na palma da mão: os números do app batem com os do balcão porque vêm da mesma base sincronizada.

Hoje
Vendas
Detalhe da venda
Estoque baixo
Produto
Clientes
Caixa
Relatórios
Sincronização
Tema escuro

09

Tecnologias

Front-end

Electron 42React 19Vite 7 (electron-vite)Tailwind CSS v4Flutter / Dart

Back-end

Node.js 22ExpressIPC + contextBridge

Banco de Dados

SQLite (better-sqlite3)PostgreSQLsqflite (app)

Deploy

Railwayelectron-builder (DMG / NSIS)Microsoft Store (MSIX)Google PlayVercel (site)

Integrações

StripeFirebase Cloud MessagingSentryImpressora térmicaBalança / etiquetadora (serialport)Amazon S3 (backups)

Bibliotecas

ZodRechartselectron-updaterbcryptjsPapaparseRiverpodgo_routerdiofl_chartVitest

10

Decisões de Design

Interface pensada para o balcão: alvos de toque de 44 px (56 px nos botões do PDV), atalhos de teclado visíveis o tempo todo, números em fonte tabular para leitura rápida e uma tela 'Hoje' que mostra primeiro o que precisa de ação (estoque no mínimo, contas vencidas) antes dos KPIs. Verde Vendaí (#059669) como cor única de ação, Sora para títulos e números-herói, Inter para o corpo, tema escuro nativo. O atendente vê um sistema simples; o administrador vê o sistema inteiro — a diferença é permissão, não outro produto. Manual completo embutido, offline, com botão Ajuda em todas as telas.

11

Desafios Técnicos

O maior desafio foi fazer três aplicações concordarem sobre uma loja sem uma delas ser 'a certa'. A solução foi tratar o desktop como origem dos eventos e a nuvem como o ponto de encontro: cada registro nasce com UUID, cada escrita entra numa fila com a operação (criar/atualizar/excluir) e o payload, e o serviço de sincronização monitora a conexão, envia em lote, marca como synced e registra falhas com contagem de tentativas — o celular lê um snapshot consolidado e devolve só o que alterou (clientes, movimentações). Segundo desafio: o Recebimento Seguro precisava de garantias que um CRUD comum não dá — conferência cega, separação de funções (quem conferiu não aprova a própria diferença), estoque e contas a pagar atualizados numa transação única e uma trilha append-only assinada por dispositivo, verificável pelo proprietário. Terceiro: boletos e códigos de barras gerados e validados 100% offline (linha digitável, código de barras, QR PIX híbrido, baixa por arquivo de retorno CNAB 400/240) para bancos com layouts diferentes.


12

Resultados

  • Produto em produção na versão 1.8, distribuído para macOS, Windows (instalador e Microsoft Store) e Android — com atualização automática e telemetria de erros
  • Três aplicações, uma só loja: desktop, nuvem e celular compartilham os mesmos dados via sincronização bidirecional com fila e retries
  • Mais de 50 relatórios, módulo financeiro completo (contas a pagar, boletos CNAB, PIX) e Recebimento Seguro com trilha de auditoria imutável
  • Identidade visual própria de ponta a ponta: design system com tokens, kit de logos, site, materiais para Play Store e Mercado Livre

13

Aprendizados

  • Offline-first de verdade é decisão de modelagem, não de cache: UUIDs em todos os registros, campos sync_status/deleted_at, fila sync_queue com a operação e o payload, e eventos que nunca são apagados — cancelamentos viram novos eventos, o que deixa a resolução de conflitos possível
  • Código puro compartilhado entre main e renderer (src/comum): o cálculo de totais do PDV, taxas e valor líquido é um único módulo — o número que a tela mostra é exatamente o que o banco grava
  • Segurança no Electron sem atalhos: o React nunca toca o banco; toda chamada passa por contextBridge → handler IPC (sessão + perfil + payload validado com Zod) → service. Senhas em bcrypt, sessão lembrada cifrada com safeStorage
  • Hardware de loja é onde o software quebra: impressão virou um job com estado (enviado, aceito, falhou, tempo limite) e histórico, para o cupom nunca sumir em silêncio nem sair em dobro
  • Distribuição multi-canal: a versão da Microsoft Store precisa de pasta de dados própria e importação única da versão tradicional; a Play Store exige política de privacidade, exclusão de conta e telas reais — tudo isso vira código e documentação
  • Um app Flutter que mostra os mesmos números do desktop exige que a API seja a fonte da verdade do snapshot — e que o cache local (sqflite) saiba quando está desatualizado