Fix: Merged layouts for core and dog sections as much as possible.

This commit is contained in:
2025-07-31 16:37:11 +01:00
parent 2d1f7269e0
commit 4b1fac2dcb
53 changed files with 697 additions and 920 deletions

View File

@@ -0,0 +1,39 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8"/>
<title>{{ model.title }} - DOG</title>
<meta name="description" content="Professional dog training management software for UK trainers. Manage clients, track training sessions, monitor progress, and engage dog owners with our comprehensive SaaS platform. Starting from £15/month." />
<meta name="keywords" content="fetch metrics, fetchmetrics, dog training software, dog trainer management, pet training app, canine training system, dog training business software, professional dog training, UK dog trainers, training session management, dog training records, client management for dog trainers, dog training progress tracking, pet training business tools, dog training scheduling, canine behavior tracking, dog trainer CRM, training appointment booking, dog training client portal, canine training documentation, dog obedience training, puppy training programs, behavioral modification, training milestones, dog training certificates, trainer scheduling, client communication, training homework assignments, progress reports, dog training analytics, British dog training, dog training software UK, professional dog training tools" />
<link rel="canonical" href="{{ model.get_url_host() }}" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Dog Training",
"url": "{{ model.get_url_host() }}",
"logo": "{{ model.get_url_host() }}{{ url_for('static', filename='images/fetch-metrics-logo-LQ.webp') }}",
"description": "Fetch Metrics - Professional dog training management software for UK trainers. Manage clients, track training sessions, monitor progress, and engage dog owners with our comprehensive SaaS platform. Starting from £15/month.",
"address": {
"@type": "PostalAddress",
"streetAddress": "53 Alfred Green Close",
"addressLocality": "Rugby",
"addressRegion": "Warwickshire",
"postalCode": "CV22 6DN",
"addressCountry": "United Kingdom"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "52.22",
"longitude": "1.16"
},
"openingHours": "Mo,Tu,We,Th,Fr 09:00-17:00",
"priceRange": "$",
}
</script>
<meta name="yandex-verification" content="e8c84f13a578a656" /> <!-- fetch-metrics.co.uk -->
<meta name="yandex-verification" content="054b13bc60fb1625" /> <!-- fetch-metrics.com -->
<meta name="yandex-verification" content="f3c1a9bc28976419" /> <!-- fetchmetrics.co.uk -->
<meta id="{{ model.ID_CSRF_TOKEN }}" name="{{ model.FLAG_CSRF_TOKEN }}" content="{{ csrf_token() }}" />
<link rel="preload" as="style" href="{{ url_for('static', filename='dist/css/main.bundle.css') }}" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="{{ url_for('static', filename='dist/css/main.bundle.css') }}"></noscript>

View File

@@ -0,0 +1,45 @@
{#
<!-- Header -- >
<header>
<div class="container">
<nav class="navbar">
<div class="{{ model.FLAG_LOGO }}" href="{{ model.HASH_PAGE_HOME }}">{{ model.NAME_COMPANY }}</div>
<div class="nav-links">
{% block page_nav_links %}{% endblock %}
</div>
</nav>
</div>
</header>
-->
#}
<!-- Hamburger navigation menu -->
{% include 'components/common/buttons/_icon_hamburger.html' %}
<div id="{{ model.ID_OVERLAY_HAMBURGER }}" class="{{ model.FLAG_OVERLAY}} {{ model.FLAG_HAMBURGER }} {{ model.FLAG_IS_COLLAPSED }}">
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_HOME }}">Home</a>
</div>
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_CONTACT }}">Contact</a>
</div>
{% if True or model.user.can_admin_dog %}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_DOG_HOME }}">Dog Home</a>
</div>
{% endif %}
{% if model.user.get_is_logged_in() %}
{#
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_USER_ACCOUNT }}">Account</a>
</div>
#}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_USER_LOGOUT }}">Logout</a>
</div>
{% else %}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_USER_LOGIN }}">Login</a>
</div>
{% endif %}
</div>

View File

@@ -162,3 +162,5 @@
var titlePageCurrent = "{{ model.title }}";
var _verbose = ("{{ model.app.app_config.DEBUG }}" == "True");
</script>
{% include 'layouts/_shared_dog_scripts.html' %}

View File

