Skip to content

Commit 7ca048f

Browse files
authored
Merge pull request #2 from DarkModder33/copilot/deploy-customer-repo-website
[WIP] Ensure customer repo is deployed and optimized for production
2 parents 06fddf3 + da295ce commit 7ca048f

17 files changed

Lines changed: 1532 additions & 260 deletions

404.html

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,30 @@
77
<meta property='og:title' content='Page Not Found – Jersey Girl's Public Adjusting LLC'>
88
<meta property='og:description' content='404 page for Jersey Girl's Public Adjusting LLC.'>
99
<meta property='og:type' content='website'>
10-
<meta property='og:image' content='/assets/og-image.png'>
10+
<meta property='og:image' content='assets/og-image.png'>
1111
<meta name='twitter:card' content='summary_large_image'>
1212
<meta name='twitter:title' content='Page Not Found – Jersey Girl's Public Adjusting LLC'>
1313
<meta name='twitter:description' content='404 page for Jersey Girl's Public Adjusting LLC.'>
14-
<meta name='twitter:image' content='/assets/og-image.png'>
15-
<link rel='icon' href='/assets/favicon.svg' type='image/svg+xml'>
14+
<meta name='twitter:image' content='assets/og-image.png'>
15+
<link rel='icon' href='assets/favicon.svg' type='image/svg+xml'>
1616
<link rel='preconnect' href='https://fonts.googleapis.com'>
1717
<link rel='preconnect' href='https://fonts.gstatic.com' crossorigin>
1818
<link href='https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Playfair+Display:wght@600;700&display=swap' rel='stylesheet'>
19-
<link rel='stylesheet' href='/assets/styles.css'>
19+
<link rel='stylesheet' href='assets/styles.css'>
2020
</head><body>
2121

2222
<a class='skip' href='#main'>Skip to content</a>
2323
<header class='topbar'>
2424
<div class='container nav'>
25-
<a class='brand' href='/'><img src='/assets/logo.svg' alt='Jersey Girl's Public Adjusting LLC logo'> Jersey Girl's Public Adjusting LLC</a>
25+
<a class='brand' href='index.html'><img src='assets/logo.svg' alt='Jersey Girl's Public Adjusting LLC logo'> Jersey Girl's Public Adjusting LLC</a>
2626
<button class='burger' aria-label='Toggle menu' aria-expanded='false' aria-controls='menu'></button>
2727
<nav id='menu' class='menu'>
28-
<a href='/'>Home</a>
29-
<a href='/services.html'>Services</a>
30-
<a href='/service-areas.html'>Service Areas</a>
31-
<a href='/schedule.html'>Schedule</a>
32-
<a href='/about.html'>About</a>
33-
<a class='cta' href='/contact.html'>Free Claim Review</a>
28+
<a href='index.html'>Home</a>
29+
<a href='services.html'>Services</a>
30+
<a href='service-areas.html'>Service Areas</a>
31+
<a href='schedule.html'>Schedule</a>
32+
<a href='about.html'>About</a>
33+
<a class='cta' href='contact.html'>Free Claim Review</a>
3434
</nav>
3535
</div>
3636
</header>
@@ -41,7 +41,7 @@
4141

4242
<main id='main' class='section'><div class='container'>
4343
<h1>Page Not Found</h1>
44-
<p>Let’s get you back on track. Try the <a href='/'>home page</a>, <a href='/schedule.html'>schedule page</a>, or <a href='/contact.html'>contact page</a>.</p>
44+
<p>Let’s get you back on track. Try the <a href='index.html'>home page</a>, <a href='schedule.html'>schedule page</a>, or <a href='contact.html'>contact page</a>.</p>
4545
</div></main>
4646

4747
<footer class='footer'>
@@ -53,14 +53,14 @@ <h1>Page Not Found</h1>
5353
<small>Hours: Open 24 hours daily</small>
5454
</div>
5555
<nav class='footer__nav'>
56-
<a href='/schedule.html'>Schedule</a>
57-
<a href='/contact.html'>Contact</a>
58-
<a href='/privacy.html'>Privacy Policy</a>
59-
<a href='/terms.html'>Terms</a>
56+
<a href='schedule.html'>Schedule</a>
57+
<a href='contact.html'>Contact</a>
58+
<a href='privacy.html'>Privacy Policy</a>
59+
<a href='terms.html'>Terms</a>
6060
</nav>
6161
<div class='fineprint'>© 2026 Jersey Girl's Public Adjusting LLC. Independently created, owned & operated by a New Jersey woman‑owned firm. Not affiliated with any insurance company.</div>
6262
</div>
63-
<script src='/assets/script.js'></script>
63+
<script src='assets/script.js'></script>
6464
</footer>
6565

