Fix: Restore website functionality - all pages and APIs working

This commit is contained in:
Local Server
2026-01-14 07:16:04 -06:00
parent dc58a8ae5f
commit 9f659a2c59
41 changed files with 10890 additions and 3029 deletions

View File

@@ -8,17 +8,20 @@
href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;600;700&display=swap"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"
/>
<link rel="stylesheet" href="/assets/css/theme-colors.css" />
<link rel="stylesheet" href="/assets/css/main.css?v=1735692100" />
<link rel="stylesheet" href="/assets/css/navbar.css?v=1735692200" />
<link rel="stylesheet" href="/assets/css/navbar.css?v=1767233028" />
<link rel="stylesheet" href="/assets/css/page-overrides.css?v=1736790001" />
<link rel="stylesheet" href="/assets/css/cart-wishlist.css" />
<link rel="stylesheet" href="/assets/css/shopping.css" />
<link rel="stylesheet" href="/assets/css/theme-colors.css" />
<link rel="stylesheet" href="/assets/css/responsive.css" />
<link rel="stylesheet" href="/assets/css/navbar-mobile-fix.css?v=1736790000" />
</head>
<body>
<script>window.__bodyReady=true</script>
<div class="sticky-banner-wrapper">
<!-- Modern Navigation -->
<nav class="modern-navbar">
<div class="navbar-wrapper">
@@ -99,17 +102,10 @@
</button>
</div>
<div class="dropdown-body" id="cartContent">
<p class="empty-state">Your cart is empty</p>
<p class="empty-state"><i class="bi bi-cart-x"></i><br>Your cart is empty</p>
</div>
<div class="dropdown-foot">
<div class="cart-summary">
<span class="summary-label">Subtotal:</span>
<span class="summary-value" id="cartSubtotal">$0.00</span>
</div>
<a href="/checkout" class="btn-primary-full"
>Proceed to Checkout</a
>
<a href="/shop" class="btn-text">Continue Shopping</a>
<a href="/shop" class="btn-outline">Continue Shopping</a>
</div>
</div>
</div>
@@ -138,23 +134,44 @@
<li><a href="/contact" class="mobile-link">Contact</a></li>
</ul>
</div>
<div class="mobile-menu-overlay" id="mobileMenuOverlay"></div>
</nav>
<script>
// Mobile Menu Toggle
(function() {
const mobileToggle = document.getElementById('mobileMenuToggle');
const mobileMenu = document.getElementById('mobileMenu');
const mobileClose = document.getElementById('mobileMenuClose');
const overlay = document.getElementById('mobileMenuOverlay');
function openMenu() {
mobileMenu.classList.add('active');
overlay.classList.add('active');
document.body.style.overflow = 'hidden';
}
function closeMenu() {
mobileMenu.classList.remove('active');
overlay.classList.remove('active');
document.body.style.overflow = '';
if (mobileToggle) mobileToggle.addEventListener('click', openMenu);
if (mobileClose) mobileClose.addEventListener('click', closeMenu);
if (overlay) overlay.addEventListener('click', closeMenu);
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape' && mobileMenu.classList.contains('active')) closeMenu();
});
})();
</script>
<section class="about-hero">
<div class="container">
<h1>Blog</h1>
<p class="hero-subtitle">Inspiration, tips, and creative ideas</p>
</div>
</section>
<section class="blog-section" style="padding: 60px 0; background: #ffebeb">
<div class="container">
<div id="loadingMessage" style="text-align: center; padding: 40px">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<p style="margin-top: 15px; color: #666">Loading blog posts...</p>
</div>
<div
id="blogGrid"
style="
@@ -163,7 +180,6 @@
gap: 30px;
"
></div>
<div
id="noPosts"
style="display: none; text-align: center; padding: 40px; color: #666"
>
@@ -172,12 +188,7 @@
style="font-size: 48px; color: #ccc; margin-bottom: 15px"
></i>
<p>No blog posts available at the moment.</p>
</div>
</div>
</section>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div class="footer-col">
<h3 class="footer-title">Sky Art Shop</h3>
@@ -190,12 +201,7 @@
><i class="bi bi-instagram"></i
></a>
<a href="#" class="social-link"><i class="bi bi-twitter"></i></a>
<a href="#" class="social-link"
><i class="bi bi-pinterest"></i
></a>
</div>
</div>
<div class="footer-col">
<h4 class="footer-heading">Shop</h4>
<ul class="footer-links">
<li><a href="/shop">All Products</a></li>
@@ -203,39 +209,25 @@
<li><a href="/shop?category=prints">Prints</a></li>
<li><a href="/shop?category=supplies">Art Supplies</a></li>
</ul>
</div>
<div class="footer-col">
<h4 class="footer-heading">About</h4>
<ul class="footer-links">
<li><a href="/about">Our Story</a></li>
<li><a href="/portfolio">Portfolio</a></li>
<li><a href="/blog">Blog</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
</div>
<div class="footer-col">
<h4 class="footer-heading">Customer Service</h4>
<ul class="footer-links">
<li><a href="/shipping-info">Shipping Info</a></li>
<li><a href="/returns">Returns</a></li>
<li><a href="/faq">FAQ</a></li>
<li><a href="/privacy">Privacy Policy</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p>&copy; 2025 Sky Art Shop. All rights reserved.</p>
</div>
</div>
</footer>
<script src="/assets/js/page-transitions.js?v=1766709739"></script>
<script src="/assets/js/back-button-control.js?v=1766723554"></script>
<script src="/assets/js/main.js"></script>
<script src="/assets/js/navigation.js"></script>
<script src="/assets/js/cart.js"></script>
<script src="/assets/js/shop-system.js"></script>
<script src="/assets/js/shopping.js"></script>
<script>
// Load blog posts from API
async function loadBlog() {
try {
@@ -243,14 +235,11 @@
if (response.ok) {
const data = await response.json();
const posts = data.posts || [];
document.getElementById("loadingMessage").style.display = "none";
if (posts.length === 0) {
document.getElementById("noPosts").style.display = "block";
return;
}
const grid = document.getElementById("blogGrid");
grid.innerHTML = posts
.map(
@@ -275,7 +264,6 @@
<span><i class="bi bi-calendar"></i> ${new Date(
post.createdat
).toLocaleDateString()}</span>
</div>
<h2 style="font-size: 22px; font-weight: 600; margin-bottom: 12px; color: #333; line-height: 1.3;">${
post.title
}</h2>
@@ -289,24 +277,19 @@
}" style="display: inline-flex; align-items: center; color: #667eea; font-weight: 500; text-decoration: none; transition: gap 0.3s;" onclick="event.stopPropagation()">
Read More <i class="bi bi-arrow-right" style="margin-left: 8px;"></i>
</a>
</div>
</article>
`
)
.join("");
} else {
document.getElementById("loadingMessage").style.display = "none";
document.getElementById("noPosts").style.display = "block";
}
} catch (error) {
console.error("Error loading blog:", error);
document.getElementById("loadingMessage").innerHTML =
'<p style="color: #dc3545;">Error loading blog posts. Please try again later.</p>';
}
}
// Initialize
loadBlog();
</script>
</body>
</html>