// mfg2-page-2.jsx
// Manufacturing Industry Page — Part 2 (Municipal-style flow)
// MfgSolutions (green facility schematic + 5-row interactive list)
// MfgCaseStudy (featured project with photo slider — NO IMPACT sequence)
// ============================================================
// MfgFacilitySchematic — Mun-style schematic re-zoned for Mfg services.
// 5 zones · 01 Solar PV (roof) · 02 Battery (pad) · 03 Audit (whole facility)
// · 04 LED Lighting (ceiling band) · 05 EV Charging (loading & yard)
// ============================================================
const MfgFacilitySchematic = ({ activeIndex }) => {
const W = 540;
const H = 360;
const amber = 'rgba(233,199,134,1)';
const amberFill= 'rgba(233,199,134,0.18)';
const ink = 'rgba(255,255,255,0.55)';
const inkDim = 'rgba(255,255,255,0.32)';
const inkFaint = 'rgba(255,255,255,0.18)';
const inkText = 'rgba(255,255,255,0.62)';
const zones = [
// 01 Solar PV — rooftop
{ id: 0, label: '01', cx: 270, cy: 96,
hl: },
// 02 Battery — BESS pad outside
{ id: 1, label: '02', cx: 502, cy: 244,
hl: },
// 03 Audit — whole facility ring
{ id: 2, label: '03', cx: 270, cy: 200,
hl: },
// 04 LED Lighting — ceiling band inside building
{ id: 3, label: '04', cx: 270, cy: 134,
hl: },
// 05 EV Charging — loading dock / yard
{ id: 4, label: '05', cx: 80, cy: 308,
hl: },
];
return (
{/* Ground line + horizon */}
{/* Building outline */}
{/* Production-floor divider — permanent feature */}
WAREHOUSE
{/* Roof solar panels — Solar PV zone (01) */}
{(() => {
const panelLen = 26;
const panelThick = 2;
const legH = 5;
const slope = 40 / 190;
const angleDeg = Math.atan(slope) * 180 / Math.PI;
const positions = [];
for (let i = 0; i < 5; i++) {
const cx = 110 + i * 30;
const roofY = 118 - (cx - 80) * slope;
positions.push({ cx, roofY, angle: -angleDeg, key: `L${i}` });
}
for (let i = 0; i < 5; i++) {
const cx = 310 + i * 30;
const roofY = 78 + (cx - 270) * slope;
positions.push({ cx, roofY, angle: angleDeg, key: `R${i}` });
}
const panelStroke = activeIndex === 0 ? amber : ink;
const panelFill = activeIndex === 0 ? amber : ink;
const legStroke = activeIndex === 0 ? amber : inkDim;
return positions.map(({ cx, roofY, angle, key }) => {
const x0 = cx - panelLen / 2;
const x1 = cx + panelLen / 2;
const yPanelTop = roofY - legH - panelThick;
const yLegTop = roofY - legH;
const legInset = 4;
return (
);
});
})()}
{/* Ceiling LED fixtures — LED Lighting zone (04) */}
{[120, 168, 216, 264, 312, 360, 408].map(x => (
{activeIndex === 3 && (
)}
))}
{/* Production-floor machine indicators */}
{[140, 200, 260, 320].map(x => (
))}
{/* Outdoor BESS pad — Battery zone (02) */}
{[0,1,2,3,4].map(i => (
))}
{[0,1,2,3,4].map(i => (
))}
BESS
{/* Loading dock + EV chargers — EV zone (05) */}
{[28, 56, 96, 124].map(x => (
))}
LOADING · EV
{/* Whole-facility audit ring — Audit (03) */}
{zones[activeIndex].hl}
{zones.map((z, i) => {
const isActive = i === activeIndex;
return (
{z.label}
);
})}
);
};
// ============================================================
// MfgSolutions — Soft Green. Header + schematic + 5-row interactive list.
// ============================================================
const MfgSolutions = () => {
const rows = [
{ idx: '01', icon: 'sun', name: 'Commercial Solar', zone: 'Rooftop', tag: 'Offset daytime production load.', why: 'High annual consumption and large roof areas make manufacturing facilities strong candidates for rooftop solar generation — sized to the optimised load, not the unmanaged one.', href: '/solutions/commercial-solar/' },
{ idx: '02', icon: 'battery-charging', name: 'Battery Storage', zone: 'Outdoor pad', tag: 'Cut peak demand charges.', why: 'Storage captures excess solar generation and shaves the demand spikes that set monthly billing — and unlocks IESO demand-response revenue on flexible loads.', href: '/solutions/battery-storage/' },
{ idx: '03', icon: 'clipboard-list', name: 'Energy Audits', zone: 'Whole facility', tag: 'Establish the baseline first.', why: 'Audits identify demand reduction opportunities across HVAC, compressed air, lighting, and building controls — before any generation system is sized against the wrong load.', href: '/solutions/energy-audits/' },
{ idx: '04', icon: 'lightbulb', name: 'LED Lighting', zone: 'Production ceiling', tag: 'Highest-return retrofit on the floor.', why: 'Manufacturing facilities often have large, poorly lit production areas with legacy HID fixtures. LED retrofits cut both consumption and demand and qualify for saveONenergy incentives.', href: '/solutions/led-lighting/' },
{ idx: '05', icon: 'plug-zap', name: 'EV Charging', zone: 'Loading & yard', tag: 'Fleet electrification on a plan.', why: 'For facilities with vehicle fleets or planning electrification, on-site solar provides a cost-effective charging infrastructure tied to operational schedules.', href: '/solutions/ev-charging/' },
];
const [active, setActive] = React.useState(0);
return (
Solutions for this sector
What manufacturing projects typically involve.
A complete manufacturing program begins with the load baseline, then
sequences efficiency and generation together — solar, storage, lighting,
and EV infrastructure planned around production schedules and BEPS positioning.
{/* LEFT — facility schematic */}
{rows[active].zone}
{rows[active].name}
{/* RIGHT — service list */}
{rows.map((r, i) => {
const isActive = active === i;
return (
setActive(i)}
onFocus={() => setActive(i)}
onClick={() => setActive(i)}
style={{
display: 'grid',
flex: 1,
gridTemplateColumns: '44px 48px 1fr 24px',
gap: 18, alignItems: 'center',
padding: '22px 4px 22px 14px',
borderTop: i === 0 ? '1px solid rgba(255,255,255,0.18)' : 'none',
borderBottom: '1px solid rgba(255,255,255,0.18)',
position: 'relative',
transition: 'background 220ms cubic-bezier(.2,0,0,1)',
background: isActive ? 'rgba(233,199,134,0.10)' : 'transparent',
cursor: 'pointer',
color: 'inherit',
borderRadius: 0,
}}>
{r.idx}
{r.name}
— {r.tag}
{r.why}
→
);
})}
);
};
// ============================================================
// MfgCaseStudy — Featured Project · Paper White · Photo slider
// (NO IMPACT sequence — replaced by the slider per spec.)
// ============================================================
const MFG_FEATURED_SLIDES = [
{
label: 'Ce De Candy · Racking installation',
// caption: '150 Harry Walker Pkwy N · Newmarket ON · 965 kW DC · 1,664 panels',
src: `${window.GI_BASE}assets/projects/ce-de-candy/cedecandy_01.webp`,
},
{
label: 'Ce De Candy · Construction in progress',
// caption: '1,664 × Thornova Solar TS-BG72(580) · TerraGen racking',
src: `${window.GI_BASE}assets/projects/ce-de-candy/cedecandy_02.webp`,
},
{
label: 'Ce De Candy · Construction in progress',
// caption: '11-project programme · efficiency + generation · $7.2M lifetime savings',
src: `${window.GI_BASE}assets/projects/ce-de-candy/cedecandy_03.webp`,
},
{
label: 'Ce De Candy · Construction in progress',
// caption: '11-project programme · efficiency + generation · $7.2M lifetime savings',
src: `${window.GI_BASE}assets/projects/ce-de-candy/cedecandy_04.webp`,
},
{
label: 'Ce De Candy · Construction in progress',
// caption: '11-project programme · efficiency + generation · $7.2M lifetime savings',
src: `${window.GI_BASE}assets/projects/ce-de-candy/cedecandy_05.webp`,
},
{
label: 'Ce De Candy · Final system',
// caption: 'Vicwest 590 kW reference · industrial rooftop · Stratford ON',
src: `${window.GI_BASE}assets/projects/ce-de-candy/cedecandy_06.webp`,
},
];
const MfgCaseStudy = () => {
const [idx, setIdx] = React.useState(0);
const slides = MFG_FEATURED_SLIDES;
const total = slides.length;
const slide = slides[idx];
const go = (n) => setIdx(((n % total) + total) % total);
const stats = [
{ big: '$7.2M', label: 'Verified lifetime savings', sub: 'Across full 11-project programme' },
{ big: '99.6%', label: 'Solar offset achieved', sub: 'Most recent phase, Aug 2025' },
{ big: '1,142,549', label: 'kWh generated annually', sub: '965 kW system' },
{ big: '4.2 yr', label: 'Blended payback', sub: 'Across all programme projects' },
];
const spec = [
{ l: 'Location', v: '150 Harry Walker Pkwy N, Newmarket, ON L3Y 7B3' },
{ l: 'Client', v: 'Ce De Candy Inc.' },
{ l: 'System size', v: '965.12 kW DC / 740 kW AC' },
{ l: 'Modules', v: '1,664 × Thornova Solar TS-BG72(580) — 580W each' },
{ l: 'Inverters', v: '4 × Solis 185k-EHV-5G-US-Plus' },
{ l: 'Racking', v: 'TerraGen' },
{ l: 'Commissioned', v: 'August 2025' },
];
const also = [
{ name: 'Elton Manufacturing', loc: 'Mississauga, ON', size: '741.97 kW DC', off: '37.8% offset', com: 'Commissioned Feb 2025' },
{ name: 'Vicwest Building Products', loc: 'Stratford, ON', size: '590 kW DC', off: 'Industrial rooftop', com: 'Phased 2023–24' },
{ name: 'Canadian Babbitt Bearings', loc: 'Brantford, ON', size: '262.6 kW DC', off: '50.4% offset', com: 'Commissioned Dec 2023' },
{ name: 'Sunny Crunch Foods', loc: 'Markham, ON', size: '593 kW DC', off: 'Food manufacturing', com: 'Commissioned 2024' },
];
return (
{/* ===== SLIDER ===== */}
{slides.map((s, i) => (
))}
{/* Photo location/spec strip */}
{/*
150 HARRY WALKER PKWY N · NEWMARKET, ON
*/}
965 kW · 11-PROJECT PROGRAM
{/* Slide caption
{slide.label}
{slide.caption}
*/}
{/* Prev / Next */}
go(idx - 1)} aria-label="Previous photo" style={{
position: 'absolute', left: 18, top: '50%', transform: 'translateY(-50%)',
width: 44, height: 44, border: '1px solid rgba(255,255,255,0.45)',
background: 'rgba(15,33,51,0.55)', color: '#fff',
cursor: 'pointer', fontSize: 18, lineHeight: 1,
display: 'grid', placeItems: 'center', zIndex: 3,
}}>‹
go(idx + 1)} aria-label="Next photo" style={{
position: 'absolute', right: 18, top: '50%', transform: 'translateY(-50%)',
width: 44, height: 44, border: '1px solid rgba(255,255,255,0.45)',
background: 'rgba(15,33,51,0.55)', color: '#fff',
cursor: 'pointer', fontSize: 18, lineHeight: 1,
display: 'grid', placeItems: 'center', zIndex: 3,
}}>›
{/* Thumbnail strip */}
{slides.map((s, i) => (
setIdx(i)}
aria-label={'View ' + s.label}
aria-current={i === idx ? 'true' : 'false'}
style={{
flex: 1,
padding: '14px 14px',
background: i === idx ? 'rgba(255,255,255,0.08)' : 'transparent',
border: 'none',
borderRight: i < slides.length - 1 ? '1px solid rgba(255,255,255,0.14)' : 'none',
borderTop: i === idx ? '2px solid var(--gi-amber)' : '2px solid transparent',
cursor: 'pointer',
display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: 6,
fontFamily: 'var(--ff-mono)', textAlign: 'left',
color: i === idx ? '#fff' : 'rgba(255,255,255,0.55)',
transition: 'all 220ms cubic-bezier(.2,0,0,1)',
}}>
{s.label.split(' · ')[1] || s.label}
))}
{/* Results */}
Program results
{stats.map((s, i) => (
0 ? 28 : 0,
borderRight: i < stats.length - 1 ? '1px solid rgba(15,33,51,0.14)' : 'none',
}}>
{s.big}
{s.label}
{s.sub}
))}
{/* Spec + Also-in-sector */}
System details · Most recent phase
{spec.map((s, i) => (
{s.l}
{s.v}
))}
View full project breakdown →
);
};
Object.assign(window, { MfgSolutions, MfgCaseStudy, MfgFacilitySchematic });