6666
</body></html>

about.html

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,30 @@
77
<meta property='og:title' content='About – Jersey Girl's Public Adjusting LLC'>
88
<meta property='og:description' content='About Jersey Girl's Public Adjusting LLC, a woman‑owned independent NJ public adjuster in Vineland.'>
99
<meta property='og:type' content='website'>
10-
<meta property='og:image' content='/assets/og-image.png'>
10+
<meta property='og:image' content='assets/og-image.png'>
1111
<meta name='twitter:card' content='summary_large_image'>
1212
<meta name='twitter:title' content='About – Jersey Girl's Public Adjusting LLC'>
1313
<meta name='twitter:description' content='About Jersey Girl's Public Adjusting LLC, a woman‑owned independent NJ public adjuster in Vineland.'>
14-
<meta name='twitter:image' content='/assets/og-image.png'>
15-
<link rel='icon' href='/assets/favicon.svg' type='image/svg+xml'>
14+
<meta name='twitter:image' content='assets/og-image.png'>
15+
<link rel='icon' href='assets/favicon.svg' type='image/svg+xml'>
1616
<link rel='preconnect' href='https://fonts.googleapis.com'>
1717
<link rel='preconnect' href='https://fonts.gstatic.com' crossorigin>
1818
<link href='https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Playfair+Display:wght@600;700&display=swap' rel='stylesheet'>
19-
<link rel='stylesheet' href='/assets/styles.css'>
19+
<link rel='stylesheet' href='assets/styles.css'>
2020
</head><body>
2121

2222
<a class='skip' href='#main'>Skip to content</a>
2323
<header class='topbar'>
2424
<div class='container nav'>
25-
<a class='brand' href='/'><img src='/assets/logo.svg' alt='Jersey Girl's Public Adjusting LLC logo'> Jersey Girl's Public Adjusting LLC</a>
25+
<a class='brand' href='index.html'><img src='assets/logo.svg' alt='Jersey Girl's Public Adjusting LLC logo'> Jersey Girl's Public Adjusting LLC</a>
2626
<button class='burger' aria-label='Toggle menu' aria-expanded='false' aria-controls='menu'></button>
2727
<nav id='menu' class='menu'>
28-
<a href='/'>Home</a>
29-
<a href='/services.html'>Services</a>
30-
<a href='/service-areas.html'>Service Areas</a>
31-
<a href='/schedule.html'>Schedule</a>
32-
<a href='/about.html'>About</a>
33-
<a class='cta' href='/contact.html'>Free Claim Review</a>
28+
<a href='index.html'>Home</a>
29+
<a href='services.html'>Services</a>
30+
<a href='service-areas.html'>Service Areas</a>
31+
<a href='schedule.html'>Schedule</a>
32+
<a href='about.html'>About</a>
33+
<a class='cta' href='contact.html'>Free Claim Review</a>
3434
</nav>
3535
</div>
3636
</header>
@@ -51,7 +51,7 @@ <h1>About Jersey Girl's Public Adjusting LLC</h1>
5151
<a class='btn btn--ghost' href='tel:+1 (856) 528-6726'>Call +1 (856) 528-6726</a>
5252
</div>
5353
</div>
54-
<div class='about-photo'><img src='/assets/founder-placeholder.png' alt='Founder headshot placeholder for Heather L. Barile'></div>
54+
<div class='about-photo'><img src='assets/founder-placeholder.png' alt='Founder headshot placeholder for Heather L. Barile'></div>
5555
</div>
5656

