Files

4.6 KiB

Context

The public site currently sends every commercial CTA to /contato, where the detailed event briefing lives. Its home chapters reflect the original editorial sequence, while the CMS only has generic Service records. Production seed gating already distinguishes environmental content but the public portfolio needs an explicit empty-acervo state so no demonstrative case can be mistaken for proof.

Goals / Non-Goals

Goals:

  • Keep the public surface server-rendered Blade with progressive vanilla JS and a single Heritage Editorial visual language.
  • Make wedding modalities typed, publishable, ordered CMS content; derive their WhatsApp CTA server-side with an explicit briefing fallback.
  • Split prospect and partner submissions at route, request, controller, mail and success-state boundaries.
  • Keep public data minimised: partner submissions are mailed, never persisted.

Non-Goals:

  • No WhatsApp API/integration, CRM Lead creation, partner directory, Corporate service inventory, Corporate case, invented evidence or page builder.
  • No production migration of fixture cases into real proof; the authorized client content remains an operational prerequisite.

Decisions

Typed WeddingPackage content instead of a JSON setting

wedding_packages has a dedicated model, migration, factory, policy, Filament resource and public query. This matches the existing publication/order model for Services and keeps content validation, ordering and authorization visible. A JSON array in site_settings would be faster initially but would weaken publication control and future editing.

The setting stores digits-normalized whatsapp_number; a small value object builds https://wa.me/<digits>?text=<encoded contextual message>. If the setting is absent or invalid, the same CTA points to /briefing?servico_interesse=<package> so conversion still works. This offers the authorized official channel without violating SPEC §4.2's prohibition on an official integration.

Separate partner boundary, not a mode on briefing

PartnerInquiryRequest, PartnerInquiryController and PartnerInquiry mailable have their own payload, honeypot key, throttle and session duplicate hash. It prevents event fields, marketing origin and confirmations from crossing into the partnership flow. A single controller with a discriminated input was rejected because it increases the chance of accidental routing or data disclosure.

Honest public availability states

The home consumes GetHomeContent, which returns only actual published cases in production. The portfolio chapter itself remains present and shows an acervo-em-preparação note on empty data. Non-production visual fixtures continue to seed only for development/staging. Corporate remains copy plus a briefing CTA, deliberately without data-driven claims, media or a service list.

Header/footer link to /#amare, /#casamentos, /#corporate, /#portfolio and /#depoimentos from other routes, and native fragments on the home. This preserves deep links and no-JS behavior; CSS scroll margin compensates for the sticky header.

Risks / Trade-offs

  • [Official WhatsApp number is not configured at deploy] → every package CTA has a deterministic briefing fallback and settings label calls out the operational requirement.
  • [Client proof is still unavailable] → production renders no fixture cases, a visible acervo note and no Corporate cases.
  • [New contact route changes incoming links] → /contato remains available for partners and header/footer continue to expose it; event CTA links move deliberately to /briefing.
  • [Detailed forms duplicate markup] → shared field styles and narrow controllers are preferred over generic, condition-heavy form components.

Migration Plan

  1. Deploy the additive table/column migrations and code together.
  2. Run the content seeder to install official wedding modalities; set the official WhatsApp number in Filament before promoting CTAs.
  3. In production, leave portfolio cases unpublished until real authorized material is loaded; verify the empty-acervo state.
  4. Rollback is code-safe because routes remain additive and the legacy setting data is untouched; if necessary, unset the new WhatsApp column and retain the package rows without public publication.

Open Questions

  • Corporate institutional copy and authorized proof (MAN-98/MAN-99) remain client dependencies; no placeholder claims will be added.
  • The official WhatsApp number must be supplied before the campaign links are promoted.