Landing page for Concreto y Equipos de Juárez (CEJ) — a construction materials company based in Ciudad Juárez. This project provides a functional, mobile-first landing page featuring a concrete cost calculator, Meta Pixel tracking, and WhatsApp lead generation for contractors and builders.
CEJ Landing is built to capture qualified leads by allowing users to estimate the cost of ready-mix concrete directly on the page, view a transparent price breakdown, and contact CEJ instantly via WhatsApp or phone.
It’s designed as a fast, scalable, and trackable MVP, deployable to Vercel, with clean code and a modular architecture ready for future growth (e.g., saving leads, CRM integration, API expansion).
- Real-time calculation by resistance (f’c), service type (pumped/tirado), and zone/freight.
- Optional additives.
- Transparent cost breakdown (Base + Extras + Freight + VAT + Total).
- Input validation (minimum m³, numeric formatting, etc.).
- WhatsApp CTA with prefilled message including UTM parameters.
- Phone CTA with Pixel
Contactevent. - Optional email CTA (future version).
PageView,ViewContent,Lead, andContactevents with proper parameters:value,currency,contents,content_category, and customlead_type.
- Next.js 16 (App Router)
- TypeScript for type safety and maintainability
- SCSS Modules for scoped, clean styling
- pnpm for fast, reproducible dependency management
- Vercel-ready static output (
output: export) - Pixel script initialization managed via
useEffecthook
| Layer | Technology | Purpose |
|---|---|---|
| Framework | Next.js (App Router) | Modern React-based architecture |
| Language | TypeScript | Type safety and cleaner code |
| Styling | SCSS Modules | Modular styles with shared variables/mixins |
| Package Manager | pnpm | Fast, deterministic installs |
| Hosting | Vercel | Zero-config deployment |
| Tracking | Meta Pixel | Lead and conversion tracking |
| Communication | WhatsApp API | Instant lead generation |
cej-landing/
├─ app/
│ ├─ layout.tsx # Root layout with global styles
│ └─ page.tsx # Main landing + calculator
├─ components/
│ ├─ Calculator/ # Main calculator logic and UI
│ └─ CTAButtons.tsx # Persistent bottom CTAs
├─ lib/
│ ├─ pricing.ts # Pricing tables and constants
│ ├─ pixel.ts # Pixel initialization + event tracking
│ └─ utils.ts # Helpers (formatting, WhatsApp link)
├─ styles/
│ ├─ globals.scss # Global base styles
│ ├─ _variables.scss # Color palette and variables
│ └─ _mixins.scss # Shared mixins
├─ public/
│ └─ logo-cej.svg
└─ .env.local # Environment variables (ignored by Git)
Create a file called .env.local at the project root with:
NEXT_PUBLIC_PIXEL_ID=XXXXXXXXXXXXXX
NEXT_PUBLIC_WHATSAPP_NUMBER=521656XXXXXXX
NEXT_PUBLIC_PHONE=521656XXXXXXX
NEXT_PUBLIC_SITE_URL=https://cej.com.mxOr use .env.example as a template.
| Command | Description |
|---|---|
pnpm dev |
Run development server (Turbopack) |
pnpm build |
Generate production build |
pnpm start |
Serve production build locally |
pnpm lint |
Run ESLint checks |
- Push this repository to GitHub.
- Connect it to Vercel.
- Add the environment variables above in Project Settings → Environment Variables.
- Deploy → Your landing page is live 🚀.
- Serverless API endpoint for saving leads (via
/app/api/lead/route.ts) - Automatic quote ID (
folio) per lead - Integration with Facebook Conversions API (CAPI)
- Dark mode + theming system
- SEO enhancements (structured data + OG tags)
Francisco Mendoza Full-stack developer & marketing automation specialist fm-dev-mx
This project is licensed under the MIT License. See the LICENSE file for details.