Skip to content

Ambiente de Desenvolvimento

Stack

ComponenteTecnologia
BackendLaravel 13, PHP 8.4
FrontendVue 3, Inertia.js 2, PrimeVue 4 (unstyled)
CSSTailwind CSS v4
BancoMariaDB (produção), SQLite (testes)
Cache/QueueRedis via predis
Multi-tenancystancl/tenancy (multi-database, subdomínios)
AuthLaravel Fortify (login, registro, 2FA)
PermissõesSpatie Permission
Auditoriaowen-it/laravel-auditing
PDFspatie/laravel-pdf + Gotenberg
Real-timeLaravel Reverb + Echo
Rotas frontendLaravel Wayfinder (gera TS types)
BuscaLaravel Scout + Typesense

Docker Compose

ServiçoPortaFunção
web (nginx)80Reverse proxy
app (PHP 8.4)Aplicação Laravel
queue (PHP 8.4)Queue worker
mariadb3306Banco de dados
redis6379Cache e filas
reverb8080WebSocket server
gotenberg3000Geração de PDF
typesense8108Busca full-text (Typesense)
docs (VitePress)5173Documentação

Variáveis de Ambiente Importantes

env
# Banco
DB_CONNECTION=mariadb
DB_HOST=mariadb

# Session (cookie para multi-tenancy)
SESSION_DRIVER=cookie

# Redis
REDIS_CLIENT=predis
REDIS_HOST=redis

# PDF
GOTENBERG_URL=http://gotenberg:3000

# Locale
APP_LOCALE=pt_BR
APP_FAKER_LOCALE=pt_BR

# Reverb (WebSocket) — VITE_ vars são expostas ao frontend
VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"
VITE_REVERB_HOST="localhost"          # "localhost" para browser, NÃO o hostname Docker
VITE_REVERB_PORT="${REVERB_PORT}"
VITE_REVERB_SCHEME="${REVERB_SCHEME}"

Wayfinder (rotas no frontend)

O projeto usa Laravel Wayfinder para gerar funções TypeScript de rotas e actions. Os arquivos gerados (resources/js/routes/, resources/js/actions/) estão no .gitignore e devem ser gerados antes de qualquer build:

bash
docker compose exec app php artisan wayfinder:generate --with-form
npm run build

A flag --with-form é obrigatória — gera os .form variants usados nas páginas de autenticação.

Nunca use route() (Ziggy) nos componentes Vue. Use URLs diretas ou importe funções de @/routes/ e @/actions/.

Estrutura de Pastas

app/
├── Console/Commands/       # Artisan commands (app:setup)
├── Domain/                 # DDD domains
│   ├── Church/             # Igreja, Congregação, Officials, Address
│   │   ├── Actions/
│   │   ├── Events/
│   │   ├── Models/
│   │   └── Policies/
│   ├── Finance/            # Transações, Categorias, Contas
│   │   ├── Actions/
│   │   ├── Events/
│   │   ├── Models/
│   │   └── Policies/
│   ├── Member/             # Membros, Telefones
│   │   ├── Actions/
│   │   ├── Events/
│   │   ├── Models/
│   │   ├── Observers/
│   │   └── Policies/
│   ├── Shared/Models/      # Escolaridade, Profissão, País, UF, TelefoneTipo
│   └── User/               # User model
├── Http/
│   ├── Controllers/        # Agrupados por domínio
│   ├── Middleware/          # CheckFeature, CheckMemberLimit, HandleAdminInertiaRequests
│   └── Requests/           # Form Requests por domínio
├── Models/                 # Tenant, Plan (central)
└── Providers/