2025-11-21 12:39:35 -07:00

397 lines
16 KiB
TypeScript
Executable File

"use client"
import { SiteHeader } from "@/components/site-header"
import { SiteFooter } from "@/components/site-footer"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Button } from "@/components/ui/button"
import {
ExternalLink,
Users,
Ruler,
Calculator,
Truck,
Hammer,
BookOpen,
Briefcase,
ChevronRight,
CheckCircle2,
ArrowRight,
} from "lucide-react"
import { useState, useEffect } from "react"
import { cn } from "@/lib/utils"
export default function ResourcesPage() {
const [activeSection, setActiveSection] = useState("organizations")
const sections = [
{
id: "organizations",
title: "Organizations",
icon: Users,
description: "Industry organizations and community resources for ICF construction.",
type: "links",
items: [
{
name: "Concrete Network",
url: "https://www.concretenetwork.com/concrete-homes/advantages.html",
description: "Information about concrete homes and their advantages",
},
{
name: "ICF Builder Group",
url: "http://icfbuildergroup.com",
description: "Resources and community for ICF builders",
},
],
},
{
id: "design",
title: "Design & Engineering",
icon: Ruler,
description: "Technical resources, CAD details, and engineering consultation.",
type: "links",
items: [
{
name: "CAD Details",
url: "http://autocaddetails.net/cad_directory/Residential/ICF%20System/ICF_Systems.htm",
description: "AutoCAD details for ICF systems",
},
{
name: "Innovative Engineering Solutions, LLC",
contact: "Larry Matejcek",
email: "matco11749@msn.com",
description: "Engineering consultation services",
},
{
name: "Fox Block CAD Details",
url: "http://www.foxblocks.com/resource-center/autocad-2d-details/",
description: "Fox Block AutoCAD 2D details",
},
],
},
{
id: "estimating",
title: "Estimating Tools",
icon: Calculator,
description: "Tools and calculators for project estimation.",
type: "links",
items: [
{
name: "Fox Block Project Estimator",
url: "http://www.foxblocks.com/project-estimator/",
description: "Tool for estimating Fox Block projects",
},
],
},
{
id: "suppliers",
title: "Suppliers",
icon: Truck,
description: "Trusted suppliers for ICF materials and equipment.",
type: "links",
items: [
{
name: "Nu-Tech Systems",
url: "http://nutechcolorado.com",
description: "ICF supplies and bracing rental",
},
],
},
{
id: "builders",
title: "Builders",
icon: Hammer,
description: "Experienced ICF custom builders and contractors.",
type: "links",
items: [
{
name: "Open Range Construction, Ltd.",
url: "http://openrangeconstruction.com",
description: "ICF custom builder",
},
],
},
{
id: "publications",
title: "Publications",
icon: BookOpen,
description: "Industry magazines and reading materials.",
type: "links",
items: [
{
name: "ICF Builder Magazine",
url: "https://www.icfmag.com/",
description: "Industry magazine for ICF builders",
},
],
},
{
id: "employment",
title: "Employment",
icon: Briefcase,
description: "Join our growing team of high performance building professionals.",
type: "custom",
content: {
intro:
"High Performance Structures is a Foundation Subcontractor specializing in installing Insulating Concrete Forms (ICFs) with over 10 years experience. The ICFs industry is growing and so are we! We are looking to hire 4 installers to accommodate the increase in ICF foundation jobs.",
role: "ICF Installers",
requirements: [
"At least 18 years old",
"Reliable personal transportation (4-Wheel drive helpful)",
"Willingness to work at multiple job sites throughout the Front Range",
"Comfortable working at heights from ladders and scaffolding",
"Flexibility with changing construction schedules",
],
skills: [
"Basic knowledge of general construction and repair methods",
"Ability to interpret sketches and blueprints",
"Ability to communicate effectively in English",
"Manual work requiring heavy lifting, reaching, and bending",
"Ability to operate hand/power tools",
"Ability to quickly pick up on new skills",
],
tasks: [
"Installing ICF forms",
"Placing reinforcement/rebar",
"Installing scaffolding and bracing",
"Aligning, leveling and plumbing ICF walls",
"Placing concrete and forms",
"Installing temporary beams and structural posts",
],
applyUrl: "https://goo.gl/forms/VuoaPSst4SR4Hzos1",
},
},
]
useEffect(() => {
const handleScroll = () => {
const sectionElements = sections.map((s) => document.getElementById(s.id))
const scrollPosition = window.scrollY + 200
for (const section of sectionElements) {
if (
section &&
section.offsetTop <= scrollPosition &&
section.offsetTop + section.offsetHeight > scrollPosition
) {
setActiveSection(section.id)
}
}
}
window.addEventListener("scroll", handleScroll)
return () => window.removeEventListener("scroll", handleScroll)
}, [])
const scrollToSection = (id: string) => {
const element = document.getElementById(id)
if (element) {
const offset = 120
const bodyRect = document.body.getBoundingClientRect().top
const elementRect = element.getBoundingClientRect().top
const elementPosition = elementRect - bodyRect
const offsetPosition = elementPosition - offset
window.scrollTo({
top: offsetPosition,
behavior: "smooth",
})
}
}
return (
<div className="min-h-screen flex flex-col bg-white">
<SiteHeader />
<main className="flex-1">
{/* Hero Section */}
<section className="relative h-[50vh] min-h-[300px] flex items-center justify-center overflow-hidden bg-deep-navy">
<div className="absolute inset-0 z-0">
<div className="absolute inset-0 bg-deep-navy/90" />
<div className="absolute inset-0 bg-[url('/grid-pattern.svg')] opacity-10" />
</div>
<div className="relative z-10 container mx-auto px-4 text-center">
<h1 className="text-4xl md:text-5xl font-bold text-white mb-6 tracking-tight animate-in fade-in slide-in-from-bottom-4 duration-1000">
Resources & <span className="text-accent">Careers</span>
</h1>
<p className="text-xl text-gray-300 max-w-3xl mx-auto font-light animate-in fade-in slide-in-from-bottom-6 duration-1000 delay-200">
Industry tools, partnerships, and opportunities to join our team.
</p>
</div>
</section>
<div className="container mx-auto px-4 py-16">
<div className="flex flex-col lg:flex-row gap-12">
{/* Sticky Sidebar Navigation */}
<aside className="hidden lg:block w-1/4 relative">
<div className="sticky top-32 space-y-2">
<h3 className="text-lg font-bold text-deep-navy mb-4 px-4">Quick Navigation</h3>
<nav className="space-y-1">
{sections.map((section) => (
<button
key={section.id}
onClick={() => scrollToSection(section.id)}
className={cn(
"w-full text-left px-4 py-3 rounded-lg text-sm font-medium transition-all duration-200 flex items-center justify-between group",
activeSection === section.id
? "bg-deep-navy text-white shadow-md"
: "text-gray-600 hover:bg-gray-100 hover:text-deep-navy",
)}
>
<span className="flex items-center gap-2">
<section.icon
className={cn("h-4 w-4", activeSection === section.id ? "text-accent" : "text-gray-400")}
/>
{section.title}
</span>
{activeSection === section.id && <ChevronRight className="h-4 w-4 text-accent" />}
</button>
))}
</nav>
</div>
</aside>
{/* Main Content */}
<div className="lg:w-3/4 space-y-20">
{sections.map((section, index) => (
<section key={section.id} id={section.id} className="scroll-mt-32">
<div className="flex items-center gap-4 mb-8">
<div className="p-3 bg-accent/10 rounded-xl">
<section.icon className="h-8 w-8 text-deep-navy" />
</div>
<div>
<h2 className="text-3xl font-bold text-deep-navy">{section.title}</h2>
<p className="text-gray-600 mt-1">{section.description}</p>
</div>
</div>
{section.type === "links" && (
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{section.items?.map((item, i) => (
<Card
key={i}
className="border-gray-200 hover:border-accent/50 transition-colors duration-300 hover:shadow-md group"
>
<CardHeader className="pb-3">
<CardTitle className="text-base font-bold text-deep-navy flex items-start justify-between gap-2">
{item.name}
{item.url && (
<ExternalLink className="h-4 w-4 text-gray-400 group-hover:text-accent transition-colors" />
)}
</CardTitle>
</CardHeader>
<CardContent>
<p className="text-sm text-gray-600 mb-4">{item.description}</p>
{/* @ts-ignore */}
{item.contact && (
<p className="text-sm text-gray-800 mb-2">
<span className="font-bold">Contact:</span> {item.contact}
</p>
)}
{/* @ts-ignore */}
{item.email && (
<a
href={`mailto:${item.email}`}
className="text-sm text-accent hover:text-deep-navy font-medium block mb-2 transition-colors"
>
{item.email}
</a>
)}
{item.url && (
<a
href={item.url}
target="_blank"
rel="noopener noreferrer"
className="text-sm text-accent hover:text-deep-navy font-medium break-all transition-colors flex items-center gap-1"
>
Visit Website <ArrowRight className="h-3 w-3" />
</a>
)}
</CardContent>
</Card>
))}
</div>
)}
{section.type === "custom" && section.content && (
<div className="bg-gray-50 rounded-2xl p-8 border border-gray-200">
<div className="prose max-w-none text-gray-600">
<p className="text-lg leading-relaxed mb-8">{section.content.intro}</p>
<div className="bg-white rounded-xl p-6 shadow-sm border border-gray-100 mb-8">
<h3 className="text-xl font-bold text-deep-navy mb-4 flex items-center gap-2">
<Briefcase className="h-5 w-5 text-accent" />
{section.content.role}
</h3>
<div className="grid md:grid-cols-2 gap-8">
<div>
<h4 className="font-bold text-gray-900 mb-3">Basic Requirements</h4>
<ul className="space-y-2">
{section.content.requirements.map((req, i) => (
<li key={i} className="flex items-start gap-2 text-sm">
<CheckCircle2 className="h-4 w-4 text-accent mt-0.5 flex-shrink-0" />
<span>{req}</span>
</li>
))}
</ul>
</div>
<div>
<h4 className="font-bold text-gray-900 mb-3">Job Tasks</h4>
<ul className="space-y-2">
{section.content.tasks.map((task, i) => (
<li key={i} className="flex items-start gap-2 text-sm">
<CheckCircle2 className="h-4 w-4 text-accent mt-0.5 flex-shrink-0" />
<span>{task}</span>
</li>
))}
</ul>
</div>
</div>
<div className="mt-6 pt-6 border-t border-gray-100">
<h4 className="font-bold text-gray-900 mb-3">Knowledge, Skills & Abilities</h4>
<div className="grid md:grid-cols-2 gap-2">
{section.content.skills.map((skill, i) => (
<div key={i} className="flex items-start gap-2 text-sm">
<div className="h-1.5 w-1.5 rounded-full bg-gray-300 mt-2 flex-shrink-0" />
<span>{skill}</span>
</div>
))}
</div>
</div>
</div>
<div className="flex flex-col items-center justify-center text-center bg-deep-navy rounded-xl p-8 text-white">
<h3 className="text-2xl font-bold mb-4">Ready to Join the Team?</h3>
<p className="text-gray-300 mb-6 max-w-xl">
If you are willing to work outdoors during any season, have a desire to grow into leadership
roles, and are willing to listen and learn our processes, we want to hear from you!
</p>
<Button
size="lg"
className="bg-accent hover:bg-accent/90 text-deep-navy font-bold h-12 px-8"
asChild
>
<a href={section.content.applyUrl} target="_blank" rel="noopener noreferrer">
Apply Now <ExternalLink className="ml-2 h-4 w-4" />
</a>
</Button>
</div>
</div>
</div>
)}
{index !== sections.length - 1 && <div className="h-px bg-gray-200 mt-20" />}
</section>
))}
</div>
</div>
</div>
</main>
<SiteFooter />
</div>
)
}