{"id":32692325,"url":"https://github.com/angelluzk/aquashift","last_synced_at":"2025-11-04T19:01:35.339Z","repository":{"id":321450507,"uuid":"1085879208","full_name":"angelluzk/AquaShift","owner":"angelluzk","description":"🚗✨ AquaShift: Motor inteligente de agendamento e otimização de recursos para lava-jatos. (Projeto de Portfólio SaaS-Ready)","archived":false,"fork":false,"pushed_at":"2025-10-29T17:02:03.000Z","size":131,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-29T19:08:00.931Z","etag":null,"topics":["appointment-scheduler","booking-system","car-wash","docker","full-stack","inertiajs","laravel","laravel-sail","optimization","php","portfolio-project","postgresql","pwa","rbac","saas","scheduling","spatie","tailwindcss","vite","vuejs"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angelluzk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-29T16:27:51.000Z","updated_at":"2025-10-29T18:17:44.000Z","dependencies_parsed_at":"2025-10-29T19:08:05.936Z","dependency_job_id":"d54c5b8a-b403-45a1-95a3-fbec9a3a15c3","html_url":"https://github.com/angelluzk/AquaShift","commit_stats":null,"previous_names":["angelluzk/aquashift"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/angelluzk/AquaShift","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2FAquaShift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2FAquaShift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2FAquaShift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2FAquaShift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angelluzk","download_url":"https://codeload.github.com/angelluzk/AquaShift/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelluzk%2FAquaShift/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282166063,"owners_count":26625169,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-01T02:00:06.759Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appointment-scheduler","booking-system","car-wash","docker","full-stack","inertiajs","laravel","laravel-sail","optimization","php","portfolio-project","postgresql","pwa","rbac","saas","scheduling","spatie","tailwindcss","vite","vuejs"],"created_at":"2025-11-01T16:01:03.654Z","updated_at":"2025-11-02T17:01:27.582Z","avatar_url":"https://github.com/angelluzk.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# AquaShift: Motor de Agendamento Inteligente para Lava-Jatos 🚘💦\n\n![Status: Em Construção](https://img.shields.io/badge/status-em__constru%C3%A7%C3%A3o-red?style=for-the-badge)\n![Laravel 11](https://img.shields.io/badge/Laravel-11.x-FF2D20?style=for-the-badge\u0026logo=laravel)\n![PHP 8.3](https://img.shields.io/badge/PHP-8.2-777BB4?style=for-the-badge\u0026logo=php)\n![PostgreSQL 16](https://img.shields.io/badge/PostgreSQL-16-336791?style=for-the-badge\u0026logo=postgresql)\n![Vue.js 3](https://img.shields.io/badge/Vue.js-3.4-4FC08D?style=for-the-badge\u0026logo=vuedotjs)\n![Inertia.js](https://img.shields.io/badge/Inertia.js-2.x-purple?style=for-the-badge)\n![TailwindCSS](https://img.shields.io/badge/TailwindCSS-3.2.1-06B6D4?style=for-the-badge\u0026logo=tailwindcss)\n![Vite](https://img.shields.io/badge/Vite-6.x-646CFF?style=for-the-badge\u0026logo=vite)\n![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge\u0026logo=docker)\n\n\u003e 🟡 **Status:** projeto em evolução contínua, focado em mostrar domínio de Laravel + Vue + Inertia + Docker + PostgreSQL, num caso de uso real (lava-jato / estética automotiva).\n\n\u003c/div\u003e\n\n---\n\n## 📚 Sumário\n\n1. [Visão Geral](#-visão-geral)\n2. [Por que esse projeto existe?](#-por-que-esse-projeto-existe)\n3. [Funcionalidades Chave (Planejadas)](#-funcionalidades-chave-planejadas)\n4. [Objetivos Técnicos](#-objetivos-técnicos)\n5. [Arquitetura do Sistema](#-arquitetura-do-sistema)\n6. [Stack Tecnológica](#-stack-tecnológica)\n7. [Stack Tecnológica Detalhada](#-stack-tecnológica-detalhada)\n8. [Roadmap do Projeto](#-roadmap-do-projeto)\n9. [Guia de Instalação e Execução](#-guia-de-instalação-e-execução)\n10. [Solução de Problemas (Troubleshooting)](#-solução-de-problemas-troubleshooting)\n11. [Contribuição](#-contribuição)\n12. [Autoria](#-autoria)\n\n---\n\n## 🪐 Visão Geral\n\n**AquaShift** é uma aplicação web (SaaS-ready) projetada para otimizar a gestão de agendamentos em **lava-jatos** e **estúdios de estética automotiva**.  \nO sistema não é apenas um calendário: ele foi pensado como um **motor de otimização com restrições de recursos**, capaz de alocar horários de forma inteligente, maximizando a produtividade dos boxes e da equipe.\n\n\u003e 💡 *Imagine um sistema que entende a rotina do negócio e sugere automaticamente o melhor horário, evitando sobrecarga, ociosidade e aumentando o faturamento.*\n\n---\n\n## 🎯 Por que esse projeto existe?\n\n- ✅ Demonstrar Proficiência em Ambientes de Produção: Implementar e documentar um fluxo de trabalho de desenvolvimento 100% containerizado. Isso valida a competência em **Docker, Laravel Sail e WSL2**, replicando o ambiente que empresas modernas utilizam para garantir portabilidade, consistência e resolver problemas complexos de rede e performance (como os documentados na seção Troubleshooting).\n- ✅ Validar a Arquitetura \"Monolítica Moderna\": Construir uma **Single Page Application (SPA)** reativa e de alta performance utilizando a stack **Laravel 11 + Vue 3.4**. O diferencial é o uso do **Inertia.js (2.x)** como a \"ponte\" que une a produtividade de um back-end robusto (Laravel) com a reatividade de um front-end moderno (Vue), sem a complexidade de gerenciar e versionar uma **API REST/GraphQL**.  \n- ✅ Resolver um Desafio de Lógica de Negócio Complexa: Mover o foco do \"como\" **(CRUD)** para o \"porquê\" **(valor de negócio)**. O núcleo do **AquaShift** é um motor de otimização de recursos. Isso envolve gerenciar **concorrência, restrições de tempo, alocação de múltiplos ativos (boxes, funcionários) e estados complexos (atrasos, no-shows)**, demonstrando habilidade em solucionar problemas algorítmicos do mundo real.\n\n[⬆️ Voltar ao sumário](#-sumário)\n\n---\n\n## ⚙️ Funcionalidades Chave (Planejadas)\n\n- **Motor de Agendamento Inteligente:** otimização de slots baseada em disponibilidade de boxes, tipo de serviço e duração.\n- **Alocação Dinâmica:** capacidade de reordenar filas para lidar com atrasos, *no-shows* e encaixes.\n- **Upselling Inteligente:** sugestão de serviços adicionais (ex: \"Encerar +10min\") com ajuste automático do tempo de alocação.\n- **Arquitetura Multi-Filial (SaaS-ready):** suporte nativo para múltiplas filiais com gerenciamento centralizado.\n- **Controle de Acesso (RBAC):** níveis de permissão granulares (Admin, Gestor, Atendente, Cliente).\n- **Jornada do Usuário Moderna:** interface PWA (Progressive Web App), modo Quiosque (Recepção) e QR Check-in.\n- **Sistema de Notificações:** jobs em fila (Queues) para lembretes por e-mail/WhatsApp.\n\n[⬆️ Voltar ao sumário](#-sumário)\n\n---\n\n## 💡 Objetivos Técnicos\n\nEste projeto implementa e demonstra competência em pilares essenciais do desenvolvimento Full-Stack moderno:\n\n1. **Lógica de Negócio Complexa:** implementação de um algoritmo de otimização de agenda, tratando concorrência, restrições e alocação de recursos.\n2. **Ambiente de Desenvolvimento Padrão de Indústria:** uso exclusivo de **Docker (via Laravel Sail)** sobre **WSL2**, garantindo um ambiente de desenvolvimento 100% portátil, isolado e consistente.\n3. **Arquitetura Full-Stack Moderna:** construção de uma Single Page Application (SPA) reativa com **Vue.js 3.4** sem a sobrecarga de uma API REST/GraphQL, utilizando **Inertia.js 2.x** como ponte monolítica moderna.\n4. **Boas Práticas e Escalabilidade:** implementação de uma arquitetura MVC limpa, autorização granular (RBAC com `spatie/laravel-permission`), e uso de Seeders/Migrations para garantir a integridade e manutenção da base de dados.\n\n[⬆️ Voltar ao sumário](#-sumário)\n\n---\n\n## 🏛️ Arquitetura do Sistema\n\nA aplicação opera 100% em containers Docker orquestrados pelo Laravel Sail. O front-end (Vue.js) não é desacoplado; ele é renderizado pelo back-end (Laravel) via Inertia.js, combinando a reatividade de uma SPA com a produtividade de um monólito.\n\n```mermaid\ngraph TD\n    subgraph \"Usuário (Browser)\"\n        A[\"Cliente\"] --\u003e F\n        B[\"Atendente\"] --\u003e F\n        C[\"Admin/Gestor\"] --\u003e F\n    end\n\n    subgraph \"Aplicação (Container Docker: laravel.test)\"\n        F[\"Front-end (Vue.js 3.4 + Inertia.js 2.x)\"]\n        G[\"Back-end (Laravel 11.31 / PHP 8.3)\"]\n        H[\"Sistema de Filas (Queues)\"]\n        I[\"Controle de Acesso (Spatie RBAC)\"]\n        \n        F -- Interage --\u003e G\n        G -- Valida Permissão --\u003e I\n        G -- Despacha Job --\u003e H\n        G -- Lê/Escreve --\u003e DB\n    end\n    \n    subgraph \"Banco de Dados (Container Docker: pgsql)\"\n        DB[\"PostgreSQL 16\"]\n    end\n\n    H -- Processa Job (ex: E-mail) --\u003e G\n```\n\n[⬆️ Voltar ao sumário](#-sumário)\n\n---\n\n## 🛠️ Stack Tecnológica\n\n\u003cdiv align=\"center\"\u003e\n\n|           Tecnologia           |                                                           Logo                                                          | Descrição                             |\n| :----------------------------: | :---------------------------------------------------------------------------------------------------------------------: | :------------------------------------ |\n|        **Laravel 11.31**       |     \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/laravel/laravel-original.svg\" width=\"38\" /\u003e     | Backend robusto, API-less com Inertia |\n|         **Vue.js 3.4**         |           \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vuejs/vuejs-original.svg\" width=\"38\" /\u003e          | Front-end reativo (Composition API)   |\n|       **Inertia.js 2.x**       |   \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/inertiajs/inertiajs-original.svg\" width=\"38\" /\u003e   | Ponte Laravel ↔ Vue sem REST          |\n|      **TailwindCSS 3.2.1**     | \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/tailwindcss/tailwindcss-original.svg\" width=\"38\" /\u003e | Estilização ágil e moderna            |\n|        **PostgreSQL 16**       |      \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/postgresql/postgresql-original.svg\" width=\"38\" /\u003e     | Banco relacional com JSONB            |\n|         **Vite 6.0.11**        |                                   \u003cimg src=\"https://vitejs.dev/logo.svg\" width=\"38\" /\u003e                                  | Build super-rápido                    |\n|    **Docker + Sail (1.47)**    |          \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/docker/docker-original.svg\" width=\"38\" /\u003e         | Ambiente isolado e reproduzível       |\n| **Spatie (RBAC, Media, Logs)** |                                                            🧩                                                           | Permissões, auditoria e mídia         |\n|          **Ziggy 2.x**         |                                                            🧭                                                           | Rotas do Laravel disponíveis no front |\n\n\u003c/div\u003e\n\n[⬆️ Voltar ao sumário](#-sumário)\n\n---\n\n## 🛠️ Stack Tecnológica Detalhada\n\n### Ambiente de Desenvolvimento\n\n* **Containerização:** Docker\n* **Orquestração:** Laravel Sail (`^1.47`)\n* **SO Host (recomendado):** Windows 10/11 + WSL2 (Ubuntu)\n\n### Back-end\n\n* **PHP:** ^8.3\n* **Laravel:** 11.31\n* **Pacotes principais:**\n\n  * `inertiajs/inertia-laravel:^2.0`\n  * `spatie/laravel-permission:*`\n  * `tightenco/ziggy:^2.0`\n  * `laravel/sanctum:^4.0`\n* **Banco:** PostgreSQL 16 (tipos `JSONB`)\n* **Autenticação:** Laravel Breeze `^2.3`\n* **Filas/Jobs:** driver `database` (pronto para Redis)\n\n### Front-end\n\n* **Vue:** ^3.4.0\n* **@inertiajs/vue3:** ^2.0.0\n* **Vite:** ^6.0.11\n* **@vitejs/plugin-vue:** ^5.0.0\n* **TailwindCSS:** ^3.2.1\n* **Axios:** ^1.7.4\n* **Laravel Vite Plugin:** ^1.2.0\n* **Concurrently:** ^9.0.1 (para rodar vários processos em dev)\n\n[⬆️ Voltar ao sumário](#-sumário)\n\n---\n\n## 🗺️ Roadmap do Projeto\n\n* [x] **Fase 0: Ambiente (Setup Profissional)**\n\n  * [x] Configuração do Windows com WSL2 e Docker Desktop.\n  * [x] Instalação do Laravel Sail com container `pgsql`.\n  * [x] Resolução de problemas de rede (WSL/Windows) e performance (Composer).\n* [x] **Fase 1: Fundação (Core)**\n\n  * [x] Instalação e configuração do Laravel Breeze (Vue + Inertia).\n* [x] **Fase 2: Modelagem do Núcleo**\n\n  * [x] Criação das migrações do núcleo (`services`, `branches`, `bays`, `bookings`).\n  * [x] Configuração da conexão de cliente de banco (DBeaver) via IP do WSL2.\n* [x] **Fase 3: Acesso e Lógica**\n\n  * [x] Definição dos relacionamentos Eloquent (Models).\n  * [x] Instalação e configuração do `spatie/laravel-permission`.\n  * [x] Criação do Seeder de Papéis e Permissões.\n* [ ] **Fase 4: Painel Admin (Em Andamento)**\n\n  * [ ] CRUD de Filiais (Branches) e Boxes (Bays).\n  * [ ] CRUD de Serviços (Services).\n  * [ ] CRUD de Usuários e atribuição de papéis.\n* [ ] **Fase 5: O Motor (Core Logic)**\n\n  * [ ] Implementar o serviço de \"disponibilidade\" (verificação de slots).\n  * [ ] Criar a lógica de agendamento (o \"motor de otimização\").\n* [ ] **Fase 6: Front-end do Cliente**\n\n  * [ ] Construir o fluxo de agendamento em Vue.js.\n  * [ ] Criar o painel \"Meus Agendamentos\".\n\n[⬆️ Voltar ao sumário](#-sumário)\n\n---\n\n## 🚀 Guia de Instalação e Execução\n\nEste projeto é 100% containerizado. Siga os passos no ambiente recomendado (Windows/WSL2) para uma instalação sem erros.\n\n### Pré-requisitos (Obrigatórios)\n\n1.  **Git:** [Instale o Git](https://www.google.com/search?q=https://git-scm.com/downloads) para clonar o repositório.\n2.  **WSL2 (Subsistema Windows para Linux):**\n      * Siga o [guia oficial da Microsoft](https://learn.microsoft.com/pt-br/windows/wsl/install) para instalar.\n      * Após a instalação, instale uma distribuição (ex: **Ubuntu**) pela Microsoft Store.\n3.  **Docker Desktop for Windows:**\n      * Baixe e instale [pelo site oficial](https://www.docker.com/products/docker-desktop/).\n      * Durante a instalação, garanta que a opção \"Use WSL 2 instead of Hyper-V\" esteja **marcada**.\n\n\u003e **Nota Importante:** Você **não** precisa instalar PHP, Node.js, Composer ou PostgreSQL na sua máquina Windows. O Laravel Sail gerencia 100% dessas dependências dentro dos containers Docker.\n\n### Passo 0: Configuração Crítica do Docker\n\nAntes de começar, garanta que seu Docker Desktop está integrado ao WSL2:\n\n1.  Abra o Docker Desktop.\n2.  Vá em **Settings \\\u003e Resources \\\u003e WSL Integration**.\n3.  Certifique-se de que a opção \"Enable integration with my additional distros\" esteja **ATIVADA** para a sua distribuição (ex: \"Ubuntu\").\n\n### Passo 1: Terminal e Clonagem\n\n\u003e ❗**NÃO USE o Git Bash, CMD ou PowerShell.** Todos os comandos a seguir devem ser executados de dentro do seu **Terminal Ubuntu (WSL2)**.\n\n1.  Abra o terminal **Ubuntu** (pelo Menu Iniciar).\n\n2.  Navegue até o diretório onde você armazena seus projetos no Windows (ex: `C:\\Dev` vira `/mnt/c/Dev/`):\n\n    ```bash\n    # Exemplo de navegação\n    cd /mnt/c/Dev/\n\n    # Clonar o repositório\n    git clone [https://github.com/seu-usuario/aquashift.git](https://github.com/seu-usuario/aquashift.git)\n    cd aquashift\n    ```\n\n### Passo 2: Configurar o `.env`\n\nO Sail precisa do arquivo `.env` para configurar os containers.\n\n```bash\n# Copia o arquivo de exemplo\ncp .env.example .env\n```\n\nAbra o projeto no VSCode (no terminal, digite `code .`) e **verifique** seu arquivo `.env`. O `DB_HOST` deve ser o nome do serviço do Docker, não `localhost`.\n\nGaranta que seu bloco `DB_` esteja assim:\n\n```dotenv\nDB_CONNECTION=pgsql\nDB_HOST=pgsql\nDB_PORT=5432\nDB_DATABASE=aquashift_db\nDB_USERNAME=sail\nDB_PASSWORD=password\n```\n\n### Passo 3: Instalação e Execução (Sail)\n\nVamos instalar as dependências do Composer (usando um container temporário) e depois subir o ambiente.\n\n```bash\n# Cria o atalho \"sail\" (só precisa uma vez)\necho \"alias sail='./vendor/bin/sail'\" \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n\n# 1. Instala as dependências do Composer (PHP)\n# (Usamos um container 'docker run' para a primeira instalação)\ndocker run --rm \\\n    -u \"$(id -u):$(id -g)\" \\\n    -v \"$(pwd):/var/www/html\" \\\n    -w /var/www/html \\\n    laravelsail/php83-composer:latest \\\n    composer install --ignore-platform-reqs\n\n# 2. Sobe os containers (PHP, PostgreSQL) em segundo plano\n# (Isso vai baixar as imagens e pode demorar 10-15 min na primeira vez)\nsail up -d\n```\n\n### Passo 4: Finalização do Setup\n\nCom os containers no ar, vamos finalizar a instalação do app.\n\n```bash\n# 1. Gere a chave do App\nsail artisan key:generate\n\n# 2. Instale as dependências do Front-end (Node.js)\nsail npm install\n\n# 3. Rode as migrações (cria as tabelas) e os seeders (cria os papéis)\nsail artisan migrate:fresh --seed\n\n# 4. Compile os assets do front-end\nsail npm run dev\n```\n\n### Passo 5: Acesso ao Sistema\n\nA aplicação está 100% operacional.\n\n  * **URL da Aplicação:** [http://localhost](https://www.google.com/search?q=http://localhost)\n  * **Monitor de E-mails (Mailpit):** [http://localhost:8025](https://www.google.com/search?q=http://localhost:8025)\n\n[⬆️ Voltar ao sumário](#-sumário)\n\n---\n\n## ⚠️ Solução de Problemas (Troubleshooting)\n\nEsta seção documenta problemas comuns encontrados durante o setup no ambiente Windows/WSL2.\n\n#### 1\\. Erro: `exceeded the timeout of 300 seconds` (Composer)\n\n  * **Contexto:** Ao rodar `sail composer require ...` ou `sail composer update`.\n  * **Causa:** A comunicação de I/O de arquivos entre o WSL2 (Linux) e o `vendor/` (Windows) é lenta, fazendo o Composer \"desistir\".\n  * **Solução:** Diga ao Composer para ter um tempo limite ilimitado:\n    ```bash\n    sail composer config --global process-timeout 0\n    # E então tente o comando 'update' ou 'require' novamente\n    sail composer update\n    ```\n\n#### 2\\. Erro: `FATAL: password authentication failed` (DBeaver / DataGrip)\n\n  * **Contexto:** Ao tentar conectar um cliente de banco de dados (DBeaver, DataGrip) rodando no Windows ao banco de dados do container.\n  * **Causa:** A \"ponte\" de rede entre o `localhost` do Windows e o `localhost` do WSL2/Docker falha. O cliente não encontra o container na porta `5432`.\n  * **Solução:** Não use `localhost`. Conecte-se usando o IP real da sua máquina WSL2:\n    1.  No seu **terminal Ubuntu (WSL2)**, encontre seu IP:\n        ```bash\n        ip addr show eth0 | grep \"inet \" | awk '{print $2}' | cut -d/ -f1\n        ```\n    2.  Ele retornará um IP (ex: `172.20.10.11`).\n    3.  Use **esse IP** no campo \"Host\" do seu cliente de banco de dados.\n    4.  As credenciais são as do seu `.env` (`aquashift_db`, `sail`, `password`).\n\n#### 3\\. Erro: `bash: ./sail: No such file or directory`\n\n  * **Causa:** Você está tentando rodar o comando `sail` de um terminal Windows (CMD, PowerShell ou Git Bash). O Sail foi projetado para rodar em ambientes Linux.\n  * **Solução:** **Feche** esse terminal. Use **apenas** o terminal do **Ubuntu (WSL2)**, que você pode abrir pelo Menu Iniciar do Windows.\n\n#### 4. Erro: `ERESOLVE unable to resolve dependency tree` (NPM / Vite)\n\n* **Contexto:** Ao rodar `sail npm install` pela primeira vez, caso o `package.json` esteja desatualizado.\n* **Causa:** O instalador do Laravel Breeze (`breeze:install`) pode, em alguns momentos, gerar um `package.json` com versões de pacotes que parecem conflitantes.\n* **Solução:** O arquivo `package.json` neste repositório **já está validado** e alinhado. Se, por algum motivo, você enfrentar este erro após uma atualização, garanta que as versões do `vite` e `@vitejs/plugin-vue` estejam compatíveis. As versões funcionais usadas neste projeto são:\n    ```json\n    \"devDependencies\": {\n        ...\n        \"@vitejs/plugin-vue\": \"^5.0.0\",\n        ...\n        \"vite\": \"^6.0.11\",\n        ...\n    }\n    ```\n\n[⬆️ Voltar ao sumário](#-sumário)\n\n---\n\n## 🪞 **Contribuição**\n\nContribuições são bem-vindas!\nSiga as boas práticas do repositório, mantendo **commits semânticos** e **pull requests limpos**.\n\n```bash\nfeat: adiciona engine de otimização\nfix: corrige conflito de horários duplicados\n```\n\n---\n\n## 👩‍🎓 Autoria\n\n\u003cimg src=\"https://github.com/angelluzk.png\" width=\"100px;\" alt=\"Foto de Angel Luz\"/\u003e\n\n\u003e Desenvolvido com 💛 por **Angel Luz**.\n\nSe quiser conversar, colaborar ou oferecer uma oportunidade:\n\n📬 E-mail: [contatoangelluz@gmail.com](mailto:contatoangelluz@gmail.com)  \n🐙 GitHub: [@angelluzk](https://github.com/angelluzk)  \n💼 LinkedIn: [linkedin.com/in/angelitaluz](https://www.linkedin.com/in/angelitaluz/)  \n🗂️Website / Portfólio: [meu_portfolio/](https://angelluzk.github.io/meu_portfolio/) \n\n-----\n\n\u003cdiv align=\"center\"\u003e\n\n\u003e “Transformando código em fluxo, e ideias em movimento.”\n\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelluzk%2Faquashift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangelluzk%2Faquashift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelluzk%2Faquashift/lists"}