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,14 @@
<!DOCTYPE html>
<html lang="<?= App::getLocale() ?>">
<head>
<meta charset="utf-8">
<title><?= Lang::get('system::lang.page.custom_error.label') ?></title>
<link href="<?= Url::asset('/modules/system/assets/css/styles.css') ?>" rel="stylesheet">
</head>
<body>
<div class="container">
<h1><i class="icon-power-off warning"></i> <?= Lang::get('system::lang.page.custom_error.label') ?></h1>
<p class="lead"><?= Lang::get('system::lang.page.custom_error.help') ?></p>
</div>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Exception</title>
<link href="<?= Url::asset('/modules/system/assets/css/styles.css') ?>" rel="stylesheet">
<script src="<?= Url::asset('/modules/system/assets/vendor/syntaxhighlighter/scripts/shCore.js') ?>"></script>
<script src="<?= Url::asset('/modules/system/assets/vendor/syntaxhighlighter/scripts/shBrushPhp.js') ?>"></script>
<script src="<?= Url::asset('/modules/system/assets/vendor/syntaxhighlighter/scripts/shBrushXml.js') ?>"></script>
<link href="<?= Url::asset('/modules/system/assets/vendor/syntaxhighlighter/styles/shCore.css') ?>">
</head>
<body>
<div class="container">
<h1><i class="icon-power-off warning"></i> Error</h1>
<p class="lead">We're sorry, but an unhandled error occurred. Please see the details below.</p>
<div class="exception-name-block">
<div><?= e($exception->getMessage()) ?></div>
<p><?= $exception->getFile() ?> <span>line</span> <?= $exception->getLine() ?></p>
</div>
<ul class="indicators">
<li>
<h3>Type</h3>
<p><?= e($exception->getErrorType()) ?></p>
</li>
<li>
<h3>Exception</h3>
<p><?= e($exception->getClassName()) ?></p>
</li>
</ul>
<pre class="brush: php"><?php foreach ($exception->getHighlightLines() as $line): ?><?= $line ?><?php endforeach ?></pre>
<h3><i class="icon-code-fork warning"></i> Stack trace</h3>
<table class="data-table">
<thead>
<tr>
<th class="right">#</th>
<th>Called Code</th>
<th>Document</th>
<th class="right">Line</th>
</tr>
</thead>
<tbody>
<?php foreach ($exception->getCallStack() as $stackItem): ?>
<tr>
<td class="right"><?= $stackItem->id ?></td>
<td>
<?= $stackItem->code ?>(<?php if ($stackItem->args): ?><abbr title="<?= $stackItem->args ?>">&hellip;</abbr><?php endif ?>)
</td>
<td><?= $stackItem->file ?></td>
<td class="right"><?= $stackItem->line ?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.defaults['quick-code'] = false;
SyntaxHighlighter.defaults['html-script'] = true;
SyntaxHighlighter.defaults['first-line'] = <?= $exception->getHighlight()->startLine+1 ?>;
SyntaxHighlighter.defaults['highlight'] = <?= $exception->getLine() ?>;
SyntaxHighlighter.all()
</script>
</body>
</html>

View File

@@ -0,0 +1,51 @@
name = "Default layout"
==
{{ content|raw }}
==
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css" media="screen">
{{ brandCss|raw }}
{{ css|raw }}
</style>
</head>
<body>
<table class="wrapper layout-default" width="100%" cellpadding="0" cellspacing="0">
<!-- Header -->
{% partial 'header' body %}
{{ subject|raw }}
{% endpartial %}
<tr>
<td align="center">
<table class="content" width="100%" cellpadding="0" cellspacing="0">
<!-- Email Body -->
<tr>
<td class="body" width="100%" cellpadding="0" cellspacing="0">
<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0">
<!-- Body content -->
<tr>
<td class="content-cell">
{{ content|raw }}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
{% partial 'footer' body %}
&copy; {{ "now"|date("Y") }} {{ appName }}. All rights reserved.
{% endpartial %}
</table>
</body>
</html>