5757
<section class='section alt'>
@@ -101,14 +101,14 @@ <h2>Testimonials</h2>
101101
<small>Hours: Open 24 hours daily</small>
102102
</div>
103103
<nav class='footer__nav'>
104-
<a href='/schedule.html'>Schedule</a>
105-
<a href='/contact.html'>Contact</a>
106-
<a href='/privacy.html'>Privacy Policy</a>
107-
<a href='/terms.html'>Terms</a>
104+
<a href='schedule.html'>Schedule</a>
105+
<a href='contact.html'>Contact</a>
106+
<a href='privacy.html'>Privacy Policy</a>
107+
<a href='terms.html'>Terms</a>
108108
</nav>
109109
<div class='fineprint'>© 2026 Jersey Girl's Public Adjusting LLC. Independently created, owned & operated by a New Jersey woman‑owned firm. Not affiliated with any insurance company.</div>
110110
</div>
111-
<script src='/assets/script.js'></script>
111+
<script src='assets/script.js'></script>
112112
</footer>
113113

114114
</body></html>

assets/favicon.svg

Lines changed: 5 additions & 0 deletions
Loading

assets/founder-placeholder.png

3.87 KB
Loading

assets/logo.svg

Lines changed: 13 additions & 0 deletions
Loading

assets/og-image.png

11 KB
Loading

