# 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 */}
{/* 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
```
### Switch de Status
```jsx
```
## Documentação
Consulte `.DIRETRIZES_DESENVOLVIMENTO_v5` para regras completas.