feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
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:
2026-08-21 19:29:00 -06:00
commit 1f72193a64
3266 changed files with 531480 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
title = "Blog — VivesPOS"
meta_title = "Blog — VivesPOS"
meta_description = "Consejos, guias y noticias sobre puntos de venta, retail en Mexico y VivesPOS."
url = "/blog"
layout = "default"
[blogPosts]
postsPerPage = 9
postPage = "blog/post"
sortOrder = "published_at desc"
noPostsMessage = "Pronto publicaremos articulos. Vuelve pronto!"
==
<section class="py-5 py-md-6">
<div class="container">
<div class="text-center mb-5">
<p class="eyebrow eyebrow-blue mb-2">Blog VivesPOS</p>
<h1 class="display-5 fw-bold mb-2">Consejos para tu negocio</h1>
<p class="lead text-muted">Guias sobre retail, puntos de venta y tecnologia para Mexico.</p>
</div>
<div class="row g-4">
{% for post in posts %}
<div class="col-md-6 col-lg-4">
<div class="card border-0 shadow-sm h-100 rounded-4 overflow-hidden">
<div class="card-body p-4">
<p class="text-muted small mb-2">{{ post.published_at|date('d M Y') }}</p>
<h3 class="h5 fw-bold mb-2">{{ post.title }}</h3>
<p class="text-muted small mb-3">{{ post.summary|default(post.content|striptags|slice(0, 120)) }}...</p>
<a href="{{ '/blog/post'|page({ slug: post.slug }) }}" class="text-brand text-decoration-none fw-semibold small">Leer mas &rarr;</a>
</div>
</div>
</div>
{% else %}
<div class="col-12 text-center py-5">
<p class="text-muted">{{ noPostsMessage }}</p>
</div>
{% endfor %}
</div>
</div>
</section>

View File

@@ -0,0 +1,25 @@
title = "Articulo — Blog VivesPOS"
meta_title = "{{ post.title }} — VivesPOS Blog"
meta_description = "{{ post.summary|default('') }}"
url = "/blog/post/:slug"
layout = "default"
[blogPost]
slug = "{{ :slug }}"
==
{% set post = blogPost.post %}
<section class="py-5 py-md-6">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<p class="text-muted small mb-2">{{ post.published_at|date('d M Y') }}</p>
<h1 class="display-6 fw-bold mb-4">{{ post.title }}</h1>
<div class="post-content">
{{ post.content|raw }}
</div>
<hr class="my-4">
<a href="{{ '/blog'|page }}" class="text-brand text-decoration-none fw-semibold">&larr; Volver al blog</a>
</div>
</div>
</div>
</section>

View File

@@ -0,0 +1,39 @@
title = "Contacto — VivesPOS"
meta_title = "Contacto — VivesPOS"
meta_description = "Contactanos por WhatsApp o formulario. Respuesta en menos de 2 horas habiles."
url = "/contacto"
layout = "default"
==
<section class="py-5 py-md-6">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="text-center mb-5">
<p class="eyebrow eyebrow-blue mb-2">Contacto</p>
<h1 class="display-5 fw-bold mb-2">Habla con nosotros</h1>
<p class="lead text-muted">Estamos aqui para ayudarte. Sin compromiso, sin spam.</p>
</div>
<div class="card border-0 shadow-sm rounded-4 p-4">
<div class="row g-4">
<div class="col-md-6">
<h3 class="h5 fw-bold mb-3">WhatsApp directo</h3>
<p class="text-muted small mb-3">La forma mas rapida de contactarnos. Te respondemos en minutos durante horario habil.</p>
<a href="https://wa.me/523317025248?text=Hola%2C%20quiero%20mas%20info%20de%20VivesPOS" class="btn btn-brand-cta w-100 mb-3" target="_blank" rel="noopener">
<i class="bi-whatsapp me-2"></i>+52 33 1702 5248
</a>
<p class="text-muted small mb-0">Horario: L-V 9:00-18:00 CST</p>
</div>
<div class="col-md-6">
<h3 class="h5 fw-bold mb-3">Soporte para clientes</h3>
<p class="text-muted small mb-3">Ya eres cliente de VivesPOS? Abre un ticket y te ayudamos.</p>
<a href="https://wa.me/523317025248?text=Soy%20cliente%20de%20VivesPOS%20y%20necesito%20soporte" class="btn btn-outline-secondary w-100 mb-3" target="_blank" rel="noopener">
<i class="bi-life-preserver me-2"></i>Abrir ticket de soporte
</a>
<p class="text-muted small mb-0">Respuesta max 6h habiles (Premium)</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>

View File

@@ -0,0 +1,20 @@
title = "VivesPOS — Punto de Venta Offline-First para Mexico"
meta_title = "VivesPOS — Punto de Venta Offline-First para Mexico"
meta_description = "Punto de venta offline-first. Vende sin internet, tus datos siempre tuyos. Keyboard-first, scanner de codigo de barras, corte X/Z, impresion ESC/POS. Windows y Linux."
url = "/"
layout = "default"
[blogPosts]
postsPerPage = 3
postPage = "blog/post"
sortOrder = "published_at desc"
noPostsMessage = "Pronto publicaremos articulos. Vuelve pronto!"
==
{% partial 'home/hero' %}
{% partial 'home/features' %}
{% partial 'home/modes' %}
{% partial 'home/screenshots' %}
{% partial 'home/pricing' %}
{% partial 'home/comparison' %}
{% partial 'home/faq' %}
{% partial 'home/cta' %}