bold-brew/site/templates/layout.ejs
Vito Castellano ed036296a0
Some checks failed
Quality / golangci-lint (push) Has been cancelled
Quality / Build (push) Has been cancelled
Security / Go Vulnerability Check (push) Has been cancelled
Security / Security Scanner (push) Has been cancelled
docs: update website with v2.0 features and cross-platform support
Comprehensive website update to reflect Bold Brew 2.0 capabilities and official Project Bluefin partnership.
2025-10-13 23:14:42 +02:00

169 lines
No EOL
6.9 KiB
Text

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= title %></title>
<meta name="description" content="<%= description %>">
<meta name="keywords" content="<%= keywords %>">
<meta name="author" content="Valkyrie00">
<meta name="robots" content="index, follow, max-image-preview:large">
<meta name="theme-color" content="#1a1a1a">
<!-- DNS Prefetch & Preconnect for Performance -->
<link rel="dns-prefetch" href="https://cdn.jsdelivr.net">
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin>
<link rel="dns-prefetch" href="https://www.googletagmanager.com">
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin>
<!-- OpenGraph Tags -->
<meta property="og:title" content="<%= title %>">
<meta property="og:description" content="<%= description %>">
<meta property="og:image" content="https://bold-brew.com/assets/logo/bbrew-logo-rounded.png">
<meta property="og:image:width" content="200">
<meta property="og:image:height" content="200">
<meta property="og:image:alt" content="Bold Brew Logo">
<meta property="og:url" content="<%= canonicalUrl %>">
<meta property="og:type" content="<%= ogType || 'website' %>">
<meta property="og:site_name" content="Bold Brew">
<!-- Twitter Card Tags -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="<%= title %>">
<meta name="twitter:description" content="<%= description %>">
<meta name="twitter:image" content="https://bold-brew.com/assets/logo/bbrew-logo-rounded.png">
<meta name="twitter:image:alt" content="Bold Brew Logo">
<meta name="twitter:creator" content="@Valkyrie00">
<meta name="twitter:site" content="@Valkyrie00">
<!-- Additional SEO Meta Tags -->
<meta name="application-name" content="Bold Brew">
<meta name="apple-mobile-web-app-title" content="Bold Brew">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<meta name="mobile-web-app-capable" content="yes">
<meta name="msapplication-TileColor" content="#1a1a1a">
<meta name="msapplication-config" content="none">
<link rel="canonical" href="<%= canonicalUrl %>">
<link rel="alternate" hreflang="en" href="<%= canonicalUrl %>">
<link rel="alternate" hreflang="x-default" href="<%= canonicalUrl %>">
<!-- Stylesheets -->
<link rel="preload" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" as="stylesheet">
<link rel="preload" href="/assets/css/styles.css" as="stylesheet">
<link rel="preload" href="/assets/bbrew-logo-nobg.png" as="image">
<!-- Stylesheets -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="/assets/css/styles.css" rel="stylesheet">
<!-- Favicons -->
<link rel="icon" href="/assets/ico/bbrew-16.ico" sizes="16x16" type="image/x-icon">
<link rel="icon" href="/assets/ico/bbrew-24.ico" sizes="24x24" type="image/x-icon">
<link rel="icon" href="/assets/ico/bbrew-32.ico" sizes="32x32" type="image/x-icon">
<link rel="icon" href="/assets/ico/bbrew-48.ico" sizes="48x48" type="image/x-icon">
<link rel="manifest" href="/manifest.json">
<!-- Scripts -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" defer></script>
<!-- Schema.org Markup -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Bold Brew (bbrew)",
"operatingSystem": ["macOS", "Linux"],
"applicationCategory": "DeveloperApplication",
"description": "Bold Brew: A modern TUI interface for managing Homebrew packages and casks on macOS and Linux. Effortlessly install, search, update, and remove packages with an elegant and intuitive interface.",
"url": "https://bold-brew.com",
"author": {
"@type": "Person",
"name": "Valkyrie00"
},
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
}
</script>
<!-- Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MM4FCW9XZM"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-MM4FCW9XZM');
</script>
</head>
<body>
<%- include('partials/header') %>
<%- content %>
<%- include('partials/footer') %>
<!-- Back to top button -->
<button class="back-to-top" aria-label="Torna in alto">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 10l7-7m0 0l7 7m-7-7v18" />
</svg>
</button>
<!-- Scripts -->
<script>
function copyToClipboard(button) {
const preEl = button.parentElement.querySelector('pre');
const codeText = preEl.textContent;
const cleanText = codeText.replace(/^>\s/, '');
navigator.clipboard.writeText(cleanText).then(() => {
const copyText = button.querySelector('.copy-text');
copyText.textContent = 'Copied!';
setTimeout(() => {
copyText.textContent = 'Copy';
}, 2000);
});
}
// Chiudi il menu mobile quando si clicca su un link
document.addEventListener('DOMContentLoaded', function() {
const navLinks = document.querySelectorAll('.navbar-nav .nav-link');
const menuToggle = document.getElementById('navbarNav');
const bsCollapse = new bootstrap.Collapse(menuToggle, {toggle: false});
navLinks.forEach(link => {
link.addEventListener('click', () => {
if (window.innerWidth < 992) { // Solo su mobile
bsCollapse.hide();
}
});
});
// Gestione del pulsante back-to-top
const backToTop = document.querySelector('.back-to-top');
window.addEventListener('scroll', () => {
if (window.scrollY > 300) {
backToTop.classList.add('visible');
} else {
backToTop.classList.remove('visible');
}
});
backToTop.addEventListener('click', () => {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
});
});
</script>
</body>
</html>