feat: CTA orientação WhatsApp para indecisos (MAN-127) (#7)
All checks were successful
CI / static (push) Successful in 2m33s
CI / unit (push) Successful in 3m39s
CI / feature (push) Successful in 2m49s
CI / container (push) Successful in 20s
CI / browser (push) Successful in 4m9s

## Summary

- CTA orientação (banda “Ainda não sabe?”) na home e em `/servicos` abre WhatsApp com mensagem distinta; sem número oficial, cai em `/briefing`.
- Glossário canônico em `SPEC.md` §8.0 (Vertente, Modalidade, Briefing, Contato parceiro, CTA contextual, CTA orientação). Sem `CONTEXT.md` paralelo.
- Linear: https://linear.app/maneco-workspace/issue/MAN-127/ajustar-ctas-consultivos-no-whatsapp-e-briefing-comercial

## Test plan

- [x] Feature: `HomePageContentTest` + `ServicesPageCtaTest` (17 passed)
- [ ] CI Gitea (static, unit, feature, browser, container)
- [ ] Conferir banda de modalidades com e sem `whatsapp_number` no Filament

Reviewed-on: #7
Co-authored-by: manoel freitas <manoel.josefneto@gmail.com>
Co-committed-by: manoel freitas <manoel.josefneto@gmail.com>
This commit was merged in pull request #7.
This commit is contained in:
2026-08-14 02:35:06 +00:00
committed by manoel-freitas
parent dfd9763029
commit fd3a4eb5f1
9 changed files with 122 additions and 48 deletions

View File

@@ -67,7 +67,7 @@ Site-wide content is a singleton row reached via `SiteSetting::instance()`. Publ
- **Livewire/Filament temp uploads are pinned to the `local` disk** when `FILESYSTEM_DISK=r2`, because the S3 driver would make the browser PUT straight to R2 and hit CORS. Final media still lands on `r2` via `App\Support\PublicImageUploadRules`. Set `LIVEWIRE_TEMPORARY_FILE_UPLOAD_DISK` explicitly to override.
- **Contact form is rate limited**: named limiter `contact-briefing`, 5/min per IP, registered in `AppServiceProvider` and applied in `routes/web.php`.
- **Filament 5 nested resource layout**: resources are split into `app/Filament/Resources/<Resource>/{Pages,Schemas,Tables,RelationManagers}` rather than a flat resource class. Follow the existing shape in `Resources/PortfolioCases/`.
- **Everything user-facing is pt-BR**: routes are `/servicos`, `/portfolio`, `/portfolio/{slug}`, `/sobre`, `/privacidade`, `/contato`. `APP_LOCALE=pt_BR`, `APP_TIMEZONE=America/Sao_Paulo` (`config/app.php:68`).
- **Everything user-facing is pt-BR**: routes are `/servicos`, `/pacotes/{slug}`, `/portfolio`, `/portfolio/{slug}`, `/sobre`, `/briefing`, `/contato`, `/privacidade`. `APP_LOCALE=pt_BR`, `APP_TIMEZONE=America/Sao_Paulo` (`config/app.php:68`). Glossário canônico: `SPEC.md` §8.0.
- **Design tokens** live in `resources/css/tokens.css` (Heritage Editorial; see `DESIGN.md`). `tests/Feature/PublicSite/HeritageEditorialTokensTest.php` reads that file and asserts the exact hex values, `EB Garamond`, zero border radii, `--amare-container-max: 1120px`, and the *absence* of shadow tokens — so any token edit is a deliberate test change too. Motion lives in `resources/js/motion.js` and is asserted by `tests/Feature/PublicSite/MotionMarkupTest.php` + `tests/Browser/MotionTest.php`.
## Navigating the normative docs