@@ -1,58 +1,20 @@
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8"/>
<title>{{ model.title }} - DOG</title>
<meta name="description" content="Explore our wide range of software engineering services. We specialize in various tech stacks including MySQL, Python, Microsoft SQL Server, C#, Firebase, Node.js, Java, HTML5, React, CSS3, Flask, JavaScript, MVC, and REST." />
<meta name="keywords" content="software engineering, software development, software design, software testing, software maintenance, software support, software consultancy, software training, software documentation, software project management, software quality assurance, software process improvement, software configuration management, software requirements engineering, software architecture, software design patterns, software design principles, software testing principles, software testing techniques, software testing tools, software testing automation, software testing manual, software testing exploratory, software testing regression, software testing performance, software testing security, software testing usability, software testing accessibility, software testing compatibility, software testing reliability, software testing maintainability, software testing portability, software testing scalability, software testing test-driven development, software testing behaviour-driven development, software testing acceptance test-driven development, software testing continuous integration, software testing continuous deployment, software testing continuous delivery, software testing continuous monitoring, software testing continuous feedback, software testing continuous improvement, software testing agile, software testing scrum, software testing kanban, software testing lean, software testing waterfall, software testing v-model, software testing spiral, software testing incremental, software testing iterative, software testing adaptive, software testing predictive, software testing hybrid, software testing manual, software testing automated, software testing exploratory, software testing regression, software testing performance, software testing security, software testing usability, software testing accessibility, software testing compatibility, software testing reliability, software testing maintainability, software testing portability, software testing scalability, software testing test-driven development, software testing behaviour-driven development, software testing acceptance test-driven development, software testing continuous integration, software testing continuous deployment, software testing continuous delivery, software testing continuous monitoring, software testing continuous feedback, software testing continuous improvement, software testing agile, software testing scrum, software testing kanban, software testing lean, software testing waterfall, software testing v-model, software testing spiral, software testing incremental, software testing iterative, software testing adaptive, software testing predictive, software testing hybrid, software testing manual, software testing automated, software testing exploratory, software testing regression, software testing performance, software testing security, software testing usability, software testing accessibility, software testing compatibility, software testing reliability, software testing maintainability, software testing portability, software testing scalability, software testing test-driven development, software testing behaviour-driven development, software testing acceptance test-driven development, software testing continuous integration, software testing continuous deployment, software testing continuous delivery, software testing continuous monitoring, software testing continuous feedback, software testing continuous improvement, software testing agile, software testing, MySQL, Python, Microsoft SQL Server, MS SQL Server, C#, Firebase, Node.js, Java, HTML5, React, CSS3, Flask, JavaScript, MVC, REST" />
<link rel="canonical" href="{{ model.get_url_host() }}" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "{{ model.NAME_COMPANY_SHORT }}",
"url": "{{ model.get_url_host() }}",
"logo": "{{ model.get_url_host() }}{{ url_for('static', filename='images/fetch-metrics-logo-LQ.webp') }}",
"description": "Explore our wide range of software engineering services. We specialize in various tech stacks including MySQL, Python, Microsoft SQL Server, C#, Firebase, Node.js, Java, HTML5, React, CSS3, Flask, JavaScript, MVC, and REST.",
"address": {
"@type": "PostalAddress",
"streetAddress": "53 Alfred Green Close",
"addressLocality": "Rugby",
"addressRegion": "Warwickshire",
"postalCode": "CV22 6DN",
"addressCountry": "United Kingdom"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "52.22",
"longitude": "1.16"
},
"openingHours": "Mo,Tu,We,Th,Fr 09:00-17:00",
"priceRange": "$$",
}
</script>
<meta name="yandex-verification" content="4693a824cfda082a" />
<meta id="{{ model.ID_CSRF_TOKEN }}" name="{{ model.FLAG_CSRF_TOKEN }}" content="{{ csrf_token() }}" />
<link rel="preload" as="style" href="{{ url_for('static', filename='dist/css/main.bundle.css') }}" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="{{ url_for('static', filename='dist/css/main.bundle.css') }}"></noscript>
{% include 'layouts/_shared_head.html' %}
{% block page_head %}{% endblock %}
</head>
<body data-page="{{ model.hash_page_current }}">
<!-- Header -->
<header>
<div class="container">
<nav class="navbar">
<div class="{{ model.FLAG_LOGO }}" href="{{ model.HASH_PAGE_HOME }}">{{ model.NAME_COMPANY_SHORT }}</div>
<div class="nav-links">
{% block page_nav_links %}{% endblock %}
</div>
</nav>
<div class="topnav">
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_LOGO }}">
<img class="{{ model.FLAG_LOGO }}" src="{{ url_for('static', filename='images/fetch-metrics-logo-and-company-name-horizontal-1-link-visited-LQ.webp') }}" alt="Fetch Metrics logo" aria-label="Fetch Metrics logo" tabindex="0"> {# filename='images/fetch-metrics-logo-and-company-name-radial-0.5-link-visited-LQ.webp', 'images/Wisp_LQ.webp' #}
</div>
</header>
<div class="nav-links">
{% block page_nav_links %}{% endblock %}
</div>
</div>
{% include 'layouts/_shared_header.html' %}
<!-- Body -->
<div id="{{ model.ID_PAGE_BODY }}">
@@ -123,8 +85,8 @@
</div>
</footer>
{% include 'layouts/_shared.html' %}
{% include 'layouts/_shared_dog.html' %}
{% include 'layouts/_shared_scripts.html' %}
{% include 'layouts/_shared_dog_scripts.html' %}
<script src="{{ url_for('static', filename='dist/js/main.bundle.js') }}"></script>
</body>
</html>

View File

@@ -1,104 +1,20 @@
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8"/>
<title>{{ model.title }} - DOG</title>
<meta name="description" content="Professional dog training management software for UK trainers. Manage clients, track training sessions, monitor progress, and engage dog owners with our comprehensive SaaS platform. Starting from £15/month." />
<meta name="keywords" content="fetch metrics, fetchmetrics, dog training software, dog trainer management, pet training app, canine training system, dog training business software, professional dog training, UK dog trainers, training session management, dog training records, client management for dog trainers, dog training progress tracking, pet training business tools, dog training scheduling, canine behavior tracking, dog trainer CRM, training appointment booking, dog training client portal, canine training documentation, dog obedience training, puppy training programs, behavioral modification, training milestones, dog training certificates, trainer scheduling, client communication, training homework assignments, progress reports, dog training analytics, British dog training, dog training software UK, professional dog training tools" />
<link rel="canonical" href="{{ model.get_url_host() }}" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Dog Training",
"url": "{{ model.get_url_host() }}",
"logo": "{{ model.get_url_host() }}{{ url_for('static', filename='images/fetch-metrics-logo-LQ.webp') }}",
"description": "Fetch Metrics - Professional dog training management software for UK trainers. Manage clients, track training sessions, monitor progress, and engage dog owners with our comprehensive SaaS platform. Starting from £15/month.",
"address": {
"@type": "PostalAddress",
"streetAddress": "53 Alfred Green Close",
"addressLocality": "Rugby",
"addressRegion": "Warwickshire",
"postalCode": "CV22 6DN",
"addressCountry": "United Kingdom"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "52.22",
"longitude": "1.16"
},
"openingHours": "Mo,Tu,We,Th,Fr 09:00-17:00",
"priceRange": "$",
}
</script>
<meta name="yandex-verification" content="e8c84f13a578a656" /> <!-- fetch-metrics.co.uk -->
<meta name="yandex-verification" content="054b13bc60fb1625" /> <!-- fetch-metrics.com -->
<meta name="yandex-verification" content="f3c1a9bc28976419" /> <!-- fetchmetrics.co.uk -->
<meta id="{{ model.ID_CSRF_TOKEN }}" name="{{ model.FLAG_CSRF_TOKEN }}" content="{{ csrf_token() }}" />
<link rel="preload" as="style" href="{{ url_for('static', filename='dist/css/main.bundle.css') }}" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="{{ url_for('static', filename='dist/css/main.bundle.css') }}"></noscript>
{% include 'layouts/_shared_head.html' %}
{% block page_head %}{% endblock %}
</head>
<body data-page="{{ model.hash_page_current }}">
<!-- Header -- >
<header>
<div class="container">
<nav class="navbar">
<div class="{{ model.FLAG_LOGO }}" href="{{ model.HASH_PAGE_HOME }}">{{ model.NAME_COMPANY }}</div>
<div class="nav-links">
{% block page_nav_links %}{% endblock %}
</div>
</nav>
</div>
</header>
-->
<div class="topnav">
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_LOGO }}"> <!-- style="width: 18vw; min-width: 18vw; max-width: 20vw;" -->
<img class="{{ model.FLAG_LOGO }}" src="{{ url_for('static', filename='images/fetch-metrics-logo-and-company-name-radial-0.5-link-visited-LQ.webp') }}" alt="Fetch Metrics logo" aria-label="Fetch Metrics logo" tabindex="0"> <!-- 'images/Wisp_LQ.webp' -->
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_LOGO }}">
<img class="{{ model.FLAG_LOGO }}" src="{{ url_for('static', filename='images/fetch-metrics-logo-and-company-name-horizontal-1-link-visited-LQ.webp') }}" alt="Fetch Metrics logo" aria-label="Fetch Metrics logo" tabindex="0"> {# 'images/fetch-metrics-logo-and-company-name-radial-0.5-link-visited-LQ.webp', 'images/Wisp_LQ.webp' #}
</div>
<div class="{{ model.FLAG_CONTAINER }} company-name"> <!-- style="width: 75vw; min-width: 65vw; max-width: 80vw;" -->
<div class="{{ model.FLAG_CONTAINER }} company-name">
<h1 class="company-name">{{ model.title }}</h1> {# {{ model.NAME_COMPANY_SHORT }} - #}
</div>
{#
<div class="{{ model.FLAG_CONTAINER }}"> <!-- style="width: 7vw; min-width: 7vw; max-width: 15vw; justify-content: flex-end; " padding-left: 25%; -->
<button id="{{ model.ID_BUTTON_HAMBURGER }}" class="{{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}" tabindex="1" alt="Hamburger menu button" aria-label="Hamburger menu button"></button>
</div>
#}
</div>
<!-- Hamburger navigation menu -->
{% include 'components/common/buttons/_icon_hamburger.html' %}
<div id="{{ model.ID_OVERLAY_HAMBURGER }}" class="{{ model.FLAG_OVERLAY}} {{ model.FLAG_HAMBURGER }} {{ model.FLAG_IS_COLLAPSED }}">
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_HOME }}">Home</a>
</div>
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_CONTACT }}">Contact</a>
</div>
{% if True or model.user.can_admin_dog %}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_DOG_HOME }}">Dog Home</a>
</div>
{% endif %}
{% if model.user.get_is_logged_in() %}
{#
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_USER_ACCOUNT }}">Account</a>
</div>
#}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_USER_LOGOUT }}">Logout</a>
</div>
{% else %}
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
<a class="{{ model.FLAG_NAV_USER_LOGIN }}">Login</a>
</div>
{% endif %}
</div>
{% include 'layouts/_shared_header.html' %}
<!-- Body -->
<div id="{{ model.ID_PAGE_BODY }}">
@@ -115,8 +31,8 @@
</div>
</div>
{% include 'layouts/_shared.html' %}
{% include 'layouts/_shared_dog.html' %}
{% include 'layouts/_shared_scripts.html' %}
{% include 'layouts/_shared_dog_scripts.html' %}
<script src="{{ url_for('static', filename='dist/js/main.bundle.js') }}"></script>
</body>
</html>

