product, about, contact pages updated
This commit is contained in:
parent
13738a8673
commit
385fea8a54
142
app/about/page.tsx
Normal file
142
app/about/page.tsx
Normal file
@ -0,0 +1,142 @@
|
||||
import Link from 'next/link';
|
||||
import Image from 'next/image';
|
||||
|
||||
export default function AboutPage() {
|
||||
return (
|
||||
<div style={{ minHeight: '100vh', background: 'var(--white)' }}>
|
||||
{/* Inner Banner */}
|
||||
<section className="hero" style={{ minHeight: '350px', display: 'flex', alignItems: 'center', paddingTop: '130px' }}>
|
||||
<div className="hero-pattern"></div>
|
||||
<div className="hero-left" style={{ padding: '0', width: '100%' }}>
|
||||
<div className="hero-eyebrow">About VG Fence</div>
|
||||
<h1 className="hero-h1" style={{ marginBottom: '16px' }}>Your Trusted <em>Fencing</em> Partner.</h1>
|
||||
<p className="hero-sub" style={{ maxWidth: '600px', marginBottom: '0' }}>
|
||||
Ontario's dedicated supplier for professional-grade fencing and railing materials.
|
||||
Reliability built with every post and panel.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Our Story Section */}
|
||||
<section className="section">
|
||||
<div className="container" style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 20px' }}>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '1.2fr 1fr', gap: '80px', alignItems: 'center' }} className="about-layout">
|
||||
<div>
|
||||
<div className="section-eyebrow">Our Story</div>
|
||||
<h2 className="section-h2" style={{ marginBottom: '32px' }}>A Reputation Built on <span>Reliability.</span></h2>
|
||||
<div style={{ fontSize: '17px', color: 'var(--gray-600)', lineHeight: 1.8, display: 'flex', flexDirection: 'column', gap: '20px' }}>
|
||||
<p>
|
||||
At VG Fence, we are dedicated to providing high-quality fencing and railing materials to contractors,
|
||||
property managers, event organizers, and homeowners. With years of experience in the industry,
|
||||
we have built a reputation as a reliable supplier for both commercial and residential projects.
|
||||
</p>
|
||||
<p>
|
||||
We stock and supply a comprehensive range of fence products, including chain link fences,
|
||||
temporary fencing, ornamental fences, wood fence hardware, gates, railings, deck products,
|
||||
and privacy screens.
|
||||
</p>
|
||||
<p>
|
||||
All our materials are available in galvanized and black finishes, ensuring durability
|
||||
and long-lasting performance in Canada's diverse climate.
|
||||
</p>
|
||||
<p style={{ fontStyle: 'italic', color: 'var(--gray-500)', fontSize: '15px' }}>
|
||||
While our focus is primarily on material supply, we also provide installation support for
|
||||
select projects, based on size and scope.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{ position: 'relative' }}>
|
||||
<div style={{ position: 'relative', width: '100%', height: '500px', borderRadius: '20px', overflow: 'hidden', boxShadow: '0 30px 60px rgba(0,0,0,.1)' }}>
|
||||
<Image
|
||||
src="/placeholder.jpg"
|
||||
alt="Quality Fencing"
|
||||
fill
|
||||
style={{ objectFit: 'cover' }}
|
||||
/>
|
||||
</div>
|
||||
<div style={{ position: 'absolute', bottom: '-30px', left: '-30px', background: 'var(--navy)', padding: '32px', borderRadius: '12px', color: 'var(--white)', maxWidth: '280px', zIndex: 2 }}>
|
||||
<div style={{ fontSize: '40px', fontWeight: 800, color: 'var(--orange)', marginBottom: '8px', fontFamily: 'var(--font-display)' }}>100%</div>
|
||||
<div style={{ fontSize: '13px', fontWeight: 600, textTransform: 'uppercase', letterSpacing: '.1em', lineHeight: 1.4 }}>Professional Grade Materials In Stock</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Mission Section */}
|
||||
<section className="section" style={{ background: 'var(--cream)' }}>
|
||||
<div className="container" style={{ maxWidth: '800px', margin: '0 auto', padding: '0 20px', textAlign: 'center' }}>
|
||||
<div className="section-eyebrow" style={{ margin: '0 auto 16px', justifyContent: 'center' }}>Our Mission</div>
|
||||
<h2 className="section-h2" style={{ marginBottom: '32px' }}>Empowering <span>Success.</span></h2>
|
||||
<div style={{ background: 'var(--white)', padding: '64px 15px', borderRadius: '20px', boxShadow: '0 10px 30px rgba(0,0,0,.03)' }}>
|
||||
<p style={{ fontSize: '24px', color: 'var(--navy)', lineHeight: 1.6, fontWeight: 500, fontFamily: 'var(--font-body)' }}>
|
||||
"To supply premium fencing and railing materials that combine quality, durability, and convenience,
|
||||
helping every project — large or small — succeed."
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Testimonial Section */}
|
||||
<section className="section testimonials-section">
|
||||
<div className="container" style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 20px', textAlign: 'center' }}>
|
||||
<div className="section-eyebrow" style={{ margin: '0 auto 16px', justifyContent: 'center' }}>Testimonials</div>
|
||||
<h2 className="section-h2" style={{ color: 'var(--white)' }}>What Our Partners <span>Say.</span></h2>
|
||||
|
||||
<div className="testimonials-grid">
|
||||
<div className="testimonial-card">
|
||||
<div className="testimonial-quote">"VG Fence consistently delivers high-quality materials on time. Their contractor pricing allows me to stay competitive, and their inventory is unmatched."</div>
|
||||
<div className="testimonial-author">Mark S.</div>
|
||||
<div className="testimonial-role">Local Fence Contractor</div>
|
||||
</div>
|
||||
<div className="testimonial-card">
|
||||
<div className="testimonial-quote">"Their galvanized and black finish railings are top-notch. It's rare to find a supplier that combines durability with such an aesthetic appeal."</div>
|
||||
<div className="testimonial-author">Sarah L.</div>
|
||||
<div className="testimonial-role">Property Manager</div>
|
||||
</div>
|
||||
<div className="testimonial-card">
|
||||
<div className="testimonial-quote">"The team at VG Fence is incredibly knowledgeable. They helped us select the right ornamental fencing for our latest residential development."</div>
|
||||
<div className="testimonial-author">David K.</div>
|
||||
<div className="testimonial-role">Construction Manager</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* FAQ Section */}
|
||||
<section className="section faq-section">
|
||||
<div className="container" style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 20px', textAlign: 'center' }}>
|
||||
<div className="section-eyebrow" style={{ margin: '0 auto 16px', justifyContent: 'center' }}>FAQ</div>
|
||||
<h2 className="section-h2">Frequently Asked <span>Questions.</span></h2>
|
||||
|
||||
<div className="faq-list" style={{ textAlign: 'left' }}>
|
||||
<div className="faq-item">
|
||||
<div className="faq-question">Do you offer contractor pricing?</div>
|
||||
<div className="faq-answer">Yes! We provide dedicated contractor accounts with specialized pricing. You need to create an account and verify your business details to unlock these rates.</div>
|
||||
</div>
|
||||
<div className="faq-item">
|
||||
<div className="faq-question">Do you offer installation services?</div>
|
||||
<div className="faq-answer">While our primary focus is supplying high-quality materials, we do provide installation support for select projects based on their size and scope.</div>
|
||||
</div>
|
||||
<div className="faq-item">
|
||||
<div className="faq-question">Where are your materials sourced from?</div>
|
||||
<div className="faq-answer">We source professional-grade materials focused on durability, specifically suited for Canada's diverse climate, including robust galvanized and black finish options.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* CTA Section */}
|
||||
<section className="cta-section section-padding" style={{ textAlign: 'center', background: 'var(--navy)', color: 'var(--white)' }}>
|
||||
<h2 className="cta-h2">Ready to <span>Build?</span></h2>
|
||||
<p className="cta-sub" style={{ opacity: .7 }}>Explore Ontario's most reliable inventory of fencing products.</p>
|
||||
<div className="cta-btns">
|
||||
<Link href="/products" className="btn-primary">View Full Catalog</Link>
|
||||
<Link href="/contact" className="btn-white-outline">Contact Us</Link>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
125
app/contact/page.tsx
Normal file
125
app/contact/page.tsx
Normal file
@ -0,0 +1,125 @@
|
||||
import Navbar from '@/components/Navbar';
|
||||
import Footer from '@/components/Footer';
|
||||
|
||||
export default function ContactPage() {
|
||||
return (
|
||||
<div style={{ minHeight: '100vh', background: 'var(--cream)' }}>
|
||||
{/* Inner Banner */}
|
||||
<section className="hero" style={{ minHeight: '350px', display: 'flex', alignItems: 'center', paddingTop: '130px' }}>
|
||||
<div className="hero-pattern"></div>
|
||||
<div className="hero-left" style={{ padding: '0', width: '100%' }}>
|
||||
<div className="hero-eyebrow">Get in Touch</div>
|
||||
<h1 className="hero-h1" style={{ marginBottom: '16px' }}>How to <em>contact</em> us.</h1>
|
||||
<p className="hero-sub" style={{ maxWidth: '600px', marginBottom: '0' }}>
|
||||
If you’ve got questions or ideas you would like to share, send a message.
|
||||
For anything more specific, please use one of our addresses.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Contact Content */}
|
||||
<section className="section">
|
||||
<div className="container" style={{ maxWidth: '1200px', margin: '0 auto' }}>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1.2fr', gap: '80px' }} className="contact-layout">
|
||||
|
||||
{/* Left Col: Info & Map */}
|
||||
<div>
|
||||
<div style={{ marginBottom: '48px' }}>
|
||||
<h3 className="section-h2" style={{ fontSize: '32px', marginBottom: '32px' }}>Office <span>Details.</span></h3>
|
||||
|
||||
<div style={{ display: 'flex', flexDirection: 'column', gap: '24px' }}>
|
||||
<div style={{ display: 'flex', gap: '16px' }}>
|
||||
<div style={{ width: '40px', height: '40px', background: 'var(--orange)', borderRadius: '8px', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="white" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div style={{ fontWeight: 700, color: 'var(--navy)', marginBottom: '4px', fontFamily: 'var(--font-display)', textTransform: 'uppercase', fontSize: '14px', letterSpacing: '.05em' }}>Our Location</div>
|
||||
<div style={{ fontSize: '15px', color: 'var(--gray-600)', lineHeight: 1.5 }}>125 Earl Thompson Rd, Ayr, ON N0B 1E0, Canada</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'flex', gap: '16px' }}>
|
||||
<div style={{ width: '40px', height: '40px', background: 'var(--orange)', borderRadius: '8px', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="white" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div style={{ fontWeight: 700, color: 'var(--navy)', marginBottom: '4px', fontFamily: 'var(--font-display)', textTransform: 'uppercase', fontSize: '14px', letterSpacing: '.05em' }}>Direct Line Numbers</div>
|
||||
<div style={{ fontSize: '15px', color: 'var(--gray-600)', lineHeight: 1.5 }}>+1 226-888-7999</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'flex', gap: '16px' }}>
|
||||
<div style={{ width: '40px', height: '40px', background: 'var(--orange)', borderRadius: '8px', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="white" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div style={{ fontWeight: 700, color: 'var(--navy)', marginBottom: '4px', fontFamily: 'var(--font-display)', textTransform: 'uppercase', fontSize: '14px', letterSpacing: '.05em' }}>Our Email</div>
|
||||
<div style={{ fontSize: '15px', color: 'var(--gray-600)', lineHeight: 1.5 }}>info@vgfenceproducts.com</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Map Placeholder */}
|
||||
<div style={{ borderRadius: '12px', overflow: 'hidden', border: '1px solid var(--gray-200)', height: '300px', background: 'var(--white)', position: 'relative' }}>
|
||||
<iframe
|
||||
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2903.9575459392213!2d-80.447551023419!3d43.29854497112028!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x882c7f0f0f0f0f0f%3A0x0!2zMTI1IEVhcmwgVGhvbXBzb24gUmQsIEF5ciwgT04gTjBCIDFFMCwgQ2FuYWRh!5e0!3m2!1sen!2sca!4v1713350000000!5m2!1sen!2sca"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style={{ border: 0 }}
|
||||
allowFullScreen
|
||||
loading="lazy"
|
||||
></iframe>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="quote-card" style={{ height: 'fit-content', background: 'var(--white)', borderRadius: '16px', padding: '30px', boxShadow: '0 20px 40px rgba(15, 36, 68, .08)', border: '1px solid var(--gray-200)' }}>
|
||||
<div style={{ marginBottom: '32px' }}>
|
||||
<h3 style={{ fontFamily: 'var(--font-display)', fontSize: '28px', fontWeight: 800, textTransform: 'uppercase', color: 'var(--navy)', marginBottom: '8px' }}>Send us a <span>Message.</span></h3>
|
||||
<p style={{ fontSize: '14px', color: 'var(--gray-600)' }}>Fill out the form below and our team will get back to you within 24 hours.</p>
|
||||
</div>
|
||||
|
||||
<form style={{ display: 'flex', flexDirection: 'column', gap: '20px' }}>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '20px' }} className="form-row">
|
||||
<div className="form-group">
|
||||
<label style={{ display: 'block', fontSize: '12px', fontWeight: 700, textTransform: 'uppercase', color: 'var(--navy)', marginBottom: '8px' }}>Name</label>
|
||||
<input type="text" placeholder="John Doe" style={{ width: '100%', padding: '12px 16px', borderRadius: '4px', border: '1px solid var(--gray-200)', fontSize: '14px', background: 'var(--white)' }} />
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label style={{ display: 'block', fontSize: '12px', fontWeight: 700, textTransform: 'uppercase', color: 'var(--navy)', marginBottom: '8px' }}>Email</label>
|
||||
<input type="email" placeholder="john@example.com" style={{ width: '100%', padding: '12px 16px', borderRadius: '4px', border: '1px solid var(--gray-200)', fontSize: '14px', background: 'var(--white)' }} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '20px' }} className="form-row">
|
||||
<div className="form-group">
|
||||
<label style={{ display: 'block', fontSize: '12px', fontWeight: 700, textTransform: 'uppercase', color: 'var(--navy)', marginBottom: '8px' }}>Phone Number</label>
|
||||
<input type="tel" placeholder="(555) 123-4567" style={{ width: '100%', padding: '12px 16px', borderRadius: '4px', border: '1px solid var(--gray-200)', fontSize: '14px', background: 'var(--white)' }} />
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label style={{ display: 'block', fontSize: '12px', fontWeight: 700, textTransform: 'uppercase', color: 'var(--navy)', marginBottom: '8px' }}>Project Type</label>
|
||||
<select style={{ width: '100%', padding: '12px 16px', borderRadius: '4px', border: '1px solid var(--gray-200)', fontSize: '14px', background: 'var(--white)', appearance: 'none' }}>
|
||||
<option value="Commercial">Commercial</option>
|
||||
<option value="Residential">Residential</option>
|
||||
<option value="Event">Event</option>
|
||||
<option value="Other">Other</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="form-group">
|
||||
<label style={{ display: 'block', fontSize: '12px', fontWeight: 700, textTransform: 'uppercase', color: 'var(--navy)', marginBottom: '8px' }}>Message</label>
|
||||
<textarea placeholder="How can we help you?" style={{ width: '100%', padding: '12px 16px', borderRadius: '4px', border: '1px solid var(--gray-200)', fontSize: '14px', minHeight: '150px', resize: 'vertical', background: 'var(--white)' }}></textarea>
|
||||
</div>
|
||||
|
||||
<button type="submit" className="btn-primary" style={{ width: '100%', marginTop: '10px' }}>Send Message →</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
1497
app/globals.css
1497
app/globals.css
File diff suppressed because it is too large
Load Diff
@ -19,6 +19,9 @@ const barlowCondensed = Barlow_Condensed({
|
||||
export const metadata: Metadata = {
|
||||
title: "VG Fence Products — Ontario's B2B Fence Supply Partner",
|
||||
description: "Supplying contractors, builders, and property managers across Ontario with chain link, ornamental, composite, glass railing, and stain products.",
|
||||
icons: {
|
||||
icon: "/favicon.png",
|
||||
},
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
85
app/products/[slug]/page.tsx
Normal file
85
app/products/[slug]/page.tsx
Normal file
@ -0,0 +1,85 @@
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import { products } from '@/data/products';
|
||||
import { notFound } from 'next/navigation';
|
||||
|
||||
// Pre-generate all product detail pages at build time
|
||||
export function generateStaticParams() {
|
||||
return products.map((product) => ({
|
||||
slug: product.slug,
|
||||
}));
|
||||
}
|
||||
|
||||
// In Next.js 15+/16, params is a Promise and must be awaited
|
||||
export default async function ProductDetailPage({
|
||||
params,
|
||||
}: {
|
||||
params: Promise<{ slug: string }>;
|
||||
}) {
|
||||
const { slug } = await params;
|
||||
const product = products.find((p) => p.slug === slug);
|
||||
|
||||
if (!product) {
|
||||
notFound();
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="product-detail-page" style={{ minHeight: '100vh', paddingTop: '144px', paddingBottom: '96px', background: 'var(--white)' }}>
|
||||
<div style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 48px' }}>
|
||||
<Link href="/products" style={{ display: 'inline-flex', alignItems: 'center', gap: '8px', marginBottom: '48px', color: 'var(--gray-600)', textDecoration: 'none', fontSize: '14px', fontWeight: 600 }}>
|
||||
← Back to Catalog
|
||||
</Link>
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '1.2fr 1fr', gap: '80px', alignItems: 'start' }}>
|
||||
{/* Left: Image */}
|
||||
<div style={{ position: 'relative', width: '100%', height: '600px', borderRadius: '12px', overflow: 'hidden', boxShadow: '0 20px 40px rgba(0,0,0,0.05)', background: '#f5f5f5' }}>
|
||||
<Image
|
||||
src="/placeholder.jpg"
|
||||
alt={product!.name}
|
||||
fill
|
||||
style={{ objectFit: 'cover' }}
|
||||
priority
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Right: Info */}
|
||||
<div style={{ paddingTop: '20px' }}>
|
||||
<div className="section-eyebrow" style={{ marginBottom: '16px' }}>{product!.category}</div>
|
||||
<h1 className="section-h2" style={{ fontSize: '48px', marginBottom: '24px', lineHeight: 1.1 }}>{product!.name}</h1>
|
||||
|
||||
<div style={{ fontSize: '24px', fontWeight: 700, color: 'var(--orange)', fontFamily: 'var(--font-display)', marginBottom: '32px' }}>
|
||||
{product!.price}
|
||||
</div>
|
||||
|
||||
<div style={{ borderTop: '1px solid var(--gray-200)', borderBottom: '1px solid var(--gray-200)', padding: '32px 0', marginBottom: '40px' }}>
|
||||
<h3 style={{ fontFamily: 'var(--font-display)', fontSize: '14px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.1em', color: 'var(--navy)', marginBottom: '16px' }}>Description</h3>
|
||||
<p style={{ fontSize: '16px', lineHeight: 1.8, color: 'var(--gray-600)', whiteSpace: 'pre-line' }}>
|
||||
{product!.description}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* <div style={{ display: 'flex', flexDirection: 'column', gap: '20px' }}>
|
||||
<div style={{ display: 'flex', justifyContent: 'space-between', fontSize: '14px', color: 'var(--gray-600)' }}>
|
||||
<span style={{ fontWeight: 600 }}>Category:</span>
|
||||
<span>{product!.category}</span>
|
||||
</div>
|
||||
<div style={{ display: 'flex', justifyContent: 'space-between', fontSize: '14px', color: 'var(--gray-600)' }}>
|
||||
<span style={{ fontWeight: 600 }}>Availability:</span>
|
||||
<span style={{ color: '#059669', fontWeight: 600 }}>In Stock (Same-day Delivery)</span>
|
||||
</div>
|
||||
</div> */}
|
||||
|
||||
<div style={{ marginTop: '56px' }}>
|
||||
<Link href="/#quote" className="btn-primary" style={{ width: '100%', textAlign: 'center', padding: '20px' }}>
|
||||
Contact for Quote & Specs →
|
||||
</Link>
|
||||
{/* <p style={{ textAlign: 'center', fontSize: '13px', color: 'var(--gray-400)', marginTop: '16px' }}>
|
||||
Bulk ordering and contractor pricing available on request.
|
||||
</p> */}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@ -1,79 +1,116 @@
|
||||
"use client";
|
||||
import { useState } from 'react';
|
||||
import Link from 'next/link';
|
||||
|
||||
const products = [
|
||||
{
|
||||
name: "Aluminum Railing",
|
||||
desc: "Residential and commercial aluminum railing systems for decks, balconies, stairs, and pools.",
|
||||
tags: ["Residential", "Commercial", "Maintenance-free"],
|
||||
icon: <svg viewBox="0 0 22 22" fill="none"><rect x="1" y="3" width="3" height="16" rx="1.5" fill="white" /><rect x="9" y="3" width="3" height="16" rx="1.5" fill="white" /><rect x="17" y="3" width="3" height="16" rx="1.5" fill="white" /><line x1="1" y1="8" x2="20" y2="8" stroke="white" strokeWidth="1.5" /><line x1="1" y1="13" x2="20" y2="13" stroke="white" strokeWidth="1.5" /></svg>
|
||||
},
|
||||
{
|
||||
name: "Chain Link Fence",
|
||||
desc: "Commercial and residential chain link in black and galvanized finishes. High volume, quick delivery.",
|
||||
tags: ["Black", "Galvanized", "Security"],
|
||||
icon: <svg viewBox="0 0 22 22" fill="none"><rect x="2" y="3" width="3" height="16" rx="1.5" fill="white" /><rect x="17" y="3" width="3" height="16" rx="1.5" fill="white" /><line x1="2" y1="8" x2="20" y2="8" stroke="white" strokeWidth="1.5" /><line x1="2" y1="13" x2="20" y2="13" stroke="white" strokeWidth="1.5" /><line x1="8" y1="3" x2="8" y2="19" stroke="white" strokeWidth="1.5" /><line x1="14" y1="3" x2="14" y2="19" stroke="white" strokeWidth="1.5" /></svg>
|
||||
},
|
||||
{
|
||||
name: "Composite Fences",
|
||||
desc: "Low maintenance composite fence panels in three premium colours. Natural wood look, zero rot.",
|
||||
tags: ["Ancient Wood", "Golden Teak", "Anthracite"],
|
||||
icon: <svg viewBox="0 0 22 22" fill="none"><rect x="2" y="2" width="6" height="18" rx="2" fill="white" opacity=".7" /><rect x="14" y="2" width="6" height="18" rx="2" fill="white" opacity=".7" /><rect x="5" y="2" width="12" height="18" rx="2" fill="white" opacity=".35" /></svg>
|
||||
},
|
||||
{
|
||||
name: "Glass Railing",
|
||||
desc: "Premium tempered glass railing for pools, decks, balconies, and commercial applications.",
|
||||
tags: ["Pool-safe", "Tempered Glass", "Modern"],
|
||||
icon: <svg viewBox="0 0 22 22" fill="none"><rect x="2" y="6" width="18" height="11" rx="2" fill="white" opacity=".25" stroke="white" strokeWidth="1.5" /><rect x="4" y="2" width="2" height="18" rx="1" fill="white" /><rect x="16" y="2" width="2" height="18" rx="1" fill="white" /></svg>
|
||||
},
|
||||
{
|
||||
name: "Ornamental Fence",
|
||||
desc: "Classic black ornamental iron fence for residential properties. Elegant, durable, and timeless.",
|
||||
tags: ["Black Iron", "Residential", "Elegant"],
|
||||
icon: <svg viewBox="0 0 22 22" fill="none"><rect x="2" y="3" width="3" height="16" rx="1.5" fill="white" /><rect x="17" y="3" width="3" height="16" rx="1.5" fill="white" /><line x1="2" y1="7" x2="20" y2="7" stroke="white" strokeWidth="1.5" /><line x1="2" y1="11" x2="20" y2="11" stroke="white" strokeWidth="1.5" /><line x1="2" y1="15" x2="20" y2="15" stroke="white" strokeWidth="1.5" /></svg>
|
||||
},
|
||||
{
|
||||
name: "Expert Stain & Seal",
|
||||
desc: "Professional-grade wood care products for fences, decks, pergolas, and outdoor structures.",
|
||||
tags: ["Wood Care", "High Margin", "Professional"],
|
||||
icon: <svg viewBox="0 0 22 22" fill="none"><path d="M4 19 L11 3 L18 19" stroke="white" strokeWidth="2" fill="none" strokeLinecap="round" /><circle cx="11" cy="11" r="3.5" fill="white" opacity=".5" /></svg>
|
||||
}
|
||||
];
|
||||
import Image from 'next/image';
|
||||
import { products } from '@/data/products';
|
||||
|
||||
export default function ProductsPage() {
|
||||
const [currentPage, setCurrentPage] = useState(1);
|
||||
const productsPerPage = 12;
|
||||
|
||||
// Calculate pagination
|
||||
const indexOfLastProduct = currentPage * productsPerPage;
|
||||
const indexOfFirstProduct = indexOfLastProduct - productsPerPage;
|
||||
const currentProducts = products.slice(indexOfFirstProduct, indexOfLastProduct);
|
||||
const totalPages = Math.ceil(products.length / productsPerPage);
|
||||
|
||||
const paginate = (pageNumber: number) => setCurrentPage(pageNumber);
|
||||
|
||||
return (
|
||||
<div className="products-section" style={{ minHeight: '100vh', paddingTop: '144px', paddingBottom: '80px' }}>
|
||||
<div style={{ padding: '0 80px', marginBottom: '64px' }}>
|
||||
<div className="section-eyebrow">Inventory</div>
|
||||
<h1 className="section-h2" style={{ fontSize: '64px' }}>Our <span>Product Lines.</span></h1>
|
||||
<p style={{ color: 'var(--gray-600)', maxWidth: '600px', marginTop: '20px', fontSize: '18px' }}>
|
||||
Explore our full range of professional fence and railing supplies. All items are available for same-day delivery across Ontario.
|
||||
<div style={{ minHeight: '100vh' }}>
|
||||
{/* Inner Banner */}
|
||||
<section className="hero" style={{ minHeight: '400px', display: 'flex', alignItems: 'center', paddingTop: '130px' }}>
|
||||
<div className="hero-pattern"></div>
|
||||
<div className="hero-left" style={{ padding: '0', width: '100%' }}>
|
||||
<div className="hero-eyebrow" style={{ marginLeft: '0px' }}>Full Inventory</div>
|
||||
<h1 className="hero-h1" style={{ marginBottom: '16px' }}>Our <em>Product</em> Catalog.</h1>
|
||||
<p className="hero-sub" style={{ maxWidth: '600px', marginBottom: '0' }}>
|
||||
Explore our complete range of professional-grade fence supply products.
|
||||
High stocks and contractor pricing for same-day delivery across Ontario.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div className="products-grid" style={{ margin: '0 80px' }}>
|
||||
{products.map((product, i) => (
|
||||
<div key={i} className="product-card">
|
||||
<div className="product-icon">
|
||||
{product.icon}
|
||||
{/* Grid Content */}
|
||||
<section className="products-section">
|
||||
<div className="products-grid">
|
||||
{currentProducts.map((product) => (
|
||||
<div key={product.slug} className="product-card" style={{ display: 'flex', flexDirection: 'column', height: '100%', textDecoration: 'none' }}>
|
||||
<div style={{ position: 'relative', width: '100%', height: '240px', borderRadius: '8px', overflow: 'hidden', marginBottom: '20px', background: 'var(--gray-100)' }}>
|
||||
<Image
|
||||
src="/placeholder.jpg"
|
||||
alt={product.name}
|
||||
fill
|
||||
style={{ objectFit: 'cover' }}
|
||||
/>
|
||||
</div>
|
||||
<div className="product-name">{product.name}</div>
|
||||
<div className="product-desc">{product.desc}</div>
|
||||
<div className="product-tags">
|
||||
{product.tags.map((tag, j) => (
|
||||
<span key={j} className="product-tag">{tag}</span>
|
||||
))}
|
||||
<div className="product-desc" style={{
|
||||
display: '-webkit-box',
|
||||
WebkitLineClamp: 3,
|
||||
WebkitBoxOrient: 'vertical',
|
||||
overflow: 'hidden',
|
||||
minHeight: '4.8em',
|
||||
marginBottom: '16px'
|
||||
}}>
|
||||
{product.description}
|
||||
</div>
|
||||
<div style={{ marginTop: '24px' }}>
|
||||
<button className="btn-primary" style={{ padding: '8px 20px', fontSize: '12px' }}>Request Specs</button>
|
||||
<div style={{ marginTop: 'auto' }}>
|
||||
<div style={{ fontFamily: 'var(--font-display)', fontSize: '18px', fontWeight: 700, color: 'var(--orange)', marginBottom: '16px' }}>
|
||||
{product.price}
|
||||
</div>
|
||||
<Link href={`/products/${product.slug}`} className="btn-primary" style={{ width: '100%', textAlign: 'center', appearance: 'none', display: 'block' }}>
|
||||
View Product →
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<section className="cta-section" style={{ marginTop: '96px' }}>
|
||||
<h2 className="cta-h2">Don't see what you <span>need?</span></h2>
|
||||
<p className="cta-sub">We handle custom orders and bulk supplies for large-scale developments.</p>
|
||||
<Link href="/#quote" className="btn-white">Contact our supply team</Link>
|
||||
{/* Pagination */}
|
||||
{totalPages > 1 && (
|
||||
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', gap: '12px', marginTop: '64px', flexWrap: 'wrap' }}>
|
||||
<button
|
||||
onClick={() => setCurrentPage(prev => Math.max(prev - 1, 1))}
|
||||
disabled={currentPage === 1}
|
||||
className="btn-secondary"
|
||||
style={{ padding: '8px 20px', opacity: currentPage === 1 ? 0.3 : 1, color: 'var(--navy)', borderColor: 'var(--navy)' }}
|
||||
>
|
||||
Prev
|
||||
</button>
|
||||
|
||||
<div style={{ display: 'flex', gap: '8px', flexWrap: 'wrap', justifyContent: 'center' }}>
|
||||
{Array.from({ length: totalPages }, (_, i) => i + 1).map((num) => (
|
||||
<button
|
||||
key={num}
|
||||
onClick={() => paginate(num)}
|
||||
style={{
|
||||
width: '40px',
|
||||
height: '40px',
|
||||
borderRadius: '4px',
|
||||
border: '1px solid',
|
||||
borderColor: currentPage === num ? 'var(--orange)' : 'var(--gray-200)',
|
||||
background: currentPage === num ? 'var(--orange)' : 'transparent',
|
||||
color: currentPage === num ? 'white' : 'var(--gray-600)',
|
||||
cursor: 'pointer',
|
||||
fontWeight: 600
|
||||
}}
|
||||
>
|
||||
{num}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<button
|
||||
onClick={() => setCurrentPage(prev => Math.min(prev + 1, totalPages))}
|
||||
disabled={currentPage === totalPages}
|
||||
className="btn-secondary"
|
||||
style={{ padding: '8px 20px', opacity: currentPage === totalPages ? 0.3 : 1, color: 'var(--navy)', borderColor: 'var(--navy)' }}
|
||||
>
|
||||
Next
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
|
||||
@ -5,7 +5,9 @@ export default function Footer() {
|
||||
<footer>
|
||||
<div className="footer-top">
|
||||
<div>
|
||||
<div className="footer-brand-name">VG Fence <span>Products</span></div>
|
||||
<div className="footer-brand-name">
|
||||
<img src="/vg-fence.png" alt="VG Fence Products" style={{ height: '32px', width: 'auto', marginLeft: '-15px' }} />
|
||||
</div>
|
||||
<div className="footer-tagline">Ontario's B2B fence supply partner — KWC & beyond</div>
|
||||
<div className="footer-territory">📍 Serving 250km radius from Kitchener-Waterloo</div>
|
||||
<div className="footer-contact" style={{ marginTop: '16px' }}>
|
||||
@ -34,6 +36,8 @@ export default function Footer() {
|
||||
<li><Link href="/#services">Site services</Link></li>
|
||||
<li><Link href="/#services">Job site delivery</Link></li>
|
||||
<li><Link href="/#services">Contractor accounts</Link></li>
|
||||
<li><Link href="/about">About Us</Link></li>
|
||||
<li><Link href="/contact">Contact Us</Link></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
@ -49,8 +53,7 @@ export default function Footer() {
|
||||
</div>
|
||||
</div>
|
||||
<div className="footer-bottom">
|
||||
<span>© {new Date().getFullYear()} VG Fence Products. All rights reserved. · Kitchener, Ontario, Canada</span>
|
||||
<span>vgfence.com</span>
|
||||
<span>© Copyright {new Date().getFullYear()} VGFence Products Powered by <a href="https://metatroncubesolutions.com/" target="_blank" rel="noopener noreferrer" style={{ color: 'var(--orange)', textDecoration: 'none' }}>MetatronCube</a>. All Right Reserved.</span>
|
||||
</div>
|
||||
</footer>
|
||||
);
|
||||
|
||||
@ -4,15 +4,18 @@ export default function Navbar() {
|
||||
return (
|
||||
<nav>
|
||||
<Link href="/" className="nav-logo">
|
||||
<div className="logo-mark">VG</div>
|
||||
<div className="logo-text">FENCE <span>PRODUCTS</span></div>
|
||||
<img src="/vg-fence.png" alt="VG Fence Products" style={{ height: '40px', width: 'auto' }} />
|
||||
</Link>
|
||||
<ul className="nav-links">
|
||||
<li><Link href="/">Home</Link></li>
|
||||
<li><Link href="/about">About</Link></li>
|
||||
<li><Link href="/products">Products</Link></li>
|
||||
<li><Link href="/login">Login</Link></li>
|
||||
<li><Link href="/contact">Contact</Link></li>
|
||||
</ul>
|
||||
<Link href="/#quote" className="nav-cta">Get a quote</Link>
|
||||
<Link href="/login" className="nav-cta" style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
|
||||
Login
|
||||
</Link>
|
||||
</nav>
|
||||
);
|
||||
}
|
||||
|
||||
683
data/products.ts
Normal file
683
data/products.ts
Normal file
@ -0,0 +1,683 @@
|
||||
export interface Product {
|
||||
id: number;
|
||||
slug: string;
|
||||
name: string;
|
||||
description: string;
|
||||
price: string;
|
||||
category: string;
|
||||
}
|
||||
|
||||
export const products: Product[] = [
|
||||
{
|
||||
id: 1,
|
||||
slug: "galvanized-commercial-chain-link-fabric",
|
||||
name: "Galvanized Commercial Chain Link Fabric",
|
||||
description: "Mesh Size: 2\" x 9 gauge (standard commercial) Gauge Options: 6 gauge (high security), 9 gauge (standard), 11 gauge (light commercial) Heights Available: 36\", 42\", 48\", 60\", 72\", 84\", 96\", 120\", 144\" Roll Length: 50 ft Finish: Hot-Dip Galvanized Selvage Options: Knuckle / Knuckle (KK), Knuckle / Twist (KT) Applications: Industrial sites, warehouses, factories, schools, municipal fencing",
|
||||
price: "$14.50 / ft",
|
||||
category: "Commercial Chain Link Fence Products"
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
slug: "black-chain-link-fence-fabric",
|
||||
name: "Black Chain Link Fence Fabric",
|
||||
description: "Mesh Size: 2\" x 9 gauge Gauge Options: 9 gauge, 11 gauge Heights Available: 36\" to 144\" Roll Length: 50 ft Finish: Black Vinyl-Coated over galvanized steel Selvage: Knuckle / Knuckle or Knuckle / Twist Applications: Commercial properties, security fencing, modern industrial sites",
|
||||
price: "$18.25 / ft",
|
||||
category: "Commercial Chain Link Fence Products"
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
slug: "galvanized-line-posts",
|
||||
name: "Galvanized Line Posts",
|
||||
description: "Outside Diameter: 1-7/8\" Wall Thickness: 17 gauge or Schedule 40 Lengths: 6'6\", 7'6\", 8'6\", 10'6\", 12'6\", 21? Finish: Galvanized",
|
||||
price: "$38.00",
|
||||
category: "Commercial Fence Posts & Pipe – Galvanized"
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
slug: "galvanized-terminal-posts",
|
||||
name: "Galvanized Terminal Posts",
|
||||
description: "Outside Diameters: 2-3/8\", 2-7/8\", 3-1/2\", 4-1/2\", 6-5/8\" Wall: Schedule 40 Finish: Galvanized Use: End, corner, brace, and gate posts",
|
||||
price: "$62.00",
|
||||
category: "Commercial Fence Posts & Pipe – Galvanized"
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
slug: "galvanized-top-rail",
|
||||
name: "Galvanized Top Rail",
|
||||
description: "Diameter: 1-5/8\" Wall: 17 gauge Lengths: 10'4\" (swedged), 21? Finish: Galvanized",
|
||||
price: "$5.50 / ft",
|
||||
category: "Commercial Fence Posts & Pipe – Galvanized"
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
slug: "black-line-posts",
|
||||
name: "Black Line Posts",
|
||||
description: "Outside Diameter: 1-7/8\" Wall Thickness: 17 gauge or Schedule 40 Lengths: 6'6\", 7'6\", 8'6\", 10'6? Finish: Black powder-coated over galvanized steel",
|
||||
price: "$45.00",
|
||||
category: "Commercial Fence Posts & Pipe – Black"
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
slug: "black-terminal-posts",
|
||||
name: "Black Terminal Posts",
|
||||
description: "Outside Diameters: 2-3/8\", 2-7/8\", 3-1/2\", 4-1/2\" Wall: Schedule 40 Finish: Black powder-coated",
|
||||
price: "$72.00",
|
||||
category: "Commercial Fence Posts & Pipe – Black"
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
slug: "black-top-rail",
|
||||
name: "Black Top Rail",
|
||||
description: "Diameter: 1-5/8\" Wall: 17 gauge Lengths: 10'4\", 21? Finish: Black powder-coated",
|
||||
price: "$7.25 / ft",
|
||||
category: "Commercial Fence Posts & Pipe – Black"
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
slug: "galvanized-industrial-swing-gates",
|
||||
name: "Galvanized Industrial Swing Gates",
|
||||
description: "Widths: 4', 5', 6', 7', 8', 10', 12? Heights: 4' to 12? Frame: Welded steel Fill: 2\" x 9 gauge galvanized chain link Hardware: Heavy-duty hinges, industrial latch Finish: Galvanized",
|
||||
price: "From $350.00",
|
||||
category: "Commercial Chain Link Gates – Galvanized"
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
slug: "galvanized-double-drive-gates",
|
||||
name: "Galvanized Double Drive Gates",
|
||||
description: "Openings: 8' to 24? Includes: Drop rods, gate stops Finish: Galvanized",
|
||||
price: "From $650.00",
|
||||
category: "Commercial Chain Link Gates – Galvanized"
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
slug: "black-industrial-chain-link-gates",
|
||||
name: "Black Industrial Chain Link Gates",
|
||||
description: "Single & Double Swing Options Widths: 4' to 24? Heights: 4' to 12? Frame: Welded steel tubing Fill: 2\" x 9 gauge black chain link Optional: Black powder-coated, Gate operators, cane bolts",
|
||||
price: "From $420.00",
|
||||
category: "Commercial Chain Link Gates – Black"
|
||||
},
|
||||
{
|
||||
id: 12,
|
||||
slug: "chain-link-fence-fittings",
|
||||
name: "Chain Link Fence Fittings",
|
||||
description: "Available Finishes: Galvanized, Black (powder-coated)",
|
||||
price: "Contact for Pricing",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 13,
|
||||
slug: "tension-bands-commercial",
|
||||
name: "Tension Bands",
|
||||
description: "Use: Attach chain link fabric to end, corner, and gate posts Fits post sizes: 1-5/8\" to 6-5/8\" Used with tension bars and bolts Heavy-duty steel Finish: Galvanized or Black",
|
||||
price: "$1.40",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 14,
|
||||
slug: "brace-bands-commercial",
|
||||
name: "Brace Bands",
|
||||
description: "Use: Connect top rail or brace rail to terminal posts Fits post sizes: 1-5/8\" to 6-5/8\" Works with rail ends Commercial-grade steel Finish: Galvanized or Black",
|
||||
price: "$1.65",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 15,
|
||||
slug: "rail-ends-rail-end-cups-commercial",
|
||||
name: "Rail Ends & Rail End Cups",
|
||||
description: "Use: Secure top rail to brace bands Fits 1-3/8\" and 1-5/8\" top rail Steel construction Easy bolt-on installation Finish: Galvanized or Black",
|
||||
price: "$2.85",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 16,
|
||||
slug: "post-caps-commercial",
|
||||
name: "Post Caps",
|
||||
description: "Use: Protect posts and support top rail Line post loop caps for top rail Terminal caps for end and corner posts Fits posts from 1-5/8\" to 6-5/8\" Finish: Galvanized or Black",
|
||||
price: "$3.95",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 17,
|
||||
slug: "tension-bars-commercial",
|
||||
name: "Tension Bars",
|
||||
description: "Use: Tighten and secure chain link fabric Widths: 1/2\" or 3/4\" Lengths: 36\" to 144\" Flat steel bar Finish: Galvanized or Black",
|
||||
price: "$9.50",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 18,
|
||||
slug: "truss-rod-assemblies-commercial",
|
||||
name: "Truss Rod Assemblies",
|
||||
description: "Use: Strengthen end and corner posts Includes rod, turnbuckle, and fittings Prevents post movement Used on terminal posts Finish: Galvanized or Black",
|
||||
price: "$18.50",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 19,
|
||||
slug: "boulevard-clamps-commercial",
|
||||
name: "Boulevard Clamps",
|
||||
description: "Use: Connect horizontal rail to vertical post Used for extensions or special connections Heavy-duty steel clamp Multiple size options Finish: Galvanized or Black",
|
||||
price: "$4.25",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 20,
|
||||
slug: "carriage-bolts-nuts-commercial",
|
||||
name: "Carriage Bolts & Nuts",
|
||||
description: "Use: Fasten bands, clamps, and hardware Sizes: 5/16\" and 3/8\" Rounded carriage head Steel construction Finish: Galvanized or Black",
|
||||
price: "$0.45",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 21,
|
||||
slug: "barb-arms-commercial",
|
||||
name: "Barb Arms",
|
||||
description: "Use: Add barbed wire for security fencing 45? Barb Arms: Angled outward, holds 3 strands Vertical Barb Arms: Straight up design, holds 3 strands Double Barb Arms: Dual-direction arms, holds up to 6 strands Finish: Galvanized or Black",
|
||||
price: "$15.50",
|
||||
category: "Commercial Fence Hardware – Galvanized & Black"
|
||||
},
|
||||
{
|
||||
id: 22,
|
||||
slug: "lifemax-composite-deck-boards",
|
||||
name: "LifeMax Composite Deck Boards",
|
||||
description: "Solid core composite material Made with ~85% recycled wood and plastic 4-sided capping for durability Weather-resistant, UV and moisture resistant Low-maintenance (no staining/sealing) Anti-slip, quiet walk surface Sizes: Grooved edge deck board ? approx 5.43\" ? 0.91\" Length Options: 12' and 16' (or similar industry standard lengths) Available Colours: Black, Ancient Wood, Anthracite Grey, Maple, Smoke Grey, Red Wood, Golden Teak, Mica Grey, Willow, Blue Grey (colour options vary by supplier)",
|
||||
price: "$185.00 / panel",
|
||||
category: "DECK PRODUCTS"
|
||||
},
|
||||
{
|
||||
id: 23,
|
||||
slug: "ecomost-composite-deck-boards",
|
||||
name: "EcoMost Composite Deck Boards",
|
||||
description: "Hollow core composite board ~85% recycled wood and plastic makeup Lightweight yet strong Weather-resistant and low-maintenance Anti-slip and moisture resistant Sizes: approx 5.43\" ? 0.91\" grooved edge Length Options: 12' and 16' Colour Options: Black plus other wood-tone colours",
|
||||
price: "$65.00",
|
||||
category: "DECK PRODUCTS"
|
||||
},
|
||||
{
|
||||
id: 24,
|
||||
slug: "starter-deck-boards-starter-boards",
|
||||
name: "Starter Deck Boards / Starter Boards",
|
||||
description: "Used at edges to start first row of decking Matches LifeMax and EcoMost boards Same width as deck boards Length Options: 12' and 16' Made of composite material Available in standard DexEra colours",
|
||||
price: "$85.00",
|
||||
category: "DECK PRODUCTS"
|
||||
},
|
||||
{
|
||||
id: 25,
|
||||
slug: "composite-deck-fascia-boards",
|
||||
name: "Composite Deck Fascia Boards",
|
||||
description: "Solid composite board to finish deck edges Protects joists and gives a polished look Size: approx 7.5\" ? 0.55\" Lengths: 12' and 16' Matches deck boards in colour and finish Weather-resistant, low-maintenance",
|
||||
price: "$95.00",
|
||||
category: "DECK PRODUCTS"
|
||||
},
|
||||
{
|
||||
id: 26,
|
||||
slug: "deck-board-clip-fastener-kits",
|
||||
name: "Deck Board Clip & Fastener Kits",
|
||||
description: "Stainless steel or corrosion-resistant fasteners Designed for hidden or exposed fastening Includes clips and screws in kit form Works with composite decking boards Helps secure boards without visible screw heads",
|
||||
price: "$45.00 / pack",
|
||||
category: "DECK PRODUCTS"
|
||||
},
|
||||
{
|
||||
id: 27,
|
||||
slug: "deck-railing-systems-composite-metal",
|
||||
name: "Deck Railing Systems (Composite & Metal)",
|
||||
description: "Composite railing or aluminum railing options Includes posts, balusters/infill, post sleeves, post caps Designed to match decking style and colours Weather-resistant, low-maintenance",
|
||||
price: "From $145.00",
|
||||
category: "DECK PRODUCTS"
|
||||
},
|
||||
{
|
||||
id: 28,
|
||||
slug: "tension-bands-residential",
|
||||
name: "Tension Bands",
|
||||
description: "Secures chain link fabric to terminal posts Fits post sizes: 1-5/8\" to 6-5/8\" Finish: Galvanized, Black",
|
||||
price: "$1.15",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 29,
|
||||
slug: "brace-bands-residential",
|
||||
name: "Brace Bands",
|
||||
description: "Connects top rail to terminal posts Fits post sizes: 1-5/8\" to 6-5/8\" Finish: Galvanized, Black",
|
||||
price: "$1.35",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 30,
|
||||
slug: "boulevard-clamps-residential",
|
||||
name: "Boulevard Clamps",
|
||||
description: "Connects horizontal rail to vertical post Multiple size combinations Finish: Galvanized, Black",
|
||||
price: "$2.10",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 31,
|
||||
slug: "rail-ends-residential",
|
||||
name: "Rail Ends",
|
||||
description: "Attaches top rail to brace bands Fits 1-3/8\" and 1-5/8\" rail Finish: Galvanized, Black",
|
||||
price: "$2.20",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 32,
|
||||
slug: "rail-end-cups-residential",
|
||||
name: "Rail End Cups",
|
||||
description: "Locks rail end into brace band Finish: Galvanized, Black",
|
||||
price: "$7.25",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 33,
|
||||
slug: "line-post-caps-loop-caps",
|
||||
name: "Line Post Caps (Loop Caps)",
|
||||
description: "Supports top rail on line posts Fits 1-5/8\" and 1-7/8\" posts Finish: Galvanized, Black",
|
||||
price: "$0.85",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 34,
|
||||
slug: "terminal-post-caps-residential",
|
||||
name: "Terminal Post Caps",
|
||||
description: "Covers end, corner, and gate posts Fits 2-3/8\" to 6-5/8\" posts Finish: Galvanized, Black",
|
||||
price: "$8.50",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 35,
|
||||
slug: "tension-bars-residential",
|
||||
name: "Tension Bars",
|
||||
description: "Used to tension chain link fabric Lengths: 36\" ? 144\" Finish: Galvanized, Black",
|
||||
price: "$16.50",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 36,
|
||||
slug: "truss-rod-assemblies-residential",
|
||||
name: "Truss Rod Assemblies",
|
||||
description: "Strengthens terminal and corner posts Includes rod and turnbuckle Finish: Galvanized, Black",
|
||||
price: "$14.00",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 37,
|
||||
slug: "bottom-tension-wire",
|
||||
name: "Bottom Tension Wire",
|
||||
description: "Keeps bottom of fence tight Finish: Galvanized",
|
||||
price: "$0.35 / ft",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 38,
|
||||
slug: "carriage-bolts-nuts-residential",
|
||||
name: "Carriage Bolts & Nuts",
|
||||
description: "Used with bands, clamps, and fittings Sizes: 5/16\", 3/8\" Finish: Galvanized, Black",
|
||||
price: "$0.25",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 39,
|
||||
slug: "barb-arms-residential",
|
||||
name: "Barb Arms",
|
||||
description: "45? Barb Arms Vertical Barb Arms Double Barb Arms Finish: Galvanized, Black",
|
||||
price: "$12.50",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 40,
|
||||
slug: "barbed-wire",
|
||||
name: "Barbed Wire",
|
||||
description: "4-point barbed wire Finish: Galvanized",
|
||||
price: "$75.00 / roll",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 41,
|
||||
slug: "gate-hinges-residential",
|
||||
name: "Gate Hinges",
|
||||
description: "Heavy-duty adjustable hinges Finish: Galvanized, Black",
|
||||
price: "$28.00 / pair",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 42,
|
||||
slug: "gate-latches-residential",
|
||||
name: "Gate Latches",
|
||||
description: "Fork latch / gravity latch styles Lockable options available Finish: Galvanized, Black",
|
||||
price: "$14.00",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 43,
|
||||
slug: "drop-rods-cane-bolts-residential",
|
||||
name: "Drop Rods (Cane Bolts)",
|
||||
description: "For double swing gates Finish: Galvanized, Black",
|
||||
price: "$45.00 / pair",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 44,
|
||||
slug: "privacy-slats",
|
||||
name: "Privacy Slats",
|
||||
description: "Inserts into chain link mesh Color: Black",
|
||||
price: "$65.00 / box",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 45,
|
||||
slug: "fence-weave-wind-screen",
|
||||
name: "Fence Weave / Wind Screen",
|
||||
description: "Wind and visibility reduction Color: Black",
|
||||
price: "$85.00 / roll",
|
||||
category: "FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 46,
|
||||
slug: "post-caps-ornamental",
|
||||
name: "Post Caps",
|
||||
description: "Flat, ball, spear, or decorative styles Fits ornamental fence posts Finish: Black",
|
||||
price: "$2.50",
|
||||
category: "ORNAMENTAL FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 47,
|
||||
slug: "post-base-plates-ornamental",
|
||||
name: "Post Base Plates",
|
||||
description: "Surface-mount post installation Steel construction Finish: Black",
|
||||
price: "$18.00",
|
||||
category: "ORNAMENTAL FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 48,
|
||||
slug: "panel-mount-brackets-ornamental",
|
||||
name: "Panel Mount Brackets",
|
||||
description: "Connect fence panels to posts Bolt-on or screw-on Finish: Black",
|
||||
price: "$3.50",
|
||||
category: "ORNAMENTAL FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 49,
|
||||
slug: "rail-brackets-ornamental",
|
||||
name: "Rail Brackets",
|
||||
description: "Secures horizontal rails to posts Finish: Black",
|
||||
price: "$4.50",
|
||||
category: "ORNAMENTAL FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 50,
|
||||
slug: "self-drilling-screws-ornamental",
|
||||
name: "Self-Drilling Screws",
|
||||
description: "Exterior-grade steel Corrosion-resistant Finish: Black",
|
||||
price: "$5.50 / pack",
|
||||
category: "ORNAMENTAL FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 51,
|
||||
slug: "anchor-bolts-ornamental",
|
||||
name: "Anchor Bolts",
|
||||
description: "Used for surface-mounted posts Heavy-duty steel Finish: Galvanized",
|
||||
price: "$6.00 / unit",
|
||||
category: "ORNAMENTAL FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 52,
|
||||
slug: "gate-hinges-ornamental",
|
||||
name: "Gate Hinges",
|
||||
description: "Adjustable ornamental gate hinges Heavy-duty design Finish: Black",
|
||||
price: "$32.00 / pair",
|
||||
category: "ORNAMENTAL FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 53,
|
||||
slug: "gate-latches-ornamental",
|
||||
name: "Gate Latches",
|
||||
description: "Self-latching and lockable styles Residential & commercial use Finish: Black",
|
||||
price: "$24.50",
|
||||
category: "ORNAMENTAL FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 54,
|
||||
slug: "drop-rods-ornamental",
|
||||
name: "Drop Rods",
|
||||
description: "For double ornamental gates Finish: Black",
|
||||
price: "$55.00",
|
||||
category: "ORNAMENTAL FENCE HARDWARE & ACCESSORIES"
|
||||
},
|
||||
{
|
||||
id: 55,
|
||||
slug: "chain-link-line-posts",
|
||||
name: "Chain Link Line Posts",
|
||||
description: "Used for: Supporting chain link fabric Sizes / Diameters: 1-5/8?, 1-7/8? Wall Thickness: 17 gauge standard Lengths: 6'6?, 7'6?, 8'6?, 10'6? Finish: Galvanized, Black",
|
||||
price: "$18.50 / unit",
|
||||
category: "FENCE POSTS & TUBING"
|
||||
},
|
||||
{
|
||||
id: 56,
|
||||
slug: "chain-link-terminal-corner-posts",
|
||||
name: "Chain Link Terminal & Corner Posts",
|
||||
description: "Used for: Ends, corners, gates Diameters: 2-3/8?, 2-7/8?, 3-1/2?, 4-1/2?, 6-5/8? Wall: Schedule 40 Lengths: 8? to 12?+ depending on size Finish: Galvanized, Black",
|
||||
price: "$35.00 / unit",
|
||||
category: "FENCE POSTS & TUBING"
|
||||
},
|
||||
{
|
||||
id: 57,
|
||||
slug: "chain-link-top-rail",
|
||||
name: "Chain Link Top Rail",
|
||||
description: "Used for: Connecting line posts and adding stability Diameter: 1-5/8? Swedged or plain ends Standard Lengths: 10'4?, 21? Finish: Galvanized, Black",
|
||||
price: "$4.50 / ft",
|
||||
category: "FENCE POSTS & TUBING"
|
||||
},
|
||||
{
|
||||
id: 58,
|
||||
slug: "ornamental-fence-posts-black",
|
||||
name: "Ornamental Fence Posts – Black",
|
||||
description: "Used for: Decorative / ornamental metal fencing Material: Steel or aluminum Styles: Square picket posts, Rounded posts, Decorative finial tops Sizes: 2\" x 2\", 2.5\" x 2.5\" Finish: Black powder-coated Notes: Designed to match ornamental fencing panels for a finished look",
|
||||
price: "$42.00 / unit",
|
||||
category: "FENCE POSTS & TUBING"
|
||||
},
|
||||
{
|
||||
id: 59,
|
||||
slug: "ornamental-railing-posts-black",
|
||||
name: "Ornamental Railing Posts – Black",
|
||||
description: "Used for: Deck railing, balcony railing, ornamental fences Post Sizes: 2\" x 2\", 2.5\" x 2.5\" Material: Aluminum or steel Finish: Black powder-coated Styles: Square, Decorative tops (flat cap, ball cap) Compatible with: Metal pickets, table infill, glass infill",
|
||||
price: "$38.00 / unit",
|
||||
category: "FENCE POSTS & TUBING"
|
||||
},
|
||||
{
|
||||
id: 60,
|
||||
slug: "post-caps-finials-black-galvanized",
|
||||
name: "Post Caps & Finials (Black & Galvanized)",
|
||||
description: "Used to finish post tops Styles: Flat caps, Dome caps, Decorative finials (ball, spear, fleur) Fits: Chain link posts, Ornamental posts Finish: Galvanized, Black",
|
||||
price: "$12.50",
|
||||
category: "FENCE POSTS & TUBING"
|
||||
},
|
||||
{
|
||||
id: 61,
|
||||
slug: "surface-mount-post-bases",
|
||||
name: "Surface Mount Post Bases",
|
||||
description: "Used for: Installing railing posts on wood or concrete Material: Steel or aluminum Finish: Black, Galvanized",
|
||||
price: "$28.00",
|
||||
category: "FENCE POSTS & TUBING"
|
||||
},
|
||||
{
|
||||
id: 62,
|
||||
slug: "commercial-chain-link-swing-gates",
|
||||
name: "Commercial Chain Link Swing Gates",
|
||||
description: "Type: Single Swing / Double Swing Widths: 4?, 5?, 6?, 8?, 10?, 12? Heights: 6?, 7?, 8?, 10?, 12? Frame Tubing: 1 5/8\" or 2\" OD steel Mesh: 9 ga (standard), 6 ga (high security) Finish: Galvanized or Black Applications: Industrial facilities, construction sites, municipal properties",
|
||||
price: "From $210 / ft",
|
||||
category: "Gates & Gate Hardware"
|
||||
},
|
||||
{
|
||||
id: 63,
|
||||
slug: "cantilever-rolling-slide-chain-link-gates",
|
||||
name: "Cantilever Rolling / Slide Chain Link Gates",
|
||||
description: "Opening Widths: 12?, 16?, 20', 24?, 30' Gate Heights: 6?, 8? System: Trackless cantilever Finish: Galvanized or Black",
|
||||
price: "From $1,250",
|
||||
category: "Gates & Gate Hardware"
|
||||
},
|
||||
{
|
||||
id: 64,
|
||||
slug: "rolling-slide-chain-link-gates",
|
||||
name: "Rolling / Slide Chain Link Gates",
|
||||
description: "Opening Widths: 10' - 30' Track Type: Ground track Finish: Galvanized or Black",
|
||||
price: "From $850.00",
|
||||
category: "Gates & Gate Hardware"
|
||||
},
|
||||
{
|
||||
id: 65,
|
||||
slug: "commercial-gate-hardware",
|
||||
name: "Commercial Gate Hardware",
|
||||
description: "Heavy-Duty Adjustable Hinges Cantilever Roller Assemblies Guide Rollers & Posts Industrial Gate Latches (padlock-ready) Drop Rods / Cane Bolts Gate Stops Finish: Galvanized or Black",
|
||||
price: "$155.00 / kit",
|
||||
category: "Gates & Gate Hardware"
|
||||
},
|
||||
{
|
||||
id: 66,
|
||||
slug: "ornamental-gates-commercial",
|
||||
name: "Ornamental Gates – Commercial",
|
||||
description: "Heavy duty ornamental steel and aluminum gates designed to match commercial ornamental fencing systems while providing secure access control Type: Single Swing / Double Swing Widths: 4?, 6?, 8', 10?, 12', 16' Heights: 4?, 5?, 6?, 8' Styles: Flat Top / Spear Top Frame: Welded steel or aluminum Finish: Galvanized or Black Powder-Coated Applications: Commercial properties, institutional buildings, gated facilities",
|
||||
price: "From $550.00",
|
||||
category: "Gates & Gate Hardware"
|
||||
},
|
||||
{
|
||||
id: 67,
|
||||
slug: "chain-link-swing-gates-residential",
|
||||
name: "Chain Link Swing Gates – Residential",
|
||||
description: "Type: Single / Double Swing Widths: 3', 4', 5', 6', 8', 10' Heights: 4', 5', 6' Frame: 1-3/8\" OD steel Mesh: 11 ga Finish: Galvanized or Black",
|
||||
price: "From $125.00",
|
||||
category: "Gates & Gate Hardware"
|
||||
},
|
||||
{
|
||||
id: 68,
|
||||
slug: "ornamental-gates-residential",
|
||||
name: "Ornamental Gates – Residential",
|
||||
description: "Decorative yet durable ornamental gates designed to complement residential ornamental fencing Type: Single Swing / Double Swing Widths: 3', 4', 5', 6', 8', 10' Heights: 4', 5', 6' Styles: Flat Top / Spear Top / Puppy Picket Finish: Black Powder-Coated or Galvanized Applications: Homes, private properties, decorative fencing",
|
||||
price: "From $185.00",
|
||||
category: "Gates & Gate Hardware"
|
||||
},
|
||||
{
|
||||
id: 69,
|
||||
slug: "residential-gate-hardware",
|
||||
name: "Residential Gate Hardware",
|
||||
description: "Adjustable Hinges Self-Closing Hinges (optional) Gravity Latches Thumb Latches Padlockable Latches Drop Rods Finish: Galvanized or Black",
|
||||
price: "$48.00 / kit",
|
||||
category: "Gates & Gate Hardware"
|
||||
},
|
||||
{
|
||||
id: 70,
|
||||
slug: "universal-gate-hardware",
|
||||
name: "Universal Gate Hardware",
|
||||
description: "Hinges (1-3/8\" to 3\" compatibility) Latches & Locks Drop Rods / Cane Bolts Gate Stops Roller & Guide Assemblies Finish: Galvanized & Black Only",
|
||||
price: "$32.00 / kit",
|
||||
category: "Gates & Gate Hardware"
|
||||
},
|
||||
{
|
||||
id: 71,
|
||||
slug: "residential-iron-fence-systems",
|
||||
name: "Residential Iron Fence Systems",
|
||||
description: "Specifications:\nMaterial: Cold-rolled steel tubing\nCoating: Galv + Zinc Phosphate + E-Coat (standard heights) + Polyester Powder Coat\nRail Size: 1\" square\nPicket Size: 5/8\" square\nPost Size: 2\" square (other sizes available)\nAvailable Profiles: Spear Top, Triad, Pinch Top\nHeights Available: 4 ft, 5 ft, 6 ft\nFinish Options: High Gloss Black, Flat Black, Textured Black\nGate Options: Single, Double, Arched, Full Arch\nWarranty: 10-Year Limited Warranty\nApplications: Residential yards, pools, gardens, walkways, decorative property fencing.",
|
||||
price: "$19.50 / ft",
|
||||
category: "Ornamental Fence"
|
||||
},
|
||||
{
|
||||
id: 72,
|
||||
slug: "commercial-iron-fence-solutions",
|
||||
name: "Commercial Iron Fence Solutions",
|
||||
description: "Specifications:\nCollection: States Collection\nRail Size: 1-1/2\" square\nPicket Size: 1\" square\nPost Size: 2-1/2\" square\nMaterial: Galv-coated cold-rolled steel\nMounting: Universal and swivel brackets available\nFinish Options: High Gloss Black, Flat Black, Textured Black\nGate Compatibility: Matching commercial swing and driveway gates\nHeight Options: Custom and standard heights available\nWarranty: 10-Year Limited Warranty\nApplications: Commercial properties, office complexes, schools, retail centers, municipal fencing.",
|
||||
price: "$28.00 / ft",
|
||||
category: "Ornamental Fence"
|
||||
},
|
||||
{
|
||||
id: 73,
|
||||
slug: "industrial-iron-fence-systems",
|
||||
name: "Industrial Iron Fence Systems",
|
||||
description: "Specifications:\nCollection: Memorial Collection & Memorial Aluminum Collection\nRail Size: 2-1/2\" x 1-1/2\"\nPicket Size: 1/2\" x 1/2\"\nPost Size: 3\" square\nSecurity Feature: Pinch-top pickets available\nMaterial: Heavy-duty cold-rolled steel or aluminum\nFinish Options: High Gloss Black, Flat Black, Textured Black\nGate Options: Swing, cantilever, automated-ready gates\nWarranty: 10-Year Limited Warranty\nApplications: Warehouses, factories, industrial facilities, infrastructure sites, high-security properties.",
|
||||
price: "$42.00 / ft",
|
||||
category: "Ornamental Fence"
|
||||
},
|
||||
{
|
||||
id: 74,
|
||||
slug: "ornamental-iron-fence-designs",
|
||||
name: "Ornamental Iron Fence Designs",
|
||||
description: "Specifications:\nAvailable Styles: Spear Top, Triad, Pinch Top\nDecorative Options: Ball, Pyramid, Spear post caps\nMaterial: Galv-coated steel\nRail & Picket Sizes: Vary by collection\nFinish Options: High Gloss Black, Flat Black, Textured Black\nGate Matching: Fully compatible ornamental gates\nWarranty: 10-Year Limited Warranty\nApplications: Decorative landscaping, estate fencing, front yards, architectural projects.",
|
||||
price: "Call for Pricing",
|
||||
category: "Ornamental Fence"
|
||||
},
|
||||
{
|
||||
id: 75,
|
||||
slug: "aluminum-fence-panels",
|
||||
name: "Aluminum Fence Panels",
|
||||
description: "Specifications:\nCollection: Memorial Aluminum Collection\nMaterial: Premium aluminum\nRust-Resistant & Lightweight\nRail & Picket Sizes: Match Memorial profiles\nFinish: Powder-coated black\nGate Compatibility: Matching aluminum gates available\nApplications: Residential, commercial, and coastal installations requiring corrosion resistance.",
|
||||
price: "$32.00 / ft",
|
||||
category: "Ornamental Fence"
|
||||
},
|
||||
{
|
||||
id: 76,
|
||||
slug: "iron-fence-gates",
|
||||
name: "Iron Fence Gates",
|
||||
description: "Specifications:\nGate Types: Single, Double, Arched, Full Arch\nHardware: Self-closing hardware available (pool code compliant)\nLock Options: Lock boxes available\nAutomation Ready: Yes\nMaterial: Cold-rolled steel with Galv coating\nFinish: Powder-coated black\nApplications: Driveways, walkways, commercial entrances, secured access points.",
|
||||
price: "From $250.00",
|
||||
category: "Ornamental Fence"
|
||||
},
|
||||
{
|
||||
id: 77,
|
||||
slug: "decorative-iron-post-caps",
|
||||
name: "Decorative Iron Post Caps",
|
||||
description: "Specifications:\nStyles Available: Pyramid, Ball, Spear, Triad\nMaterial: Cast aluminum or steel\nFinish: Black powder coat\nCompatibility: Residential, commercial, and industrial posts\nApplications: Decorative fencing, architectural accents, custom fence projects.",
|
||||
price: "$14.50 / unit",
|
||||
category: "Ornamental Fence"
|
||||
},
|
||||
{
|
||||
id: 78,
|
||||
slug: "aluminum-railing-systems",
|
||||
name: "Aluminum Railing Systems",
|
||||
description: "Specifications:\nMaterial: Heavy-duty aluminum\nFinish: Powder-coated for UV and corrosion resistance\nColors Available: Black, white, custom finishes available\nMounting Options: Surface mount or fascia mount\nCode Compliance: Meets residential and commercial building codes\nApplications: Decks, balconies, stairways, porches",
|
||||
price: "$85.00 / ft",
|
||||
category: "Railings & Glass Railings"
|
||||
},
|
||||
{
|
||||
id: 79,
|
||||
slug: "glass-railing-hardware-accessories",
|
||||
name: "Glass Railing Hardware & Accessories",
|
||||
description: "Hardware Types Available:\nGlass Clamps (Square & Round)\nGlass Spigots / Posts\nBase Shoe Systems\nStandoff Mounts\nHandrail Brackets\nGlass Connectors & Corner Clamps\nEnd Caps & Covers\nSpecifications:\nMaterial Options: Stainless steel, aluminum\nGrades Available: 304 stainless steel (interior), 316 stainless steel (exterior/coastal)\nFinish Options: Brushed stainless, polished stainless, matte black, custom finishes\nGlass Compatibility: Fits 10 mm, 12 mm tempered or laminated glass\nMounting Options: Top mount, side mount, surface mount\nLoad Rating: Designed to meet residential and commercial code requirements\nCorrosion Resistance: Suitable for outdoor and high-moisture environments\nSystem Compatibility:\nFrameless glass railing systems\nSemi-frameless railing systems\nBalcony, deck, and stair glass railings\nInterior and exterior installations\nApplications: Balconies, decks, staircases, terraces, pool enclosures, commercial buildings, modern architectural projects.",
|
||||
price: "Varies by Project",
|
||||
category: "Railings & Glass Railings"
|
||||
},
|
||||
{
|
||||
id: 80,
|
||||
slug: "glass-railings-custom-glass-railings",
|
||||
name: "Glass Railings & Custom Glass Railings",
|
||||
description: "Specifications:\nGlass Type: Tempered safety glass or laminated safety glass\nGlass Thickness Options: 10 mm, 12 mm, 15 mm, or custom thickness as per project requirements\nCustom Glass: We cut, shape, and fabricate glass to your specifications, including curves, etching, frosted or tinted finishes\nSystem Types: Frameless, semi-frameless, post mounted, or top rail mounted\nHardware Material: Stainless steel or powder-coated aluminum for posts, clamps, spigots, and connectors\nMounting Options: Top mount, side mount, or base shoe system\nCompliance: Meets all residential and commercial building codes and safety regulations\nStandard Options: Aluminum, stainless steel, or custom design caps\nApplications: Balconies & terraces\nStaircases & landings\nDecks & rooftop railings\nCommercial & residential properties\nHotels, resorts, and luxury apartments",
|
||||
price: "From $250.00 / ft",
|
||||
category: "Railings & Glass Railings"
|
||||
},
|
||||
{
|
||||
id: 81,
|
||||
slug: "temporary-fence-rentals",
|
||||
name: "Temporary Fence Rentals",
|
||||
description: "Rental Options:\nShort term (daily/weekly) or long term (monthly)\nPanel and gate rental packages\nDelivery and pickup included (area-dependent)\nCustom layouts for crowd management, security, or safety\nApplications: Outdoor events, concerts, roadworks, construction sites, festivals, sports events. Enhance temporary fence with accessories for safety, visibility, and convenience. Includes: Safety signage and banners, feet, clamps, connectors, protective base plates, security lock kits",
|
||||
price: "$12.00 / month / panel",
|
||||
category: "Temporary Fence Rentals"
|
||||
},
|
||||
{
|
||||
id: 82,
|
||||
slug: "temporary-fence-accessories-add-ons",
|
||||
name: "Temporary Fence Accessories & Add-Ons",
|
||||
description: "Applications: Public safety, construction compliance, event organization, traffic control",
|
||||
price: "Inquire for Pricing",
|
||||
category: "Temporary Fence Rentals"
|
||||
},
|
||||
{
|
||||
id: 83,
|
||||
slug: "wood-fence-hardware-accessories",
|
||||
name: "Wood Fence Hardware & Accessories",
|
||||
description: "Wood Fence Hardware\nBrackets & Mounting Hardware\nGate Hinges (Heavy-Duty & Decorative)\nLatches & Locks\nGate Closers\nPost Caps & Finials\nScrews, Bolts & Fasteners\nWood Gates\nSingle Wood Gates\nDouble Wood Gates\nDecorative Wood Gates\nCustom Sized Wood Gates\nGate Frames & Reinforcements\nDrop Rods & Gate Accessories\nApplications:\nResidential yards & gardens\nCommercial properties\nDecorative fencing\nSecurity fencing",
|
||||
price: "Varies",
|
||||
category: "Wood Fence Hardware & Gates"
|
||||
},
|
||||
{
|
||||
id: 84,
|
||||
slug: "spray-paint",
|
||||
name: "Spray Paint",
|
||||
description: "High-quality fence spray paint for chain link, ornamental, and metal fences. Available in standard fence colors like Black, Cold Zinc Galvanized, Green, Brown, and custom shades. Perfect for touch-ups, maintenance, or finishing new installations.",
|
||||
price: "$14.50 / can",
|
||||
category: "Others"
|
||||
}
|
||||
];
|
||||
BIN
public/favicon.png
Normal file
BIN
public/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
BIN
public/vg-fence.png
Normal file
BIN
public/vg-fence.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.6 KiB |
Loading…
x
Reference in New Issue
Block a user