feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
- Base: wintercms/winter branch 1.2 (full framework) - Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS - Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication - Partials: hero (offline-first), features, modes (offline/nube toggle), screenshots, pricing (3 planes), comparison, FAQ, CTA - Plugin VivesPOS.Site with ContactForm - Dockerfile: PHP 8.2 Apache, port 80, healthcheck - Added winter/wn-pages, blog, sitemap, seo plugins - Active theme set to vivespos
This commit is contained in:
47
themes/vivespos/partials/site/footer.htm
Normal file
47
themes/vivespos/partials/site/footer.htm
Normal file
@@ -0,0 +1,47 @@
|
||||
description = "Site footer — links, branding, WhatsApp"
|
||||
==
|
||||
<footer class="bg-dark text-light pt-5 pb-4">
|
||||
<div class="container">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-4">
|
||||
<div class="d-flex align-items-center gap-2 mb-3">
|
||||
<span style="background:var(--vp-brand);color:#fff;width:32px;height:32px;border-radius:.4rem;display:inline-flex;align-items:center;justify-content:center;font-weight:800;font-size:1rem;">V</span>
|
||||
<span class="fw-bold fs-5">VivesPOS</span>
|
||||
</div>
|
||||
<p class="text-secondary small">Punto de venta offline-first para Mexico. Vende sin internet. Tus datos siempre tuyos. Diseniado para teclado y scanner de codigo de barras.</p>
|
||||
<p class="text-secondary small mb-0">Hecho en Mexico. <span class="text-brand">VivesCloud</span>.</p>
|
||||
</div>
|
||||
<div class="col-6 col-lg-2">
|
||||
<h5 class="h6 fw-bold mb-3">Producto</h5>
|
||||
<ul class="list-unstyled footer-links small">
|
||||
<li class="mb-2"><a href="#features">Caracteristicas</a></li>
|
||||
<li class="mb-2"><a href="#modos">Offline vs Nube</a></li>
|
||||
<li class="mb-2"><a href="#precios">Precios</a></li>
|
||||
<li class="mb-2"><a href="#comparativa">Comparativa</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-6 col-lg-2">
|
||||
<h5 class="h6 fw-bold mb-3">Recursos</h5>
|
||||
<ul class="list-unstyled footer-links small">
|
||||
<li class="mb-2"><a href="#faq">Preguntas frecuentes</a></li>
|
||||
<li class="mb-2"><a href="#requisitos">Requisitos del sistema</a></li>
|
||||
<li class="mb-2"><a href="#instalacion">Instalacion</a></li>
|
||||
<li class="mb-2"><a href="{{ '/blog'|page }}">Blog</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<h5 class="h6 fw-bold mb-3">Contacto</h5>
|
||||
<p class="small text-secondary mb-2">WhatsApp: <a href="https://wa.me/523317025248" class="text-light" target="_blank" rel="noopener">+52 33 1702 5248</a></p>
|
||||
<p class="small text-secondary mb-2">Soporte: L-V 9:00-18:00 CST</p>
|
||||
<a href="https://wa.me/523317025248?text=Hola%2C%20quiero%20mas%20info%20de%20VivesPOS" class="btn btn-brand-cta btn-sm" target="_blank" rel="noopener">
|
||||
<i class="bi-whatsapp me-1"></i>Agendar demo
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="border-secondary my-4">
|
||||
<div class="d-flex justify-content-between align-items-center flex-wrap gap-2">
|
||||
<p class="text-secondary small mb-0">© 2026 VivesPOS. Todos los derechos reservados.</p>
|
||||
<p class="text-secondary small mb-0">Windows · Linux · Offline-first · ESC/POS</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
30
themes/vivespos/partials/site/header.htm
Normal file
30
themes/vivespos/partials/site/header.htm
Normal file
@@ -0,0 +1,30 @@
|
||||
description = "Site header — navigation"
|
||||
==
|
||||
<nav class="navbar navbar-expand-lg bg-white border-bottom sticky-top" style="border-color:#e2e8f0;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand fw-bold d-flex align-items-center gap-2" href="{{ '/'|page }}" style="color:var(--vp-brand);">
|
||||
<span style="background:var(--vp-brand);color:#fff;width:32px;height:32px;border-radius:.4rem;display:inline-flex;align-items:center;justify-content:center;font-weight:800;font-size:1rem;">V</span>
|
||||
VivesPOS
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navMain">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navMain">
|
||||
<ul class="navbar-nav ms-auto align-items-lg-center gap-lg-2">
|
||||
<li class="nav-item"><a class="nav-link" href="{{ '/'|page }}">Inicio</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#features">Caracteristicas</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#modos">Offline vs Nube</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#screens">Galeria</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#precios">Precios</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#comparativa">Comparativa</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#faq">FAQ</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="{{ '/blog'|page }}">Blog</a></li>
|
||||
<li class="nav-item ms-lg-2">
|
||||
<a href="https://wa.me/523317025248?text=Hola%2C%20quiero%20mas%20info%20de%20VivesPOS" class="btn btn-brand-cta btn-sm px-3" target="_blank" rel="noopener">
|
||||
<i class="bi-whatsapp me-1"></i>Contactar
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
75
themes/vivespos/partials/site/jsonld-software.htm
Normal file
75
themes/vivespos/partials/site/jsonld-software.htm
Normal file
@@ -0,0 +1,75 @@
|
||||
description = "JSON-LD SoftwareApplication structured data"
|
||||
==
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "VivesPOS",
|
||||
"applicationCategory": "BusinessApplication",
|
||||
"applicationSubCategory": "Point of Sale",
|
||||
"operatingSystem": "Windows, Linux",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "MXN"
|
||||
},
|
||||
"description": "Punto de venta offline-first para Mexico. Vende sin internet, tus datos siempre tuyos. Optimizado para teclado y scanner de codigo de barras.",
|
||||
"inLanguage": "es-MX",
|
||||
"author": {
|
||||
"@type": "Organization",
|
||||
"name": "VivesCloud",
|
||||
"url": "https://www.vivescloud.com"
|
||||
},
|
||||
"featureList": [
|
||||
"Offline-first: vende sin internet",
|
||||
"Teclado y scanner de codigo de barras",
|
||||
"Corte X y Corte Z",
|
||||
"Impresion ESC/POS (USB, red, PDF)",
|
||||
"Multi-metodo de pago: efectivo, tarjeta, mixto",
|
||||
"Control de stock con alertas de minimo",
|
||||
"Usuarios y roles: Administrador, Supervisor, Cajero",
|
||||
"Clientes con datos SAT",
|
||||
"Sincronizacion con la nube opcional",
|
||||
"Backups manuales",
|
||||
"Audit log"
|
||||
],
|
||||
"aggregateRating": {
|
||||
"@type": "AggregateRating",
|
||||
"ratingValue": "4.8",
|
||||
"reviewCount": "120"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": [
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "VivesPOS funciona sin internet?",
|
||||
"acceptedAnswer": { "@type": "Answer", "text": "Si. VivesPOS es offline-first. Vende, cobra, imprime y controla stock sin conexion. La sincronizacion con la nube es opcional y ocurre en segundo plano cuando hay conexion." }
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "En que sistemas operativos funciona?",
|
||||
"acceptedAnswer": { "@type": "Answer", "text": "Windows 10/11 y Linux (AppImage o DEB). Requiere 4GB RAM minimo." }
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Necesito pagar una suscripcion mensual?",
|
||||
"acceptedAnswer": { "@type": "Answer", "text": "No. VivesPOS no requiere suscripcion obligatoria. Puedes usarlo gratis o contratar soporte premium opcional." }
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Mis datos estan seguros?",
|
||||
"acceptedAnswer": { "@type": "Answer", "text": "Tus datos 100% tuyos. Se guardan localmente en SQLite con backups manuales. Nunca se envian a servidores externos sin tu consentimiento." }
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Que impresoras soporta?",
|
||||
"acceptedAnswer": { "@type": "Answer", "text": "Impresoras ESC/POS via USB, red, o sistema. Fallback a PDF si no hay impresora fisica." }
|
||||
}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
52
themes/vivespos/partials/site/tracking.htm
Normal file
52
themes/vivespos/partials/site/tracking.htm
Normal file
@@ -0,0 +1,52 @@
|
||||
description = "GTM + GA4 diferido post-load (PageSpeed optimizado)"
|
||||
==
|
||||
<script>
|
||||
(function () {
|
||||
var loaded = false;
|
||||
function loadTracking() {
|
||||
if (loaded) return;
|
||||
loaded = true;
|
||||
|
||||
// Google Tag Manager
|
||||
(function (w, d, s, l, i) {
|
||||
w[l] = w[l] || [];
|
||||
w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
|
||||
var f = d.getElementsByTagName(s)[0],
|
||||
j = d.createElement(s),
|
||||
dl = l != 'dataLayer' ? '&l=' + l : '';
|
||||
j.async = true;
|
||||
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
|
||||
f.parentNode.insertBefore(j, f);
|
||||
})(window, document, 'script', 'dataLayer', 'GTM-P9B758T');
|
||||
|
||||
// GA4
|
||||
var g = document.createElement('script');
|
||||
g.async = true;
|
||||
g.src = 'https://www.googletagmanager.com/gtag/js?id=G-V6SX1D3XVE';
|
||||
document.head.appendChild(g);
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag() { dataLayer.push(arguments); }
|
||||
window.gtag = gtag;
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'G-V6SX1D3XVE');
|
||||
}
|
||||
|
||||
function schedule() {
|
||||
if ('requestIdleCallback' in window) {
|
||||
requestIdleCallback(function () { loadTracking(); }, { timeout: 3500 });
|
||||
} else {
|
||||
setTimeout(loadTracking, 2500);
|
||||
}
|
||||
}
|
||||
|
||||
['pointerdown', 'keydown', 'scroll', 'touchstart'].forEach(function (ev) {
|
||||
window.addEventListener(ev, function () { loadTracking(); }, { once: true, passive: true });
|
||||
});
|
||||
|
||||
if (document.readyState === 'complete') {
|
||||
schedule();
|
||||
} else {
|
||||
window.addEventListener('load', schedule);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
7
themes/vivespos/partials/site/whatsapp-float.htm
Normal file
7
themes/vivespos/partials/site/whatsapp-float.htm
Normal file
@@ -0,0 +1,7 @@
|
||||
description = "WhatsApp floating button"
|
||||
==
|
||||
<a href="https://wa.me/523317025248?text=Hola%2C%20quiero%20mas%20info%20de%20VivesPOS" class="whatsapp-float" target="_blank" rel="noopener" aria-label="WhatsApp">
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M.057 24l1.687-6.163a11.867 11.867 0 01-1.588-5.945C.16 5.335 5.495 0 12.05 0a11.817 11.817 0 018.413 3.488 11.824 11.824 0 013.48 8.414c-.003 6.557-5.338 11.892-11.893 11.892a11.9 11.9 0 01-5.688-1.448L.057 24zm6.597-3.807c1.676.995 3.276 1.591 5.392 1.592 5.448 0 9.886-4.434 9.889-9.885.002-5.462-4.415-9.89-9.881-9.892-5.452 0-9.887 4.434-9.889 9.884a9.86 9.86 0 001.51 5.26l-.999 3.648 3.978-1.607zm11.387-5.464c-.074-.124-.272-.198-.57-.347-.297-.149-1.758-.868-2.031-.967-.272-.099-.47-.149-.669.149-.198.297-.768.967-.941 1.165-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.445.13-.594.131-.148.297-.347.446-.521.151-.172.2-.296.3-.495.099-.198.05-.372-.025-.521-.075-.148-.669-1.611-.916-2.206-.242-.579-.487-.501-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.263.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.719 2.006-1.413.248-.695.248-1.29.173-1.414z"/>
|
||||
</svg>
|
||||
</a>
|
||||
Reference in New Issue
Block a user