# GitHub Copilot Instructions ## 🚨 REGRA CRÍTICA DE DEPLOY **NUNCA envie arquivos manualmente com scp/rsync para o servidor.** ### Deploy Obrigatório Sempre que precisar enviar código para produção, USE OS SCRIPTS: ```bash # Para mudanças no BACKEND (PHP/Laravel) cd /workspaces/webmoney/backend && ./deploy.sh # Para mudanças no FRONTEND (React/JS) cd /workspaces/webmoney/frontend && ./deploy.sh ``` ### Por que usar os scripts? Os scripts de deploy: 1. **Backend (deploy.sh)**: - Sincroniza arquivos com rsync - Instala dependências com composer - Executa migrações - Limpa e regenera cache - Reinicia PHP-FPM - Ajusta permissões 2. **Frontend (deploy.sh)**: - Faz build do React (npm run build) - Envia para /var/www/webmoney/frontend/**dist** (não /frontend!) - Verifica se deploy funcionou ### Proibições ❌ `scp arquivo root@213.165.93.60:/var/www/webmoney/...` ❌ `rsync arquivo root@213.165.93.60:/var/www/webmoney/...` ❌ Copiar arquivos individuais manualmente ### Workflow 1. Editar código 2. `cd backend && ./deploy.sh` ou `cd frontend && ./deploy.sh` 3. Testar em https://webmoney.cnxifly.com 4. Se OK: - `VERSION++` (incrementar versão) - Atualizar `CHANGELOG.md` (documentar mudanças) - Atualizar `README.md` (sempre que necessário - novas features, requisitos, comandos, etc.) 5. Commit e push ### 📝 Quando atualizar README.md - Nova funcionalidade importante - Mudança de requisitos (versão PHP, Node, etc.) - Novos endpoints de API - Alteração de variáveis de ambiente - Novos comandos artisan - Mudança na estrutura do projeto ## 🚫 Regras de UI/UX **NUNCA use alert(), confirm() ou prompt() do navegador.** Sempre usar componentes modais ou toast: - Para erros: `toast.error('mensagem')` - Para sucesso: `toast.success('mensagem')` - Para confirmação: Usar `` component - Para formulários: Criar modal customizado ```jsx // ❌ PROIBIDO alert('Erro!'); confirm('Tem certeza?'); // ✅ CORRETO import { useToast } from '../components/Toast'; import { ConfirmModal } from '../components/Modal'; const toast = useToast(); toast.error('Erro!'); toast.success('Sucesso!'); ``` ## Estrutura do Servidor ``` /var/www/webmoney/ ├── backend/ # Laravel (Nginx → PHP-FPM) └── frontend/ └── dist/ # React build (Nginx root) ``` ## Credenciais - **Servidor**: root@213.165.93.60 (senha: Master9354) - **Banco**: webmoney / M@ster9354 - **Usuário WebMoney**: marco@cnxifly.com / M@ster9354 ## 🔑 Acesso SSH - SEMPRE usar sshpass **OBRIGATÓRIO:** Sempre usar `sshpass` para comandos SSH/SCP/RSYNC. ```bash # SSH para executar comandos sshpass -p 'Master9354' ssh -o StrictHostKeyChecking=no root@213.165.93.60 "comando" # Ver logs do Laravel sshpass -p 'Master9354' ssh -o StrictHostKeyChecking=no root@213.165.93.60 "tail -50 /var/www/webmoney/backend/storage/logs/laravel.log" # Executar tinker sshpass -p 'Master9354' ssh -o StrictHostKeyChecking=no root@213.165.93.60 "cd /var/www/webmoney/backend && php artisan tinker --execute='codigo'" # MySQL sshpass -p 'Master9354' ssh -o StrictHostKeyChecking=no root@213.165.93.60 "mysql -u webmoney -p'M@ster9354' webmoney -e 'QUERY'" ``` ❌ NUNCA usar `ssh root@213.165.93.60` sem sshpass (vai travar esperando senha) ## 🎨 Padrão Visual de Modais **TODOS os modais de formulário devem seguir este padrão elegante:** ### Estrutura Base ```jsx
{/* Header sem borda */}
Título

Subtítulo

{/* Body com scroll */}
{/* Preview Card - SEMPRE no topo */}
{/* Preview visual do item sendo criado/editado */}
{/* Campos em cards com background #0f172a */} {/* Labels com ícones coloridos */} {/* Badges "Opcional" quando necessário */}
{/* Footer sem borda */}
``` ### Cores do Sistema - **Background modal**: `#1e293b` - **Background campos/cards**: `#0f172a` - **Texto principal**: `text-white` - **Texto secundário**: `text-slate-400` - **Texto desabilitado**: `text-slate-500` ### Labels com Ícones ```jsx ``` ### Badge Opcional ```jsx {t('common.optional')} ``` ### Seleção Visual com Cards Para seleções (categorias, ícones), usar cards clicáveis: ```jsx
handleSelect(item)} className="p-2 rounded text-center" style={{ background: isSelected ? 'rgba(59, 130, 246, 0.15)' : '#0f172a', cursor: 'pointer', border: isSelected ? '2px solid #3b82f6' : '2px solid transparent' }} > {label}
``` ### Seção de Keywords/Tags ```jsx
{/* Tags com cor do item */}
``` ### Switch de Status ```jsx
``` ## Documentação Consulte `.DIRETRIZES_DESENVOLVIMENTO_v5` para regras completas.