{"id":50334444,"url":"https://github.com/r4mpo/batatais-servicos","last_synced_at":"2026-05-29T12:30:56.818Z","repository":{"id":348400681,"uuid":"1183818632","full_name":"r4mpo/batatais-servicos","owner":"r4mpo","description":"MVP desenvolvido com PHP, Laravel, Bootstrap, JavaScript e jQuery, com conexão MySQL, seguindo arquitetura SSR Monolith.","archived":false,"fork":false,"pushed_at":"2026-05-25T19:25:27.000Z","size":454,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T21:25:05.491Z","etag":null,"topics":["bootstrap","jquery","js","laravel","monolith","php","ssr"],"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/r4mpo.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":"2026-03-17T01:26:16.000Z","updated_at":"2026-05-25T19:25:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/r4mpo/batatais-servicos","commit_stats":null,"previous_names":["r4mpo/batatais-servicos"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/r4mpo/batatais-servicos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fbatatais-servicos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fbatatais-servicos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fbatatais-servicos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fbatatais-servicos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/r4mpo","download_url":"https://codeload.github.com/r4mpo/batatais-servicos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r4mpo%2Fbatatais-servicos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33652977,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"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":["bootstrap","jquery","js","laravel","monolith","php","ssr"],"created_at":"2026-05-29T12:30:54.982Z","updated_at":"2026-05-29T12:30:56.810Z","avatar_url":"https://github.com/r4mpo.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🥔 Batatais Serviços\n\n\u003e Plataforma web para conectar **clientes (contratantes)** e **profissionais de serviços** em Batatais e região — listagem pública, cadastro, verificação, histórico de serviços e resumo financeiro do profissional.\n\n[![PHP](https://img.shields.io/badge/PHP-8.2%2B-777BB4?logo=php\u0026logoColor=white)](https://www.php.net/)\n[![Laravel](https://img.shields.io/badge/Laravel-12-FF2D20?logo=laravel\u0026logoColor=white)](https://laravel.com/)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n\n---\n\n## 📋 Índice\n\n- [Sobre o projeto](#-sobre-o-projeto)\n- [Stack tecnológica](#-stack-tecnológica)\n- [Arquitetura](#-arquitetura)\n- [Requisitos](#-requisitos)\n- [Instalação passo a passo](#-instalação-passo-a-passo)\n- [Banco de dados e migrations](#-banco-de-dados-e-migrations)\n- [Seeders](#-seeders)\n- [Executando o projeto](#-executando-o-projeto)\n- [Testes](#-testes)\n- [Rotas principais](#-rotas-principais)\n- [Perfis de usuário](#-perfis-de-usuário)\n- [Modelo de serviços](#-modelo-de-serviços)\n- [Internacionalização](#-internacionalização)\n- [Estrutura de pastas](#-estrutura-de-pastas)\n- [Produtividade com Cursor](#-produtividade-com-cursor)\n- [Próximos passos](#-próximos-passos)\n- [Licença](#-licença)\n\n---\n\n## 🎯 Sobre o projeto\n\nO **Batatais Serviços** é um marketplace local de prestação de serviços. Hoje a aplicação oferece:\n\n| Área | O que já existe |\n|------|-----------------|\n| 🏠 **Página inicial** | Apresentação, categorias e destaques |\n| 🔍 **Diretório** | Listagem pública em `/profissionais` com filtros |\n| 👤 **Autenticação** | Registro, login, verificação de e-mail (Laravel Breeze) |\n| 🧑‍🔧 **Profissional** | Onboarding, arquivos (foto, documentos, vitrine), solicitação de selo de verificação |\n| 📊 **Dashboard** | Hub do profissional com resumo financeiro baseado em serviços concluídos |\n| 📜 **Histórico** | Lista estilizada dos serviços do profissional com endereço, período, valores e feedbacks |\n\nO projeto prioriza **código legível**, convenções Laravel e separação em camadas (Controllers finos, Services, Repositories, Enums).\n\n---\n\n## 🛠 Stack tecnológica\n\n| Camada | Tecnologia |\n|--------|------------|\n| Backend | **PHP 8.2+**, **Laravel 12** |\n| Autenticação | **Laravel Breeze** (sessão, Blade) |\n| Banco | **SQLite** (padrão local) ou **MySQL/MariaDB** |\n| Front (assets) | **Vite 7**, **Tailwind CSS 3**, **Alpine.js** |\n| UI pública | **Bootstrap 5**, **Font Awesome 6** |\n| Testes | **PHPUnit 11** |\n| Qualidade | **Laravel Pint** |\n\n---\n\n## 🏗 Arquitetura\n\nA aplicação segue uma **arquitetura em camadas** inspirada no padrão Laravel, com responsabilidades bem definidas:\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│  Browser (Blade + Bootstrap / CSS dedicado por página)          │\n└────────────────────────────┬────────────────────────────────────┘\n                             │\n┌────────────────────────────▼────────────────────────────────────┐\n│  Routes (web.php, auth.php) + Middleware                        │\n│  • auth, verified                                               │\n│  • EnsureProfessionalRegistrationComplete                       │\n└────────────────────────────┬────────────────────────────────────┘\n                             │\n┌────────────────────────────▼────────────────────────────────────┐\n│  Controllers (HTTP) — orquestram request/response               │\n│  Ex.: DashboardController, ProfessionalServiceHistoryController │\n└────────────────────────────┬────────────────────────────────────┘\n                             │\n        ┌────────────────────┼────────────────────┐\n        ▼                    ▼                    ▼\n┌───────────────┐   ┌─────────────────┐   ┌──────────────────┐\n│ Form Requests │   │ Services        │   │ Repositories     │\n│ (validação)   │   │ (regras de      │   │ (consultas       │\n│               │   │  negócio)       │   │  complexas)      │\n└───────────────┘   └────────┬────────┘   └────────┬─────────┘\n                             │                     │\n                             └──────────┬──────────┘\n                                        ▼\n                             ┌──────────────────┐\n                             │ Models (Eloquent) │\n                             │ Enums, Support    │\n                             └────────┬─────────┘\n                                      ▼\n                             ┌──────────────────┐\n                             │ MySQL / SQLite    │\n                             └──────────────────┘\n```\n\n### 📦 Camadas em detalhe\n\n| Pasta | Papel |\n|-------|--------|\n| `app/Http/Controllers` | Entrada HTTP; delega lógica pesada para Services |\n| `app/Http/Requests` | Validação e normalização (CPF, valores em reais, uploads) |\n| `app/Http/Middleware` | Regras transversais (ex.: profissional sem cadastro → redirect setup) |\n| `app/Services` | Casos de uso: onboarding, arquivos, verificação, listagem |\n| `app/Repositories` | Queries reutilizáveis (profissionais, profissões, usuários) |\n| `app/Models` | Entidades Eloquent + relacionamentos |\n| `app/Enums` | Estados tipados (ex.: `ServiceStatus`) |\n| `app/Support` | Utilitários (documentos brasileiros, formatação) |\n| `resources/views` | Blade; CSS em `public/css/` por feature |\n| `lang/pt_BR` e `lang/en` | Traduções centralizadas em `labels.php` |\n| `database/migrations` | Versionamento do schema |\n| `database/seeders` | Dados de demonstração |\n\n### 🔐 Fluxo do profissional (simplificado)\n\n```mermaid\nflowchart LR\n    A[Registro / Login] --\u003e B{Perfil 001?}\n    B --\u003e|Sim| C{Cadastro em professionals?}\n    C --\u003e|Não| D[/area-profissional/cadastro]\n    C --\u003e|Sim| E[Dashboard]\n    E --\u003e F[Histórico de serviços]\n    E --\u003e G[Arquivos / Verificação]\n```\n\n### 💰 Resumo financeiro (profissional)\n\nValores calculados a partir da tabela `services`:\n\n- **Disponível para saque**: serviços com status **Concluído (7)** e `value_withdrawn = false` (soma bruta).\n- **Líquido disponível**: 90% do disponível (taxa de plataforma de 10%).\n- **Total sacado / Líquido sacado**: mesma lógica para serviços concluídos já sacados.\n\nImplementação em `App\\Models\\Service::financeSummaryForProfessionalUser()`.\n\n---\n\n## ✅ Requisitos\n\nAntes de instalar, garanta:\n\n| Ferramenta | Versão mínima |\n|------------|----------------|\n| PHP | 8.2 (extensões: `mbstring`, `openssl`, `pdo`, `tokenizer`, `xml`, `ctype`, `json`, `fileinfo`) |\n| Composer | 2.x |\n| Node.js | 18+ (recomendado 20+) |\n| npm | 9+ |\n\nOpcional: **MySQL 8+** ou **MariaDB** para ambientes que não usem SQLite.\n\n---\n\n## 🚀 Instalação passo a passo\n\n### 1️⃣ Clonar o repositório\n\n```bash\ngit clone \u003curl-do-repositorio\u003e batatais-servicos\ncd batatais-servicos\n```\n\n### 2️⃣ Instalar dependências PHP\n\n```bash\ncomposer install\n```\n\n### 3️⃣ Configurar ambiente\n\n```bash\ncp .env.example .env\nphp artisan key:generate\n```\n\nEdite o `.env` conforme necessário. Exemplo para **SQLite** (padrão do projeto):\n\n```env\nAPP_NAME=\"Batatais Serviços\"\nAPP_URL=http://127.0.0.1:8000\nAPP_LOCALE=pt_BR\nAPP_FALLBACK_LOCALE=pt_BR\n\nDB_CONNECTION=sqlite\n# DB_DATABASE usa database/database.sqlite por padrão no Laravel\n```\n\nCrie o arquivo do banco, se ainda não existir:\n\n```bash\n# Windows (PowerShell)\nNew-Item -ItemType File -Path database\\database.sqlite -Force\n\n# Linux / macOS\ntouch database/database.sqlite\n```\n\nExemplo para **MySQL**:\n\n```env\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=batatais_servicos\nDB_USERNAME=root\nDB_PASSWORD=sua_senha\n```\n\n### 4️⃣ Rodar migrations\n\n```bash\nphp artisan migrate\n```\n\nPara ambiente limpo (⚠️ apaga todos os dados):\n\n```bash\nphp artisan migrate:fresh\n```\n\n### 5️⃣ Popular o banco (seeders)\n\n```bash\nphp artisan db:seed\n```\n\nOu um seeder específico:\n\n```bash\nphp artisan db:seed --class=ServiceDemoSeeder\n```\n\n### 6️⃣ Instalar e compilar assets front-end\n\n```bash\nnpm install\nnpm run build\n```\n\n### 7️⃣ Link simbólico de storage (uploads)\n\n```bash\nphp artisan storage:link\n```\n\n### ⚡ Instalação rápida (script Composer)\n\nO projeto inclui um atalho que executa boa parte do fluxo:\n\n```bash\ncomposer setup\n```\n\nEquivale a: `composer install` → copiar `.env` → `key:generate` → `migrate` → `npm install` → `npm run build`.\n\n\u003e Depois do `composer setup`, rode `php artisan db:seed` manualmente se quiser dados de demonstração.\n\n---\n\n## 🗄 Banco de dados e migrations\n\nAs migrations ficam em `database/migrations/`. Principais tabelas:\n\n| Tabela | Descrição |\n|--------|-----------|\n| `users` | Contas; campo `profile` (`000` contratante, `001` profissional) |\n| `practice_areas` | Áreas de atuação (agrupamento) |\n| `professions` | Profissões/categorias |\n| `professionals` | Cadastro do anúncio (título, descrição, valor/hora, documentos) |\n| `professional_availabilities` | Disponibilidade por dia da semana |\n| `professional_reviews` | Avaliações na listagem |\n| `professional_files` | Fotos e documentos (público / verificação) |\n| `professional_verification_requests` | Fila de selo de verificação |\n| `services` | Serviços entre contratante e profissional |\n\n### Criar uma nova migration\n\n```bash\nphp artisan make:migration create_nome_da_tabela_table\n# ou alteração:\nphp artisan make:migration add_campo_to_tabela_table --table=tabela\n```\n\nExemplo de estrutura (padrão do projeto):\n\n```php\nSchema::create('services', function (Blueprint $table) {\n    $table-\u003eid();\n    $table-\u003eforeignId('contractor_user_id')-\u003econstrained('users')-\u003ecascadeOnUpdate()-\u003erestrictOnDelete();\n    $table-\u003eforeignId('professional_user_id')-\u003econstrained('users')-\u003ecascadeOnUpdate()-\u003erestrictOnDelete();\n    $table-\u003eunsignedTinyInteger('status');\n    $table-\u003eunsignedBigInteger('service_value_cents');\n    $table-\u003eboolean('value_withdrawn')-\u003edefault(false);\n    $table-\u003etimestamps();\n    $table-\u003esoftDeletes();\n});\n```\n\nAplicar:\n\n```bash\nphp artisan migrate\n```\n\nReverter último lote:\n\n```bash\nphp artisan migrate:rollback\n```\n\n---\n\n## 🌱 Seeders\n\nSeeders vivem em `database/seeders/` e são registrados no `DatabaseSeeder`:\n\n```php\n$this-\u003ecall([\n    PracticeAreaSeeder::class,\n    ProfessionSeeder::class,\n    ProfessionalDemoSeeder::class,\n    ServiceDemoSeeder::class,\n]);\n```\n\n| Seeder | Função |\n|--------|--------|\n| `PracticeAreaSeeder` | Áreas de prática (categorias macro) |\n| `ProfessionSeeder` | Centenas de profissões com ícones e slugs |\n| `ProfessionalDemoSeeder` | ~14 profissionais demo + avaliações e disponibilidade |\n| `ServiceDemoSeeder` | Serviços de exemplo para `profissional.demo.1@example.test` |\n\n### Criar um novo seeder\n\n```bash\nphp artisan make:seeder MeuNovoSeeder\n```\n\nTemplate mínimo:\n\n```php\n\u003c?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass MeuNovoSeeder extends Seeder\n{\n    public function run(): void\n    {\n        // User::factory(10)-\u003ecreate();\n        // Model::query()-\u003ecreate([...]);\n    }\n}\n```\n\nRegistre no `DatabaseSeeder` ou execute isolado:\n\n```bash\nphp artisan db:seed --class=MeuNovoSeeder\n```\n\n### 👤 Credenciais de teste (após seed)\n\nProfissionais demo seguem o padrão de e-mail:\n\n```text\nprofissional.demo.1@example.test\nprofissional.demo.2@example.test\n...\n```\n\nA senha é gerada pelo `UserFactory` (consulte `database/factories/UserFactory.php`). Para login manual após seed, crie um usuário com:\n\n```bash\nphp artisan tinker\n```\n\n```php\n\\App\\Models\\User::factory()-\u003ecreate([\n    'email' =\u003e 'teste@example.test',\n    'password' =\u003e bcrypt('senha-segura'),\n    'profile' =\u003e \\App\\Models\\User::PROFILE_PROFESSIONAL,\n]);\n```\n\n\u003e O `ServiceDemoSeeder` só insere dados se o profissional `profissional.demo.1@example.test` existir e ainda não houver serviços para ele.\n\n---\n\n## ▶️ Executando o projeto\n\n### Modo desenvolvimento (recomendado)\n\nSobe servidor PHP, fila, logs e Vite em paralelo:\n\n```bash\ncomposer dev\n```\n\n### Modo manual\n\nTerminal 1:\n\n```bash\nphp artisan serve\n```\n\nTerminal 2:\n\n```bash\nnpm run dev\n```\n\nAcesse: **http://127.0.0.1:8000**\n\n### Formatar código PHP\n\n```bash\nvendor/bin/pint\n# ou apenas arquivos alterados:\nvendor/bin/pint --dirty\n```\n\n---\n\n## 🧪 Testes\n\n```bash\ncomposer test\n# equivalente a:\nphp artisan config:clear --ansi\nphp artisan test\n```\n\nTestes de feature ficam em `tests/Feature/` (onboarding, autenticação, verificação, etc.).\n\n---\n\n## 🗺 Rotas principais\n\n| Método | URI | Nome | Descrição |\n|--------|-----|------|-----------|\n| GET | `/` | `home` | Página inicial |\n| GET | `/profissionais` | `professionals.index` | Diretório público |\n| GET | `/dashboard` | `dashboard` | Painel (auth) |\n| GET | `/area-profissional/cadastro` | `professional.setup` | Onboarding profissional |\n| GET | `/area-profissional/historico-servicos` | `professional.services.history` | Histórico de serviços |\n| GET | `/area-profissional/arquivos` | `professional.files` | Fotos e documentos |\n| GET | `/area-profissional/verificacao` | `professional.verificacao` | Solicitar selo |\n| GET | `/profile` | `profile.edit` | Perfil da conta |\n\nRotas de autenticação: `routes/auth.php` (login, registro, reset de senha, verificação de e-mail).\n\n---\n\n## 👥 Perfis de usuário\n\nConstantes em `App\\Models\\User`:\n\n```php\nconst PROFILE_CONTRACTOR = '000';    // Cliente / contratante\nconst PROFILE_PROFESSIONAL = '001';  // Prestador de serviços\n\npublic function isProfessional(): bool\n{\n    return $this-\u003eprofile === self::PROFILE_PROFESSIONAL;\n}\n```\n\nNo registro, o usuário escolhe o perfil; profissionais passam pelo middleware `EnsureProfessionalRegistrationComplete` até completar `professionals`.\n\n---\n\n## 📋 Modelo de serviços\n\nEnum `App\\Enums\\ServiceStatus`:\n\n| Código | Significado |\n|--------|-------------|\n| 1 | Pagamento pendente |\n| 2 | Em análise |\n| 3 | Aceito pelo profissional |\n| 4 | Em fase de prestação |\n| 5 | Manutenção |\n| 6 | Suporte |\n| 7 | Concluído |\n\nCampos principais em `services` (além de status e valor):\n\n- `title`, `description`\n- Endereço: `address_postal_code`, `address_street`, `address_number`, `address_complement`, `address_neighborhood`, `address_city`, `address_state`\n- Agendamento: `scheduled_start_date`, `scheduled_end_date`, `scheduled_start_time`, `scheduled_end_time`\n- `contractor_feedback`, `professional_feedback`, `value_withdrawn`\n\nExemplo de consulta no histórico:\n\n```php\nService::query()\n    -\u003ewith('contractor:id,name,email')\n    -\u003ewhere('professional_user_id', $user-\u003eid)\n    -\u003eorderByDesc('created_at')\n    -\u003epaginate(12);\n```\n\n---\n\n## 🌐 Internacionalização\n\nTextos de interface em:\n\n- `lang/pt_BR/labels.php` (principal)\n- `lang/en/labels.php`\n\nConfigure no `.env`:\n\n```env\nAPP_LOCALE=pt_BR\nAPP_FALLBACK_LOCALE=pt_BR\n```\n\nUso nas views:\n\n```blade\n{{ __('labels.dashboard_finance_title') }}\n```\n\n---\n\n## 📁 Estrutura de pastas (resumo)\n\n```text\nbatatais-servicos/\n├── app/\n│   ├── Enums/              # ServiceStatus, etc.\n│   ├── Http/\n│   │   ├── Controllers/\n│   │   ├── Middleware/\n│   │   └── Requests/\n│   ├── Models/\n│   ├── Repositories/\n│   ├── Services/\n│   └── Support/\n├── database/\n│   ├── migrations/\n│   ├── seeders/\n│   └── factories/\n├── lang/\n│   ├── pt_BR/\n│   └── en/\n├── public/\n│   ├── css/                # dashboard.css, service-history.css, ...\n│   └── img/\n├── resources/\n│   └── views/\n│       ├── professional/\n│       ├── profile/\n│       └── layouts/\n├── routes/\n│   ├── web.php\n│   └── auth.php\n└── tests/\n```\n\n---\n\n## ⚡ Produtividade com Cursor\n\n\u003e **Este projeto foi desenvolvido e evoluído com forte apoio do [Cursor](https://cursor.com) — e a diferença na velocidade de entrega é enorme.**\n\nO **Cursor** não é “só mais um editor”: é um ambiente onde IA e código convivem no mesmo fluxo de trabalho. Para o Batatais Serviços, isso significou:\n\n| Benefício | Na prática |\n|-----------|------------|\n| 🧠 **Contexto do repositório** | A IA lê migrations, models, seeders e padrões existentes antes de sugerir código — menos divergência de nomenclatura (`snake_case`, soft deletes, FKs). |\n| 🔁 **Refatoração segura** | Renomear campos, criar Enums, extrair Services e atualizar Blade/labels em lote, com revisão humana. |\n| 📐 **Scaffolding alinhado** | Migrations, seeders, controllers e views seguindo o que já existe no projeto, não um Laravel genérico. |\n| 🐛 **Debug mais rápido** | Erros de migration, rotas e Eloquent investigados com o terminal e os arquivos abertos no mesmo chat. |\n| 📚 **Documentação viva** | Este README, comentários em middleware e docblocks em português gerados e mantidos junto com o código. |\n\n### Como tirar o máximo proveito\n\n1. **Descreva o padrão** — “siga as outras tabelas”, “use `labels.php`”, “controller fino + service”.\n2. **Peça mudanças pequenas e encadeadas** — migration → model → seeder → view → rota.\n3. **Use o Agent com o projeto aberto** — ele executa `artisan migrate`, `db:seed` e testes quando necessário.\n4. **Revise sempre** — IA acelera; você valida regra de negócio, segurança e UX.\n\n**Conclusão:** para um time pequeno ou um desenvolvedor solo construindo uma plataforma completa (auth, uploads, verificação, serviços, financeiro), o Cursor reduz drasticamente o tempo entre “ideia” e “PR mergeável”. **Recomendamos fortemente** Cursor (ou fluxo equivalente Agent + codebase indexing) para continuar os próximos passos listados abaixo.\n\n---\n\n## 🗓 Próximos passos\n\nRoadmap planejado para evolução da plataforma:\n\n### 1. 📄 Paginação do histórico de serviços do profissional\n\nRefinar a paginação em `/area-profissional/historico-servicos` (já existe `paginate(12)` no controller): filtros por status, busca por título/contratante, ordenação e UX mobile da navegação entre páginas.\n\n### 2. 🖼 Página de perfil / portfólio do profissional\n\nPágina pública (ou semi-pública) com **todas** as informações condizentes: bio, profissão, valor/hora, disponibilidade, fotos da vitrine, avaliações, selo de verificação e CTA para contratar.\n\n### 3. 💬 Sistema de mensagens\n\nCanal de comunicação **cliente ↔ profissional** (threads por serviço ou por contato), com notificações e histórico persistente.\n\n### 4. 📝 Controle de serviços (fluxo do cliente)\n\nFluxo em que o **cliente cria** o serviço, define valor e período, **paga** (inicialmente simulado / sem gateway) e o **profissional aceita** ou recusa — integrado ao enum de status existente.\n\n### 5. 💳 Pagamentos, saques e estornos\n\nIntegração com gateway para:\n\n- pagamento de **serviços**;\n- taxa/saque do profissional (`value_withdrawn`, resumo financeiro);\n- pagamentos relacionados ao **selo de verificação** e estornos quando aplicável.\n\n### 6. 🏠 Dashboard do cliente (contratante)\n\nPainel enxuto com apenas:\n\n- **histórico de serviços** (como contratante);\n- **histórico de mensagens**.\n\nSem duplicar cards do fluxo profissional.\n\n### 7. 🌐 Conteúdo institucional e estatísticas reais\n\n- Redes sociais e contatos configuráveis;\n- páginas **Termos de uso**, **Sobre nós**, política de privacidade;\n- substituir números estáticos da home por **métricas reais** (profissionais ativos, serviços concluídos, etc.).\n\n---\n\n## 📄 Licença\n\nEste projeto está sob a licença [MIT](LICENSE), salvo dependências de terceiros com licenças próprias (Laravel, Bootstrap, etc.).\n\n---\n\n\u003cp align=\"center\"\u003e\n  Feito com ☕ e \u003cstrong\u003eCursor\u003c/strong\u003e para Batatais e região 🥔\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr4mpo%2Fbatatais-servicos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fr4mpo%2Fbatatais-servicos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr4mpo%2Fbatatais-servicos/lists"}