assets/script.js

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
/* Jersey Girl's Public Adjusting LLC — Main Script */
2+
(function () {
3+
'use strict';
4+
5+
/* ── Burger / mobile nav ─────────────────────────────────── */
6+
var burger = document.querySelector('.burger');
7+
var menu = document.querySelector('.menu');
8+
var topbar = document.querySelector('.topbar');
9+
10+
if (burger && menu) {
11+
burger.addEventListener('click', function () {
12+
var isOpen = menu.classList.toggle('is-open');
13+
burger.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
14+
});
15+
16+
// Close on link click (smooth scroll / navigation)
17+
menu.querySelectorAll('a').forEach(function (link) {
18+
link.addEventListener('click', function () {
19+
menu.classList.remove('is-open');
20+
burger.setAttribute('aria-expanded', 'false');
21+
});
22+
});
23+
24+
// Close on outside click
25+
document.addEventListener('click', function (e) {
26+
if (!topbar.contains(e.target)) {
27+
menu.classList.remove('is-open');
28+
burger.setAttribute('aria-expanded', 'false');
29+
}
30+
});
31+
}
32+
33+
/* ── Testimonial slider ──────────────────────────────────── */
34+
var slides = document.querySelectorAll('.testimonial-slider .slide');
35+
var dots = document.querySelectorAll('.testimonial-slider .dot');
36+
var prevBtn = document.querySelector('.testimonial-slider .prev');
37+
var nextBtn = document.querySelector('.testimonial-slider .next');
38+
39+
if (slides.length) {
40+
var current = 0;
41+
42+
function goTo(idx) {
43+
slides[current].classList.remove('is-active');
44+
if (dots[current]) dots[current].classList.remove('is-active');
45+
current = (idx + slides.length) % slides.length;
46+
slides[current].classList.add('is-active');
47+
if (dots[current]) dots[current].classList.add('is-active');
48+
}
49+
50+
if (prevBtn) prevBtn.addEventListener('click', function () { goTo(current - 1); });
51+
if (nextBtn) nextBtn.addEventListener('click', function () { goTo(current + 1); });
52+
53+
dots.forEach(function (dot, i) {
54+
dot.addEventListener('click', function () { goTo(i); });
55+
});
56+
57+
// Auto-advance every 6 s
58+
var autoPlay = setInterval(function () { goTo(current + 1); }, 6000);
59+
60+
// Pause on hover
61+
var sliderEl = document.querySelector('.testimonial-slider');
62+
if (sliderEl) {
63+
sliderEl.addEventListener('mouseenter', function () { clearInterval(autoPlay); });
64+
sliderEl.addEventListener('mouseleave', function () {
65+
autoPlay = setInterval(function () { goTo(current + 1); }, 6000);
66+
});
67+
}
68+
}
69+
70+
/* ── Active nav link ─────────────────────────────────────── */
71+
var navLinks = document.querySelectorAll('.menu a');
72+
var pageHref = window.location.pathname.split('/').pop() || 'index.html';
73+
74+
navLinks.forEach(function (link) {
75+
var href = link.getAttribute('href');
76+
if (href === pageHref || (pageHref === '' && href === 'index.html')) {
77+
link.setAttribute('aria-current', 'page');
78+
link.style.color = 'var(--navy)';
79+
link.style.fontWeight = '700';
80+
}
81+
});
82+
83+
/* ── Smooth anchor scroll ────────────────────────────────── */
84+
document.querySelectorAll('a[href^="#"]').forEach(function (anchor) {
85+
anchor.addEventListener('click', function (e) {
86+
var target = document.querySelector(this.getAttribute('href'));
87+
if (target) {
88+
e.preventDefault();
89+
var offset = 80;
90+
var top = target.getBoundingClientRect().top + window.scrollY - offset;
91+
window.scrollTo({ top: top, behavior: 'smooth' });
92+
}
93+
});
94+
});
95+
96+
/* ── Contact form (index.html inline form) ───────────────── */
97+
var form = document.getElementById('contactForm');
98+
var formSuccess = document.getElementById('formSuccess');
99+
100+
function setFieldError(id, errId, msg) {
101+
var el = document.getElementById(id);
102+
var err = document.getElementById(errId);
103+
if (el) el.classList.toggle('invalid', !!msg);
104+
if (err) err.textContent = msg || '';
105+
}
106+
107+
function validEmail(v) {
108+
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v);
109+
}
110+
111+
if (form) {
112+
form.addEventListener('submit', function (e) {
113+
e.preventDefault();
114+
var name = (document.getElementById('name') || {}).value || '';
115+
var email = (document.getElementById('email') || {}).value || '';
116+
var message = (document.getElementById('message') || {}).value || '';
117+
name = name.trim(); email = email.trim(); message = message.trim();
118+
var ok = true;
119+
120+
if (!name) {
121+
setFieldError('name', 'nameError', 'Please enter your name.');
122+
ok = false;
123+
} else { setFieldError('name', 'nameError', ''); }
124+
125+
if (!email) {
126+
setFieldError('email', 'emailError', 'Please enter your email address.');
127+
ok = false;
128+
} else if (!validEmail(email)) {
129+
setFieldError('email', 'emailError', 'Please enter a valid email address.');
130+
ok = false;
131+
} else { setFieldError('email', 'emailError', ''); }
132+
133+
if (!message) {
134+
setFieldError('message', 'messageError', 'Please enter a message.');
135+
ok = false;
136+
} else { setFieldError('message', 'messageError', ''); }
137+
138+
if (ok && formSuccess) {
139+
formSuccess.hidden = false;
140+
form.reset();
141+
setTimeout(function () { formSuccess.hidden = true; }, 7000);
142+
}
143+
});
144+
}
145+
146+
/* ── Animated stat counters ──────────────────────────────── */
147+
var statNums = document.querySelectorAll('[data-count]');
148+
149+
function animateCount(el) {
150+
var target = parseInt(el.getAttribute('data-count'), 10);
151+
var duration = 1600;
152+
var start = null;
153+
function step(ts) {
154+
if (!start) start = ts;
155+
var p = Math.min((ts - start) / duration, 1);
156+
var eased = 1 - Math.pow(1 - p, 3);
157+
el.textContent = Math.floor(eased * target).toLocaleString();
158+
if (p < 1) requestAnimationFrame(step);
159+
else el.textContent = target.toLocaleString();
160+
}
161+
requestAnimationFrame(step);
162+
}
163+
164+
if ('IntersectionObserver' in window && statNums.length) {
165+
var io = new IntersectionObserver(function (entries) {
166+
entries.forEach(function (en) {
167+
if (en.isIntersecting) { animateCount(en.target); io.unobserve(en.target); }
168+
});
169+
}, { threshold: 0.5 });
170+
statNums.forEach(function (el) { io.observe(el); });
171+
}
172+
173+
/* ── Reveal cards on scroll ──────────────────────────────── */
174+
var revealItems = document.querySelectorAll('[data-reveal]');
175+
176+
if ('IntersectionObserver' in window && revealItems.length) {
177+
var revealIO = new IntersectionObserver(function (entries) {
178+
entries.forEach(function (en) {
179+
if (en.isIntersecting) {
180+
en.target.classList.add('revealed');
181+
revealIO.unobserve(en.target);
182+
}
183+
});
184+
}, { threshold: 0.12 });
185+
revealItems.forEach(function (el) { revealIO.observe(el); });
186+
} else {
187+
revealItems.forEach(function (el) { el.classList.add('revealed'); });
188+
}
189+
190+
})();

0 commit comments

Comments
 (0)