Starter moderno integrando Symfony (backend) e React (frontend), com Vite, Mantine UI e tooling de qualidade (ESLint/Prettier, PHPCS, PHPStan). Projetado para dev ágil com foco em performance e boas práticas.
- Symfony 7.3 (PHP 8.4 no container)
- React 18 + TypeScript
- Vite 7 (HMR)
- Mantine 8 (UI)
- Lucide (ícones)
- ESLint + Prettier, PHPCS, PHPStan
- Com Docker: Docker Desktop e Docker Compose (recomendado)
- Sem Docker: PHP 8.4+, Composer 2.6+, Node.js 18+
-
Clonar o repositório
git clone https://github.com/GabrielCirqueira/Catalyst-Skeleton.git cd Catalyst-Skeleton -
Instalar dependências PHP
composer install
-
Instalar dependências JavaScript
npm install # ou com yarn yarn -
Iniciar servidores de desenvolvimento
# Recomendado: via Docker make up-d # Ou localmente npm install && npm run dev php -S localhost:8000 -t public # ou Apache/Nginx local
-
Acessar a aplicação
- Backend:
http://localhost:8000(configurável viaBACKEND_PORTemdocker/ports.env) - Frontend:
http://localhost:5173(configurável viaFRONTEND_PORTemdocker/ports.env)
Ajuste os valores em
docker/ports.envpara trocar as portas expostas pela stack. - Backend:
web/— Frontend React (App, layouts, pages, theme)templates/base.html.twig— Shell do SPA com tags Vitesrc/— Backend Symfony (controllers, console, kernel)config/— Configurações do framework/bundles/rotasdocker-compose.yaml,Dockerfile,docker/— Orquestraçãocli/— Scripts de lint/QA e hooksMakefile— Comandos de conveniência
- Frontend:
npm run lint:frontend(oulint:frontend:fix) - Backend:
composer lint:php:cs(oucomposer fix:php) - Tudo:
./cli/run-qa.sh(ounpm run lint:all)
- Componentes funcionais com Hooks
- Lazy routes (React Router)
- Tema centralizado (Mantine)
- Ícones Lucide
make up-d— sobe a stack Dockernpm run dev— Vite em modo dev (local)npm run build— build de produção./cli/run-qa.sh— roda todos os lintersmake help— lista todos os comandos do Makefile
Para uma visão mais detalhada, consulte:
- Frontend: documentation/frontend.md
- Backend (Symfony): documentation/backend.md
- Makefile (comandos): documentation/makefile.md
- Scripts CLI: documentation/cli.md
- Lint e formatação: documentation/formatting.md
- Docker e orquestração: documentation/docker.md
O tema Mantine inclui uma paleta personalizada brand definida em web/themes/theme.ts.
colors: {
brand: {
50: '#E6F6F7',
100: '#B3E1E4',
200: '#80CCCC',
300: '#4DB7B3',
400: '#26A3A0',
500: '#1F8C89',
600: '#186F6E',
700: '#125355',
800: '#0B393B',
900: '#041F20',
}
}// Exemplo de uso
<Box bg="brand.100" color="brand.700">
<Text>Texto com cor brand</Text>
</Box>
<Button colorScheme="brand">Botão Primário</Button>Dica profissional: Use useColorModeValue para alternar entre cores em light/dark mode:
const color = useColorModeValue('brand.600', 'brand.300')# config/routes.yaml
react_frontend:
path: /{reactRouting}
controller: Symfony\Bundle\FrameworkBundle\Controller\TemplateController::templateAction
defaults:
template: 'base.html.twig'
requirements:
reactRouting: ".+"Esta configuração permite que:
- Todas as rotas sejam manipuladas pelo React Router
- O Symfony sirva apenas o template base para o frontend
- URLs amigáveis e limpas
Estrutura moderna com lazy loading:
// Exemplo de roteamento lazy-loaded
const router = createBrowserRouter(
createRoutesFromElements(
<Route element={<AppLayout />}>
<Route
path="/"
lazy={() => import('@app/pages/Home')}
/>
<Route
path="/about"
lazy={() => import('@app/pages/About')}
/>
<Route
path="*"
lazy={() => import('@app/pages/NotFound')}
/>
</Route>
)
)Vantagens:
- Carregamento sob demanda (melhor performance)
- Código dividido automaticamente pelo Vite
- Fácil manutenção e adição de novas rotas
- Faça um fork do projeto
- Crie uma branch (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Distribuído sob a licença MIT. Veja LICENSE para mais informações.