The public landing page lives atDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/ency07/B2B/llms.txt
Use this file to discover all available pages before exploring further.
src/app/page.tsx and serves as the top-of-funnel marketing surface. It is rendered server-side and uses dynamic tenant branding loaded from tenant_settings. Every section — from the hero headline to the floating CTA button — is colored and labeled according to the active tenant’s white-label configuration, with no code change required between deployments.
Page sections
The landing page is composed of a fixed sequence of marketing sections defined insrc/app/page.tsx:
| Section | Component | Purpose |
|---|---|---|
| Hero | HeroSection | Full-viewport headline with primary CTA |
| Services | ServicesSection | Industrial service cards (fabricación, venta, mantenimiento, etc.) |
| Sectors | SectorsSection | Target industry verticals |
| Disciplines | DisciplinesSection | Engineering disciplines and capabilities |
| CFM Calculator | LandingCfmCalculator | Interactive airflow preview widget |
| Trust Marquee | TrustMarquee | Scrolling logos / social proof |
| Process Pipeline | ProcessPipeline | Visual step-by-step engagement flow |
| Featured Case Studies | CaseStudiesSection | Selected client projects |
| Floating CTA | FloatingCta | Sticky call-to-action anchored to the wizard |
| Contact Form | ContactFormSection | Quick-contact lead capture |
Route structure
| Route | File | Description |
|---|---|---|
/ | src/app/page.tsx | Main landing page |
/wizard | src/app/wizard/ | Pre-engineering wizard |
/portal | src/app/portal/ | Public client portal |
/catalog | src/app/(landing)/catalog/ | Industrial product catalog |
White-label branding
Tenant branding is resolved server-side viagetPublicBranding(tenantCode?) from src/web/actions/branding.ts, which delegates to getTenantBranding(). This function reads all tenant_settings rows for the modules EMPRESA, IDENTIDAD, LOCALIZACION, and DOCUMENTOS and merges them over hard-coded defaults from getBrandingDefaults().
The resolved BrandingConfig object is passed directly into the root layout, making the following fields available to every page component without additional fetches:
nombre_comercial— displayed as the site title and in the navbarlogo_claro_url/logo_oscuro_url— swapped automatically based on color schemefavicon_url— injected into<head>metadataprimary_color— applied as the Tailwind CSS custom property--color-brand
CFM calculator widget
LandingCfmCalculator.tsx is a "use client" component embedded in the landing page between the Disciplines and Trust Marquee sections. It lets industrial buyers preview their airflow (CFM) requirements before committing to the full 5-step wizard.
The widget accepts the three spatial dimensions (length, width, height in meters) and an environment type, then runs calculateRequiredCfm() from src/utils/engineering.ts entirely in the browser — no server round-trip is needed for the preview. The calculated CFM value and a recommended equipment category are displayed inline, and a prominent “Start Wizard” CTA pre-fills those values into the full wizard form.
The underlying CFM formula uses ASHRAE-standard Air Changes per Hour (ACH) rates per environment type and a pollutant correction factor for heavy industrial environments:
Contact form and lead capture
The contact form at the bottom of the landing page callssubmitContactForm() from src/web/actions/leads.ts — a "use server" action that:
- Validates the payload with the
contactFormSchemaZod schema. - Applies
sanitizeObject()on all string fields to prevent XSS. - Enforces a rate limit keyed to
contact:${email}. - Calculates a lead score and inserts a row into the
leadstable withlead_source = 'WEBSITE'andstatus = 'NUEVO'.
FloatingCta) links directly to /wizard, routing the user into the full 5-step pre-engineering funnel for deeper qualification.