Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
FieldService — aplicação real (Next.js + Supabase) Esqueleto funcional multi-empresa (SaaS), com autenticação real e permissões aplicadas na base de dados, não só na interface. O que já está feito e a funcionarREADME 전문 보기 ↗
Esqueleto funcional multi-empresa (SaaS), com autenticação real e permissões aplicadas na base de dados, não só na interface.
requireRole() nos
layouts + RLS): SUPER_ADMIN, ADMIN, TECHNICIAN, FINANCE./super-admin): criar empresas novas e o primeiro Admin
de cada uma./admin/*): dashboard com números reais, e módulo de
Clientes completo (listar, criar, ver detalhe com histórico) — este é
o padrão de referência para os restantes módulos./tecnico/*): agenda com os serviços atribuídos, iniciar
serviço, e terminar com "Concluído" / "Precisa de nova visita" / "Não foi
possível realizar" — tudo através de funções seguras (RPC) que nunca dão
ao técnico acesso de escrita direto às tabelas administrativas.supabase/schema.sql: esquema completo (todas as tabelas do briefing:
clientes, pedidos, orçamentos, serviços, visitas, materiais, compras,
faturação) com RLS multi-tenant e a view segura para técnicos.Pedidos, Agenda (vista de calendário), Serviços (detalhe admin com
agendamento e faturação), Orçamentos (com itens e cálculo de IVA),
Materiais, Compras, Faturação, Relatórios, Utilizadores, Configurações —
todos seguem exactamente o padrão do módulo Clientes: uma page.tsx como
Server Component a fazer supabase.from(...).select(...), e um
actions.ts com Server Actions para escrita. Como o schema e a RLS já
existem para todas estas tabelas, portar cada módulo é sobretudo repetir
este padrão.
supabase/schema.sql para lá e corre (Run).Authentication → Users → Add user — cria o teu login (email + password).
Copia o User UID que aparece.
Volta ao SQL Editor e corre (substitui os valores):
insert into profiles (id, organization_id, role, nome, email)
values ('COLA-AQUI-O-UUID', null, 'SUPER_ADMIN', 'O Teu Nome', '[email protected]');
.env.local.example para .env.local.Project URL → NEXT_PUBLIC_SUPABASE_URLanon public key → NEXT_PUBLIC_SUPABASE_ANON_KEYservice_role key → SUPABASE_SERVICE_ROLE_KEY (esta é secreta —
nunca a exponhas no código do browser nem a partilhes)npm install
npm run dev
Abre http://localhost:3000 → entra com o teu login de Super Admin →
/super-admin → cria a primeira empresa → cria o Admin dessa empresa →
sai (Sair) → entra com esse login de Admin para testares o fluxo normal.
.env.local nas
definições do projeto Vercel (Settings → Environment Variables).middleware.ts): corre no servidor antes de qualquer
página, mas só verifica se existe sessão (cookie) — redireciona para
/login quem não tem sessão nenhuma. A validação real da role de cada
utilizador é feita por requireRole() (lib/auth.ts), chamada nos
layout.tsx de /admin, /tecnico, /super-admin e /financeiro, que
correm em Node.js normal e confirmam a role em profiles antes de
deixar passar.schema.sql): mesmo que o middleware falhasse, a
própria base de dados recusa devolver ou aceitar dados fora do que cada
papel pode ver. É a barreira que conta a sério.services_technician_view e afins): o técnico
nunca lê a tabela services diretamente — só uma vista com as colunas
necessárias para o trabalho no terreno (sem valor, sem faturação, sem
margens).tech_start_service,
tech_finish_visit): o técnico não tem UPDATE na tabela services —
só estas duas funções, muito específicas, com as suas próprias validações,
conseguem mudar o estado de um serviço, e só do serviço que lhe está
atribuído.