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。 以下为已保存的摘录。
Ateliê de Cerâmica — Central de Gestão PWA em Next.js 14 (App Router) + TypeScript + Tailwind + Supabase. Crie o primeiro usuário admin manualmente: cadastre-se pela tela de login (isso cria o registro em auth.users) e depois, no SQL editor do Supabase, rode: Stack: Next.js (App Router, Server Components por padrão) · TypeScript · Tailwind · Supabase (Auth + Postgres + Storage) · next-pwa para o manifesto e service worker · Recharts para o gráfico de queima · date-fns para datas.查看完整 README ↗
PWA em Next.js 14 (App Router) + TypeScript + Tailwind + Supabase.
npm install
cp .env.local.example .env.local # preencha com as chaves do seu projeto Supabase
# no SQL editor do Supabase, rode nesta ordem:
# 1. supabase/schema.sql
npm run dev
Crie o primeiro usuário admin manualmente: cadastre-se pela tela de login (isso
cria o registro em auth.users) e depois, no SQL editor do Supabase, rode:
update profiles set role = 'admin' where email = '[email protected]';
Stack: Next.js (App Router, Server Components por padrão) · TypeScript ·
Tailwind · Supabase (Auth + Postgres + Storage) · next-pwa para o manifesto
e service worker · Recharts para o gráfico de queima · date-fns para datas.
Por que essa combinação: Server Components buscam dados direto do Supabase sem expor lógica de query no cliente; RLS no Postgres garante que um aluno nunca leia dados de outro aluno mesmo se a UI tiver bug; Client Components ficam só onde há interação/tempo-real (o timer do forno, os formulários).
Papéis: dois únicos perfis (admin, aluno) definidos em
profiles.role. O middleware.ts bloqueia rotas administrativas para quem
não é admin, e o RLS faz a mesma checagem no banco (defesa em profundidade —
nunca confie só no middleware).
Rotas:
/login pública
/(admin)/dashboard admin
/(admin)/turmas/[turmaId] admin
/(admin)/alunos admin — a implementar (ver abaixo)
/(admin)/oficinas admin — a implementar
/(admin)/forno admin
/(admin)/solicitacoes admin — a implementar
/(admin)/pagamentos admin — a implementar
/(admin)/relatorios admin — a implementar
/(admin)/configuracoes admin — a implementar
/(aluno)/aluno aluno — a implementar
Banco de dados: ver supabase/schema.sql — cobre turmas, pacotes,
matrículas, aulas/presenças, reposições, oficinas, queimas (+ conteúdo do
forno e leituras) e notificações, todas com RLS. É o schema completo do
sistema descrito no briefing, incluindo as tabelas das telas que ainda não
têm UI pronta.
Regra de negócio mais sensível — o forno: toda a previsão (temperatura
estimada, % até a máxima, horário previsto da máxima, horário seguro para
abrir) é pura função de (parâmetros da queima, agora) — ver
src/lib/forno.ts. Quando o admin informa uma temperatura real, ela vira o
novo ponto de partida do cálculo (ultimaLeitura), recalibrando toda a curva
sem precisar de outra lógica: é a mesma função, só com outro parâmetro. Isso
é o que a tela chama de "recalcular toda a previsão".
Componentes reutilizáveis: src/components/ui/* (Button, Card, Badge,
Avatar, ProgressRing) são a base de todas as telas — nenhuma tela deve
estilizar botão/card do zero. ProgressRing é o elemento-assinatura visual
do produto (o arco de progresso do forno), reaproveitado no Dashboard e no
Forno.
supabase/schema.sql)tailwind.config.ts, globals.css)src/lib/forno.ts)Card, Avatar, Badge.oficinas.data e cria notificacoes do tipo
oficina_amanha um dia antes (a tabela já está pronta para plugar
WhatsApp: notificacoes.canal_whatsapp_enviado).matriculas.status = 'pendente'
e reposicoes.status = 'solicitada', com os botões Aprovar/Recusar que já
existem como exemplo na tela de Turmas.pacotes), histórico e oficinas.notificacoes do usuário logado,
Supabase Realtime (supabase.channel(...).on('postgres_changes', ...))
para atualizar sem polling.oficina_participantes.pagamento,
queima_conteudo.pagamento)./(admin) herda a Sidebar/MobileNav automaticamente.src/components/ui."use server") próximas da tela que as usa, para
manter a lógica de negócio fora dos componentes de UI.notificacao_tipo do
schema e no NotificacaoTipo de src/types/database.ts.