View File

@@ -0,0 +1,48 @@
name = "System layout"
==
{{ content|raw }}
---
This is an automatic message. Please do not reply to it.
==
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css" media="screen">
{{ brandCss|raw }}
{{ css|raw }}
</style>
</head>
<body>
<table class="wrapper layout-system" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<table class="content" width="100%" cellpadding="0" cellspacing="0">
<!-- Email Body -->
<tr>
<td class="body" width="100%" cellpadding="0" cellspacing="0">
<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0">
<!-- Body content -->
<tr>
<td class="content-cell">
{{ content|raw }}
<!-- Subcopy -->
{% partial 'subcopy' body %}
**This is an automatic message. Please do not reply to it.**
{% endpartial %}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@@ -0,0 +1,23 @@
name = "Button"
==
{{ body|trim }} <{{ url }}>
==
<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<a href="{{ url }}" class="button button-{{ type ?: 'primary' }}" target="_blank">{{ body }}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>

View File

@@ -0,0 +1,16 @@
name = "Footer"
==
-------------------
{{ body|trim }}
==
<tr>
<td>
<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0">
<tr>
<td class="content-cell" align="center">
{{ body|md_safe }}
</td>
</tr>
</table>
</td>
</tr>

View File

@@ -0,0 +1,17 @@
name = "Header"
==
*** {{ body|trim }} <{{ url }}>
==
<tr>
<td class="header">
{% if url %}
<a href="{{ url }}">
{{ body }}
</a>
{% else %}
<span>
{{ body }}
</span>
{% endif %}
</td>
</tr>

View File

@@ -0,0 +1,17 @@
name = "Panel"
==
{{ body|trim }}
==
<table class="panel break-all" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="panel-content">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="panel-item">
{{ body|md_safe }}
</td>
</tr>
</table>
</td>
</tr>
</table>

View File

@@ -0,0 +1,11 @@
name = "Promotion"
==
{{ body|trim }}
==
<table class="promotion break-all" align="center" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
{{ body|md_safe }}
</td>
</tr>
</table>

View File

@@ -0,0 +1,12 @@
name = "Subcopy"
==
-----
{{ body|trim }}
==
<table class="subcopy" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td>
{{ body|md_safe }}
</td>
</tr>
</table>

View File

@@ -0,0 +1,7 @@
name = "Table"
==
{{ body|trim }}
==
<div class="table">
{{ body|md_safe }}
</div>

View File

@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="<?= App::getLocale() ?>">
<head>
<meta charset="utf-8">
<title><?= Lang::get('system::lang.page.maintenance.label') ?></title>
<link href="<?= Url::asset('/modules/system/assets/css/styles.css') ?>" rel="stylesheet">
</head>
<body>
<div class="container">
<h1><i class="icon-wrench warning"></i> <?= Lang::get('system::lang.page.maintenance.label') ?></h1>
<p class="lead"><?= Lang::get('system::lang.page.maintenance.help') ?></p>
<p class="lead">
<?php if ($message): ?>
<strong><?= Lang::get('system::lang.page.maintenance.message') ?></strong> <?= $message; ?><br />
<?php endif; ?>
<?php if ($willBeAvailableAt): ?>
<strong><?= Lang::get('system::lang.page.maintenance.available_at') ?></strong> <?= $willBeAvailableAt; ?><br />
<?php endif; ?>
</div>
</body>
</html>

View File

@@ -0,0 +1,20 @@
@if ($paginator->hasPages())
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled"><span>{!! Lang::get('system::lang.pagination.previous') !!}</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}"
rel="prev">{!! Lang::get('system::lang.pagination.previous') !!}</a></li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">{!! Lang::get('system::lang.pagination.next') !!}</a>
</li>
@else
<li class="disabled"><span>{!! Lang::get('system::lang.pagination.next') !!}</span></li>
@endif
</ul>
@endif