# Page patterns (`page-patterns.md`)

Authoritative programmatic array lives in `resources/design-system/page-patterns.php`.

Each blueprint below follows the required fields:

```
Route convention · Controller/view · Goal · Conversion hooks · Required sections · SEO/metadata · Internal linking checklist · AI regeneration prompt sketch
```

> **Important:** `/blog/**` URLs are **not present** yet in `routes/web.php`; the blueprint is forward-looking until CMS wiring ships.

---

## Homepage

| Field | Detail |
| --- | --- |
| Route(s) | `home`, localized |
| URLs | `/`, `/{locale}/` |
| Controller | `HomeController@index` |
| View | `pages/home.blade.php` |
| Business goal | Brand trust + directional routing to strongest services/industries |
| Conversion goal | Primary hero CTA (contact / schedule) + service cards |
| Required sections | Hero w/ accent span, service highlights, trust/social proof stack, FAQ + schema, explore cross-sell |
| SEO | `SeoHelper::getPageSeo('home')`, FAQ JSON-LD, LocalBusiness/WebPage payloads |
| Internal linking | Header mega/footer + contextual cross modules |
| Checklist | LCP preload image, OG image section, headline translation parity |
| **AI prompt scaffold** | `Clone home.blade.php structure; DO NOT rename routes; maintain schema stacks; localize via SeoHelper; preserve hero preload section` |

---

## About

| Field | Detail |
| --- | --- |
| Route | `about.index` (+ localized) |
| Controller | `AboutController` |
| View | `pages/about.blade.php` |
| Goal | Authority credibility |
| Sections | Narrative arcs, timelines/team placeholders, testimonials if data |
| SEO | Standard `@section('title/meta_description')` |
| Prompt | `Reuse explore-site footer; cite translation keys exclusively` |

---

## Services overview (`/services`)

| Detail |
| --- |
| Route `services.index` · `ServiceController@index` · `services.blade.php` |
| Hero + grid of offerings + sticky CTA |
| Maintain linking into each slug enumerated in NAV datasets |
| Prompt: `Match sticky CTA + card grid pattern; ensure slug anchors align with seo.url_translations` |

---

## All services breadth page

`/all-services` — gallery alternative to mega menu congestion. Mirrors card grid densities from services hub with possibly broader dataset slice.

---

## Service detail (`/services/{slug}`)

| Aspect | Guidance |
| --- | --- |
| Controller method | `ServiceController@show` |
| Canonical view | `service-detail.blade.php` |
| Conversion | Inline hero CTA + `sticky-cta-bar` optionally with `stickyCtaServiceSlug=$slug`, `stickyCtaSimulateUrl` when calculators exist |
| SEO | Frequently pairs FAQ blocks + localized meta via messages |
| Checklist | Breadcrumbs consistency, OG image referencing real media |
| AI prompt | `Extend ServiceController by cloning nearest slug Blade; hydrate pricing context arrays; replicate sticky partial props` |

## Service + Industry + optional Location

Referenced views:

- Pair: `service-industry.blade.php`
- Location triple: `service-industry-location.blade.php`

Business goals differentiate **intent specificity** vs **geo-modified CPC intent**.

Mandatory:

1. Unique H1 aligning with concatenated intent.
2. FAQ schema aligns with accordion DOM.
3. Internal linking sideways to sibling industries/locations.
4. Breadcrumb JSON-LD + visible trail alignment.

Localized path segments may translate `/servicos/...` — honor `seo.url_translations`.

**AI Prompt:**  
`Maintain ServiceIndustryController parameter order; forbid slug invention without taxonomy update; regenerate FAQ arrays with mirrored schema push`—

## Portfolio index & detail

`/portfolio`, `/portfolio/{slug}` leverage `PortfolioController`.

Case detail must articulate challenge → tactic → KPIs → CTA bridging to analogous services via `explore-site-section`.

## Contact & Thank-you

`ContactController`:

- `@push` ContactPage structured data referencing canonical URLs + org email/phone from config.

Thank-you intentionally minimal—confirm indexation stance (evaluate `robots` in view stack whenever editing).

## Calculator (`/get-a-quote`)

Wizard style stepper powering higher-intent quoting. Must sync field persistence with migrations + lead ingestion.

Checklist items:

- Maintain CSRF bridging for asynchronous capture endpoints.
- Keep CTA copy aligned with translations.

## Legal

Privacy/Cookie blades share closing cross modules for continuity.

---

## Vertical / campaign landings (`VerticalLandingController`)

Examples: `/restaurants`, `/food-beverage/{childSlug}`, `/vertical.*` mirrored under localized prefixes.

Characteristics:

| Element | Requirement |
| --- | --- |
| Narrative scaffolding | Leverage reusable story partials |
| CTA ladders | Alternate between contact + calculator |
| Location append | Optional trailing slug triggers localized copy blocks |
| Routes | Must be declared in **both** default + localized route groups when applicable |

**AI prompt:**  
`Copy VerticalLandingController method signature + Blade template selection; register GET paths in web.php default + localized blocks; ensure hreflang viability for new copy keys`

---

## Dashboard (Leads + Design System)

| Page | Path | Notes |
| --- | --- | --- |
| Leads index | `/dashboard/leads` | Auth only; heavy JS (Pusher, Beams) |
| Lead detail | `/dashboard/leads/{id}` | Timeline + events |
| Design system | `/dashboard/design-system` | No `layouts.app`; ships own Tailwind CDN config |

---

## Future: Blog system (not shipped)

When implementing:

1. Add `Route::get('/blog'...)`.
2. Create `layouts.app` Blade children with `<article>` semantics.
3. Implement `BlogPosting` or `Article` schema with `mainEntityOfPage`.
4. Introduce taxonomy listing pages mirroring footer emphasis.

Temporary documentation remains here to prevent agents from hallucinating imaginary routes prematurely.
