Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Sistema de gestão para empresa de buffet (eventos + refeições corporativas). Fase atual: financeiro (pedidos e despesas) + estoque, com autenticação. Stack: Next.js 15 (App Router) + Supabase (Postgres, Auth, RLS) via supabase-js / @supabase/ssr. Telas construídas a partir de um protótipo de referência (.dc.html) fornecido pelo cliente.檢視完整 README ↗
Sistema de gestão para empresa de buffet (eventos + refeições corporativas). Fase atual: financeiro (pedidos e despesas) + estoque, com autenticação.
Stack: Next.js 15 (App Router) + Supabase (Postgres, Auth, RLS) via supabase-js / @supabase/ssr.
Telas construídas a partir de um protótipo de referência (.dc.html) fornecido pelo cliente.
npm install e npm run build já foram rodados e passam limpos (ver
Setup). O que não foi verificado visualmente: as telas
protegidas (Pedidos, Despesas, Estoque, Resumo financeiro) exigem login
real via Supabase Auth, e o projeto ainda está com credenciais placeholder
em .env.local — sem um projeto Supabase real não é possível autenticar
para vê-las renderizadas. Login e cadastro foram conferidos visualmente no
navegador. Assim que as credenciais reais forem configuradas (passo 2-3
abaixo), vale conferir cada tela pelo menos uma vez.
Instalar dependências
npm install
Criar o projeto no Supabase (se ainda não tiver um) e copiar a URL e a chave anônima em Project Settings > API.
Configurar variáveis de ambiente
cp .env.local.example .env.local
Preencha NEXT_PUBLIC_SUPABASE_URL e NEXT_PUBLIC_SUPABASE_ANON_KEY.
Aplicar o schema do banco — abra o SQL Editor do seu projeto Supabase
e execute o conteúdo de supabase/migrations/0001_init.sql.
(Se preferir usar o Supabase CLI: supabase db push depois de linkar o projeto.)
Rodar em desenvolvimento
npm run dev
Acesse http://localhost:3000, clique em "Cadastre-se" e crie o usuário
da empresa. Por padrão o Supabase exige confirmação por e-mail — se quiser
pular isso em desenvolvimento, desative em Authentication > Providers >
Email > Confirm email.
Antes de considerar pronto, rode o build para pegar erros de tipo:
npm run build
app/
auth/ # actions (signIn/signUp/signOut) + callback de confirmação de e-mail
login/, signup/ # páginas públicas de autenticação
(protected)/ # route group com layout que exige sessão (redireciona p/ /login)
dashboard/ # resumo financeiro (fetch server-side, filtro de mês client-side)
pedidos/ # lista + calendário + modal de criar/editar (Client + Form + actions)
despesas/ # lista + modal de criar/editar
estoque/ # lista + modal de item + modal de movimento; estoque/[id] = histórico
lib/
supabase/ # clients (browser/server) e middleware de sessão
types/
database.types.ts # tipos no formato `supabase gen types` (ver nota abaixo)
domain.ts # enums/uniões e interfaces de domínio (fonte única da verdade)
validations/ # schemas Zod usados nas server actions
utils/ # formatação de moeda/data/mês
components/ # NavBar, Modal, ColumnFilter, ConfirmSubmitButton (genéricos)
supabase/migrations/ # schema SQL (tabelas, RLS, triggers)
middleware.ts # protege rotas não públicas
Criar/editar em Pedidos, Despesas e Estoque acontece em um modal (sem
navegação de página), igual ao protótipo de referência. As server actions
de criar/editar não fazem redirect(): retornam { success: true } e o
próprio formulário fecha o modal via useEffect; o Next re-renderiza a
página automaticamente depois que a Server Action retorna.
Autenticação: qualquer usuário autenticado tem acesso total às tabelas
(RLS libera para a role authenticated), já que nesta fase não há
diferenciação de papéis nem múltiplas empresas.
lib/types/database.types.ts foi escrito manualmente no mesmo formato que o
comando abaixo gera. Quando o Supabase CLI estiver disponível, rode-o para
manter os tipos sincronizados com o schema real sem tocar em nenhum outro
arquivo:
npx supabase gen types typescript --project-id <seu-project-id> > lib/types/database.types.ts
sequence +
default nextval), nunca enviado pelo cliente.generated always as) — não pode divergir
de valor_total - valor_pago.pendente / 50% pago / pago conforme os valores
digitados, até o usuário alterá-lo manualmente.quantidade_atual só é editável na criação do item (estoque
inicial); depois disso só muda por meio de movimentos de entrada/saída,
aplicados por trigger no banco (fonte única da verdade, evita
divergência entre o app e o banco). Excluir um movimento reverte seu
efeito. Uma saída maior que o disponível é bloqueada por constraint
(quantidade_atual >= 0).valor_pago dos pedidos cuja
data da venda cai no mês filtrado (não a data de pagamento); "saídas" =
despesas cuja data cai no mês. Segue o mesmo critério do protótipo de
referência — o mês é o da venda, independente de quando o pagamento
efetivamente ocorreu.O projeto já está estruturado para receber, sem refatoração:
app/(protected)/orcamentos/ espelhando a estrutura
de pedidos/ (page.tsx, Client.tsx, Form.tsx, actions.ts) + uma tabela
orcamentos seguindo o mesmo padrão de RLS do
migration.app/(public)/ com seu próprio layout (sem NavBar/sessão) e
adicionar o prefixo da rota em PUBLIC_PATHS
(lib/supabase/middleware.ts) — nenhuma outra
rota protegida precisa mudar.empresa_id nas tabelas e troque as
policies de using (true) para using (empresa_id = ...).