View File

@@ -2,7 +2,7 @@
{% block page_head %}
<link rel="stylesheet" href="{{ url_for('static', filename='dist/css/core_contact.bundle.css') }}">
{% include 'layouts/_shared_project_hub.html' %}
{% include 'layouts/_shared_project_hub_scripts.html' %}
{% endblock %}
{% block page_nav_links %}

View File

@@ -2,7 +2,7 @@
{% block page_head %}
<link rel="stylesheet" href="{{ url_for('static', filename='dist/css/core_contact.bundle.css') }}">
{% include 'layouts/_shared_project_hub.html' %}
{% include 'layouts/_shared_project_hub_scripts.html' %}
{% endblock %}
{% block page_nav_links %}

View File

@@ -14,8 +14,6 @@
<a href="#{{ model.FLAG_SOCIAL_PROOF }}">Social Proof</a>
<a href="#{{ model.FLAG_TESTIMONIAL }}">Testimonial</a>
<a href="#{{ model.FLAG_EARLY_ACCESS }}">Early Access</a>
<!-- <a href="#{{ model.FLAG_FEATURES }}">Features</a>
<a href="#{{ model.FLAG_FAQ }}">FAQs</a> -->
<a href="{{ model.HASH_PAGE_CONTACT }}" class="{{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Contact Us</a>
{% endblock %}
@@ -23,7 +21,7 @@
<section class="hero">
<div class="{{ model.FLAG_CONTAINER }}">
<div class="hero-content" data-aos="fade-up">
<a href="{{ model.HASH_PAGE_CONTACT }}" class="{{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">NOW AVAILABLE</a>
<a href="{{ model.HASH_PAGE_CONTACT }}" class="{{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_SUCCESS }}">NOW AVAILABLE</a>
<h1>Finally, Professional Software Built for Dog Trainers</h1>
<p>Stop losing track of client progress and spending hours on admin. Fetch Metrics helps you track every command, demonstrate real results, and keep clients engaged.</p>
<!-- <a href="{{ model.HASH_PAGE_CONTACT }}" class="{{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Get Early Access</a>
@@ -93,7 +91,7 @@
<section id="{{ model.FLAG_SOLUTION }}" class="{{ model.FLAG_SOLUTION }}">
<div class="{{ model.FLAG_CONTAINER }}">
<h2 class="section-title text-center">See It In Action</h2>
<p class="section-subtitle text-center">This isn't vaporware - we've built a working system that professional trainers are already using:</p>
<p class="section-subtitle text-center">This isn't just concept software - we've built a working system that professional trainers are already using:</p>
<div class="{{ model.FLAG_CARD }} {{ model.FLAG_SOLUTION }}">
<div class="{{ model.FLAG_CONTAINER }}">
<h3>📝 Command Management</h3>