尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Sistema integrado de gestão para um viveiro de mudas nativas no Alto Vale do Itajaí (SC). Área de ~10.000 m², equipe de 9 pessoas e venda no atacado via WhatsApp. O sistema tem três áreas de negócio, Cadastro único, Produção e Comercial, com Acesso e Configurações atravessando as três, e é operado por três pessoas: chefia, gerência e administrador. O foco é trocar o "tudo de cabeça" por dados estruturados, com interfaces extremamente simples e mobile-first: os usuários finais não são técnicos e o celular é o dispositivo principal de uso no campo.檢視完整 README ↗
Sistema integrado de gestão para um viveiro de mudas nativas no Alto Vale do Itajaí (SC). Área de ~10.000 m², equipe de 9 pessoas e venda no atacado via WhatsApp.
O sistema tem três áreas de negócio, Cadastro único, Produção e Comercial, com Acesso e Configurações atravessando as três, e é operado por três pessoas: chefia, gerência e administrador.
O foco é trocar o "tudo de cabeça" por dados estruturados, com interfaces extremamente simples e mobile-first: os usuários finais não são técnicos e o celular é o dispositivo principal de uso no campo.
| Camada | Tecnologia |
|---|---|
| Frontend | Next.js 16 (App Router) + React 19 + Tailwind CSS |
| Backend | Server Actions com SQL direto (pool.query) |
| Banco de dados | PostgreSQL: local em dev, Neon (cloud) na produção/Vercel; driver escolhido pelo host |
| Autenticação | Sessão própria por cookie (scrypt + tokens SHA-256) |
| Mobile | PWA (manifest + service worker, fila de sync offline) |
| Linguagem | TypeScript |
| Testes | Vitest: unitários e suíte contra Postgres real (test:db) |
Pré-requisitos: Node.js 20+ e um PostgreSQL local acessível (ex.: instância do pgAdmin).
Na produção (Vercel) o banco é o Neon: basta apontar a DATABASE_URL de cada ambiente;
o driver certo é escolhido automaticamente pelo host (*.neon.tech → driver serverless).
# 1. Instalar dependências
npm install
# 2. Configurar a conexão com o banco local (.env.local)
echo 'DATABASE_URL=postgresql://postgres:<senha>@localhost:5432/viveiro' > .env.local
# 3. Rodar as migrações
npm run db:migrate
# 4. Criar o primeiro administrador (a senha provisória aparece uma vez)
npm run db:seed-admin -- --login admin --nome "Administrador"
# 5. Subir o ambiente de desenvolvimento
npm run dev
A aplicação fica disponível em http://localhost:3000. O login é exigido em todas as rotas
(o middleware redireciona para /login).
| Comando | Descrição |
|---|---|
npm run dev | Servidor de desenvolvimento |
npm run build | Aplica as migrações pendentes e faz o build |
npm run build:app | Só o build, sem tocar no banco |
npm start | Servidor de produção |
npm run lint | ESLint |
npm run typecheck | Gera os tipos de rota do Next e roda o tsc |
npm test | Testes unitários (Vitest) |
npm run test:db | Recria o banco de TEST_DATABASE_URL e testa contra ele |
npm run db:migrate | Aplica migrações pendentes |
npm run db:migrate:status | Mostra aplicadas e pendentes, sem escrever |
O npm install ativa o hook de pre-commit (.githooks/pre-commit): varredura de segredos, lint e
testes. O CI (.github/workflows/ci.yml) roda o mesmo, mais typecheck e test:db com Postgres 17.
sa-east-1) e copiar a URL de conexão
com pooler (...-pooler.sa-east-1.aws.neon.tech/neondb?sslmode=require).DATABASE_URL com a URL do Neon, marcada só em
Production.npm run build aplica as migrações pendentes antes do next build: se uma falhar,
a publicação para e a versão anterior continua no ar.
Publicação de preview pula as migrações, para nunca mexer no banco de produção.master exigindo o check verificar do CI: é
isso que bloqueia PR com teste quebrado.migrations/ Migrações SQL (psql puro), aplicadas em ordem cronológica
scripts/ migrate.ts, seed-admin.ts, geração de ícones, hooks de git
src/
app/ Rotas (App Router), organizadas pelas três áreas
cadastros/ 1 · Espécies, recipientes, insumos, pessoas, tipos de tarefa, protocolos
producao/ 2 · Ainda sem tela: agenda, lotes, protocolo e mapa
pedidos/ 3 · Cadastro de pedidos
clientes/ fornecedores/ 1 · As telas de cada papel da mesma pessoa
configuracoes/ Período de trabalho e parâmetros do sistema
admin/ Usuários e sessões
login/ logout/ conta/ trocar-senha/ Fluxo de autenticação
api/ Endpoints (notificações, fotos de espécie)
components/ Componentes compartilhados (Toast, Autocomplete, sino de notificações)
lib/ db, auth, orders, permissions, modules, offline-queue, utilitários
middleware.ts Proteção de rotas por sessão
São três papéis, e correspondem às três pessoas que operam o sistema:
Não há perfil de campo. Os seis colaboradores do viveiro não operam o sistema: o trabalho deles é planejado e confirmado pela gerência. Eles existem em
pessoas_papeiscom o papelfuncionario, que diz esta pessoa trabalha aqui e não implica acesso. A matriz completa está emsrc/lib/permissions.ts.
As telas de Cadastro único, Produção e Comercial ainda não existem: o modelo de dados está no banco, e as fases seguintes constroem as telas.
Quatro fases, e a ordem importa.
Fase 1 (acesso e cadastro) ─┬─> Fase 2 (lotes) ─┬─> Fase 4 (mapa e pedido)
└─> Fase 3 (agenda e protocolo) ─┘
A Fase 1 bloqueia tudo: a agenda escala pessoas, o lote referencia espécie e canteiro, e o pedido referencia pessoa. O mapa é o último a funcionar, porque depende das duas fontes de pendência, a atribuição lançada à mão e a ordem gerada pelo protocolo.
.sql em migrations/ (compatível com psql puro),
manter compatibilidade retroativa e ser documentada.localhost) e Neon (cloud) na produção/Vercel.DATABASE_URL; pool singleton em src/lib/db.ts. O driver é escolhido pelo
host da URL: *.neon.tech → @neondatabase/serverless; qualquer outro → pg
(mesmo critério de scripts/migrate.ts). Importar como import pool from '@/lib/db'.
Nunca usar o pool no lado cliente.snake_case no plural (ex.: especies, eventos_perda).feat(pedidos): adiciona separação por cargas).*.test.ts em __tests__/).
O pre-commit hook roda lint e testes: commits são bloqueados se algo falhar.