Feat: Home page content updated with new marketing images. DOG section styles updated for marketing materials.
@@ -61,10 +61,10 @@ class Assessment_Response(SQLAlchemy_ABC, Base):
|
||||
assessment_response.id_response = query_row[0]
|
||||
assessment_response.id_assessment_command_modality_link = query_row[1]
|
||||
assessment_response.id_response_quality_metric = query_row[2]
|
||||
assessment_response.id_obedience_level = query_row[4]
|
||||
assessment_response.value_measured = query_row[6]
|
||||
assessment_response.notes = query_row[7]
|
||||
assessment_response.active = av.input_bool(query_row[8], 'active', _m)
|
||||
assessment_response.id_obedience_level = query_row[5]
|
||||
assessment_response.value_measured = query_row[7]
|
||||
assessment_response.notes = query_row[8]
|
||||
assessment_response.active = av.input_bool(query_row[9], 'active', _m)
|
||||
|
||||
assessment_response.assessment_command_modality_link = Assessment_Command_Modality_Link.from_db_assessment_response(query_row)
|
||||
assessment_response.response_quality_metric = Response_Quality_Metric.from_db_assessment_response(query_row)
|
||||
|
||||
@@ -51,8 +51,8 @@ class Obedience_Level(SQLAlchemy_ABC, Base):
|
||||
def from_db_assessment_response(cls, query_row):
|
||||
_m = f'{cls.__qualname__}.from_db_assessment_response'
|
||||
level = cls()
|
||||
level.id_obedience_level = query_row[4]
|
||||
level.name = query_row[5]
|
||||
level.id_obedience_level = query_row[5]
|
||||
level.name = query_row[6]
|
||||
level.active = True
|
||||
return level
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ class Unit_Measurement(SQLAlchemy_ABC, Base):
|
||||
unit.id_unit_measurement = None
|
||||
unit.name_singular = ''
|
||||
unit.name_plural = ''
|
||||
unit.symbol = ''
|
||||
unit.symbol = '%' if query_row[4] == '/' else query_row[4]
|
||||
return unit
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -14,7 +14,7 @@ Home Page Controller.
|
||||
from business_objects.api import API
|
||||
from models.model_view_home import Model_View_Home
|
||||
# external
|
||||
from flask import render_template, jsonify, Blueprint
|
||||
from flask import render_template, jsonify, Blueprint, send_from_directory
|
||||
|
||||
|
||||
routes_core_home = Blueprint('routes_core_home', __name__)
|
||||
@@ -28,4 +28,4 @@ def home():
|
||||
except Exception as e:
|
||||
return jsonify(error=str(e)), 403
|
||||
return html_body
|
||||
|
||||
|
||||
|
||||
@@ -70,3 +70,9 @@ def privacy_policy():
|
||||
@routes_legal.route('/robots.txt', methods=['GET'])
|
||||
def robots_txt():
|
||||
return send_from_directory('static', 'docs/robots.txt')
|
||||
@routes_legal.route('/favicon.ico', methods=['GET'])
|
||||
def favicon_ico():
|
||||
return send_from_directory('static', 'images/fetch-metrics-logo.ico', mimetype='image/vnd.microsoft.icon') # -and-company-name-curved-0.5
|
||||
@routes_legal.route('/sitemap.xml', methods=['GET'])
|
||||
def sitemap_xml():
|
||||
return send_from_directory('static', 'docs/sitemap.xml')
|
||||
|
||||
@@ -420,6 +420,7 @@ BEGIN
|
||||
LEFT JOIN parts.DOG_User USER ON t_ASSESSMENT.id_user_handler = USER.id_user
|
||||
-- LEFT JOIN tmp_User t_USER_HANDLER ON t_ASSESSMENT.id_user_handler = t_USER_HANDLER.id_user
|
||||
ORDER BY ASSESSMENT.created_on DESC
|
||||
LIMIT 1000
|
||||
;
|
||||
|
||||
-- Errors
|
||||
|
||||
@@ -553,6 +553,7 @@ BEGIN
|
||||
LEFT JOIN parts.DOG_Distraction_Intensity_Level INTENSITY_LEVEL_SOUND ON t_DISTRACTION.id_intensity_level_sound = INTENSITY_LEVEL_SOUND.id_intensity_level
|
||||
LEFT JOIN parts.DOG_Distraction_Intensity_Level INTENSITY_LEVEL_TOUCH ON t_DISTRACTION.id_intensity_level_touch = INTENSITY_LEVEL_TOUCH.id_intensity_level
|
||||
ORDER BY DISTRACTION_TYPE.name
|
||||
LIMIT 1000
|
||||
;
|
||||
|
||||
-- Errors
|
||||
|
||||
@@ -555,6 +555,7 @@ BEGIN
|
||||
LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category
|
||||
LEFT JOIN parts.DOG_Command_Modality COMMAND_MODALITY ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality = COMMAND_MODALITY.id_command_modality
|
||||
LEFT JOIN parts.DOG_Bribe BRIBE ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe = BRIBE.id_bribe
|
||||
LIMIT 1000
|
||||
;
|
||||
|
||||
-- Errors
|
||||
|
||||
@@ -574,6 +574,7 @@ BEGIN
|
||||
, t_ASSESSMENT_RESPONSE.id_assessment_command_modality_link
|
||||
, t_ASSESSMENT_RESPONSE.id_response_quality_metric
|
||||
, RESPONSE_QUALITY_METRIC.name AS name_response_quality_metric
|
||||
, UNIT_MEASUREMENT.symbol AS symbol_unit_measurement_response_quality_metric
|
||||
, t_ASSESSMENT_RESPONSE.id_obedience_level
|
||||
, OBEDIENCE_LEVEL.name AS name_obedience_level
|
||||
, t_ASSESSMENT_RESPONSE.value_measured
|
||||
@@ -586,7 +587,9 @@ BEGIN
|
||||
LEFT JOIN parts.DOG_Assessment_Response ASSESSMENT_RESPONSE ON t_ASSESSMENT_RESPONSE.id_response = ASSESSMENT_RESPONSE.id_response
|
||||
LEFT JOIN parts.DOG_Obedience_Level OBEDIENCE_LEVEL ON t_ASSESSMENT_RESPONSE.id_obedience_level = OBEDIENCE_LEVEL.id_obedience_level
|
||||
LEFT JOIN parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON t_ASSESSMENT_RESPONSE.id_response_quality_metric = RESPONSE_QUALITY_METRIC.id_metric
|
||||
LEFT JOIN parts.DOG_Unit_Measurement UNIT_MEASUREMENT ON RESPONSE_QUALITY_METRIC.id_unit_measurement = UNIT_MEASUREMENT.id_unit_measurement
|
||||
ORDER BY ASSESSMENT_RESPONSE.created_on DESC
|
||||
LIMIT 1000
|
||||
;
|
||||
|
||||
-- Errors
|
||||
|
||||
@@ -88,6 +88,7 @@ script, link {
|
||||
width: 100%;
|
||||
align-self: center;
|
||||
font-size: 1rem;
|
||||
color: var(--colour-text);
|
||||
}
|
||||
#pageBody > * > * {
|
||||
align-self: center;
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
|
||||
h2 {
|
||||
color: var(--colour-primary);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#formFilters {
|
||||
display: none;
|
||||
}
|
||||
.company-name {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.container.save.button-cancel {
|
||||
position: fixed;
|
||||
@@ -10,6 +17,12 @@
|
||||
right: 10vh;
|
||||
}
|
||||
|
||||
table.table-main tbody {
|
||||
max-height: 28vh;
|
||||
}
|
||||
table.table-main tbody tr td {
|
||||
height: 4vh;
|
||||
}
|
||||
|
||||
table.table-main.assessment thead tr th.active,
|
||||
table.table-main.assessment tbody tr td.active,
|
||||
@@ -42,8 +55,12 @@ table.table-main.assessment_command_modality_link tbody tr td {
|
||||
}
|
||||
table.table-main.assessment_command_modality_link tbody tr td.ddl-preview div,
|
||||
table.table-main.assessment_command_modality_link tbody tr td.ddl-preview select {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding: 0.5vh 0.5vw;
|
||||
}
|
||||
table.table-main.assessment_command_modality_link thead tr th.command-category,
|
||||
table.table-main.assessment_command_modality_link tbody tr td.command-category {
|
||||
min-width: 12vh;
|
||||
max-width: 12vh;
|
||||
}
|
||||
table.table-main.assessment_command_modality_link thead tr th.is-in-hearing-range-of-handler,
|
||||
table.table-main.assessment_command_modality_link tbody tr td.is-in-hearing-range-of-handler,
|
||||
@@ -67,8 +84,12 @@ table.table-main.assessment_command_modality_link thead tr th.assessment_respons
|
||||
table.table-main.assessment_command_modality_link tbody tr td.assessment_response {
|
||||
max-width: 60vh;
|
||||
min-width: 60vh;
|
||||
height: fit-content;
|
||||
}
|
||||
|
||||
table.table-main.assessment_command_modality_link tbody tr td.assessment_response div.ddl-preview div.row {
|
||||
border: none;
|
||||
}
|
||||
table.table-main.assessment_command_modality_link tbody tr td.assessment_response thead tr th.response-quality-metric,
|
||||
table.table-main.assessment_command_modality_link tbody tr td.assessment_response tbody tr td.response-quality-metric {
|
||||
max-width: 15vh;
|
||||
|
||||
25
static/dist/css/dog_assessment.bundle.css
vendored
@@ -65,10 +65,17 @@
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: var(--colour-primary);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#formFilters {
|
||||
display: none;
|
||||
}
|
||||
.company-name {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.container.save.button-cancel {
|
||||
position: fixed;
|
||||
@@ -76,6 +83,12 @@
|
||||
right: 10vh;
|
||||
}
|
||||
|
||||
table.table-main tbody {
|
||||
max-height: 28vh;
|
||||
}
|
||||
table.table-main tbody tr td {
|
||||
height: 4vh;
|
||||
}
|
||||
|
||||
table.table-main.assessment thead tr th.active,
|
||||
table.table-main.assessment tbody tr td.active,
|
||||
@@ -108,8 +121,12 @@ table.table-main.assessment_command_modality_link tbody tr td {
|
||||
}
|
||||
table.table-main.assessment_command_modality_link tbody tr td.ddl-preview div,
|
||||
table.table-main.assessment_command_modality_link tbody tr td.ddl-preview select {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding: 0.5vh 0.5vw;
|
||||
}
|
||||
table.table-main.assessment_command_modality_link thead tr th.command-category,
|
||||
table.table-main.assessment_command_modality_link tbody tr td.command-category {
|
||||
min-width: 12vh;
|
||||
max-width: 12vh;
|
||||
}
|
||||
table.table-main.assessment_command_modality_link thead tr th.is-in-hearing-range-of-handler,
|
||||
table.table-main.assessment_command_modality_link tbody tr td.is-in-hearing-range-of-handler,
|
||||
@@ -133,8 +150,12 @@ table.table-main.assessment_command_modality_link thead tr th.assessment_respons
|
||||
table.table-main.assessment_command_modality_link tbody tr td.assessment_response {
|
||||
max-width: 60vh;
|
||||
min-width: 60vh;
|
||||
height: fit-content;
|
||||
}
|
||||
|
||||
table.table-main.assessment_command_modality_link tbody tr td.assessment_response div.ddl-preview div.row {
|
||||
border: none;
|
||||
}
|
||||
table.table-main.assessment_command_modality_link tbody tr td.assessment_response thead tr th.response-quality-metric,
|
||||
table.table-main.assessment_command_modality_link tbody tr td.assessment_response tbody tr td.response-quality-metric {
|
||||
max-width: 15vh;
|
||||
|
||||
1
static/dist/css/main.bundle.css
vendored
@@ -88,6 +88,7 @@ script, link {
|
||||
width: 100%;
|
||||
align-self: center;
|
||||
font-size: 1rem;
|
||||
color: var(--colour-text);
|
||||
}
|
||||
#pageBody > * > * {
|
||||
align-self: center;
|
||||
|
||||
2
static/dist/css/main.bundle.css.map
vendored
3898
static/docs/Demo_Simple_1.osp
Normal file
BIN
static/docs/Demo_Simple_1_assets/thumbnail/39D0KB3R4H.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
static/docs/Demo_Simple_1_assets/thumbnail/48JLIRLY68.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
static/docs/Demo_Simple_1_assets/thumbnail/7U998C191W.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
static/docs/Demo_Simple_1_assets/thumbnail/FYI2MNJHU1.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
static/docs/Demo_Simple_1_assets/thumbnail/UQ6HZFXCWV.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
84
static/docs/Demo_Simple_1_assets/title/TitleFileName-1.svg
Normal file
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" ?><!-- Created with Inkscape (http://www.inkscape.org/) --><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" height="1080" id="svg2383" inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" sodipodi:docname="Camera_Border.svg" sodipodi:version="0.32" version="1.0" width="1920">
|
||||
<defs id="defs2385">
|
||||
<linearGradient id="linearGradient3950" inkscape:collect="always">
|
||||
<stop id="stop3952" offset="0" style="stop-color:#ffffff;stop-opacity:0"/>
|
||||
<stop id="stop3954" offset="1" style="stop-color:#ffffff;stop-opacity:1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3944" inkscape:collect="always">
|
||||
<stop id="stop3946" offset="0" style="stop-color:#ffffff;stop-opacity:0"/>
|
||||
<stop id="stop3948" offset="1" style="stop-color:#ffffff;stop-opacity:1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3932" inkscape:collect="always">
|
||||
<stop id="stop3934" offset="0" style="stop-color:#ffffff;stop-opacity:0"/>
|
||||
<stop id="stop3936" offset="1" style="stop-color:#ffffff;stop-opacity:1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3926" inkscape:collect="always">
|
||||
<stop id="stop3928" offset="0" style="stop-color:#ffffff;stop-opacity:0"/>
|
||||
<stop id="stop3930" offset="1" style="stop-color:#ffffff;stop-opacity:1"/>
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient3787">
|
||||
<stop style="stop-color:#000000;stop-opacity:0" offset="0" id="stop3789"/>
|
||||
<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop3791"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3190" inkscape:collect="always">
|
||||
<stop id="stop3192" offset="0" style="stop-color:#324da7;stop-opacity:1"/>
|
||||
<stop id="stop3194" offset="1" style="stop-color:#324da7;stop-opacity:0;"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient3267" inkscape:collect="always">
|
||||
<stop id="stop3269" offset="0" style="stop-color:#0000ff;stop-opacity:0"/>
|
||||
<stop id="stop3275" offset="0.48768985" style="stop-color:#ffffff;stop-opacity:1"/>
|
||||
<stop id="stop3271" offset="1" style="stop-color:#0000ff;stop-opacity:0;"/>
|
||||
</linearGradient>
|
||||
<inkscape:perspective id="perspective2391" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" sodipodi:type="inkscape:persp3d"/>
|
||||
<linearGradient gradientTransform="matrix(0.4475832,0,0,1.1594093,-317.72844,-354.23847)" gradientUnits="userSpaceOnUse" id="linearGradient3273" inkscape:collect="always" x1="333.26617" x2="1668.8561" xlink:href="#linearGradient3267" y1="671.26709" y2="671.26709"/>
|
||||
<linearGradient gradientTransform="matrix(0.4475832,0,0,1.1594093,-317.72845,-255.93349)" gradientUnits="userSpaceOnUse" id="linearGradient3463" inkscape:collect="always" x1="333.26617" x2="1668.8561" xlink:href="#linearGradient3267" y1="671.26709" y2="671.26709"/>
|
||||
<linearGradient gradientTransform="translate(-480.00173,0)" gradientUnits="userSpaceOnUse" id="linearGradient3196" inkscape:collect="always" x1="1917.6716" x2="1622.8263" xlink:href="#linearGradient3190" y1="542.59882" y2="542.59882"/>
|
||||
<linearGradient gradientTransform="matrix(-1,0,0,1,1920.0025,7.77e-2)" gradientUnits="userSpaceOnUse" id="linearGradient3200" inkscape:collect="always" x1="1917.6716" x2="1622.8263" xlink:href="#linearGradient3190" y1="542.59882" y2="542.59882"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3787" id="linearGradient3795" x1="146.66714" y1="471.47937" x2="93.029869" y2="417.8421" gradientUnits="userSpaceOnUse" gradientTransform="translate(-1.0019302,-25)"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3787-0" id="linearGradient3795-5" x1="146.66714" y1="471.47937" x2="93.029869" y2="417.8421" gradientUnits="userSpaceOnUse"/>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient3787-0">
|
||||
<stop style="stop-color:#000000;stop-opacity:0" offset="0" id="stop3789-9"/>
|
||||
<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop3791-6"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientTransform="translate(-764,-325.00193)" y2="417.8421" x2="93.029869" y1="471.47937" x1="146.66714" gradientUnits="userSpaceOnUse" id="linearGradient3812" xlink:href="#linearGradient3787-0" inkscape:collect="always"/>
|
||||
<linearGradient gradientTransform="translate(-768,-2215.498)" y2="417.8421" x2="93.029869" y1="471.47937" x1="146.66714" gradientUnits="userSpaceOnUse" id="linearGradient3812-5" xlink:href="#linearGradient3787-0-6" inkscape:collect="always"/>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient3787-0-6">
|
||||
<stop style="stop-color:#000000;stop-opacity:0" offset="0" id="stop3789-9-0"/>
|
||||
<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop3791-6-6"/>
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3787-9" id="linearGradient3795-3" x1="146.66714" y1="471.47937" x2="93.029869" y2="417.8421" gradientUnits="userSpaceOnUse"/>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient3787-9">
|
||||
<stop style="stop-color:#000000;stop-opacity:0" offset="0" id="stop3789-5"/>
|
||||
<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop3791-8"/>
|
||||
</linearGradient>
|
||||
<linearGradient gradientTransform="translate(-1891.498,-21)" y2="417.8421" x2="93.029869" y1="471.47937" x1="146.66714" gradientUnits="userSpaceOnUse" id="linearGradient3851" xlink:href="#linearGradient3787-9" inkscape:collect="always"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3932" id="linearGradient3892" gradientUnits="userSpaceOnUse" gradientTransform="translate(-1891.498,-21)" x1="146.66714" y1="471.47937" x2="93.029869" y2="417.8421"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3926" id="linearGradient3894" gradientUnits="userSpaceOnUse" gradientTransform="translate(-768,-2215.498)" x1="146.66714" y1="471.47937" x2="93.029869" y2="417.8421"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3787" id="linearGradient3896" gradientUnits="userSpaceOnUse" gradientTransform="translate(-1.0019302,-25)" x1="146.66714" y1="471.47937" x2="93.029869" y2="417.8421"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3787-0" id="linearGradient3898" gradientUnits="userSpaceOnUse" gradientTransform="translate(-764,-325.00193)" x1="146.66714" y1="471.47937" x2="93.029869" y2="417.8421"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3950" id="linearGradient3939" gradientUnits="userSpaceOnUse" gradientTransform="translate(-786,-325.00193)" x1="146.66714" y1="471.47937" x2="93.029869" y2="417.8421"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient3944" id="linearGradient3942" gradientUnits="userSpaceOnUse" gradientTransform="translate(-1.0019302,-3)" x1="146.66714" y1="471.47937" x2="93.029869" y2="417.8421"/>
|
||||
</defs>
|
||||
<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" id="base" inkscape:current-layer="layer1" inkscape:cx="98.3708" inkscape:cy="764.37791" inkscape:document-units="px" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="1056" inkscape:window-width="1855" inkscape:window-x="65" inkscape:window-y="24" inkscape:zoom="0.25" objecttolerance="10" pagecolor="#ffffff" showgrid="false" inkscape:window-maximized="1"/>
|
||||
<metadata id="metadata2388">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" transform="translate(1.9328e-3,0)">
|
||||
<rect height="1080.0051" id="rect3160" rx="0" ry="0" style="opacity:0;fill:#e0e7ff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" width="1920" x="-0.0019328" y="-0.0051269531"/>
|
||||
<rect style="fill:none;stroke:url(#linearGradient3942);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" id="rect3009" width="304" height="250" x="92.99807" y="415"/>
|
||||
<rect style="fill:none;stroke:url(#linearGradient3939);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" id="rect3009-0" width="304" height="250" x="-692" y="92.99807" transform="matrix(0,-1,1,0,0,0)"/>
|
||||
<g id="g3887" transform="translate(0,18)">
|
||||
<rect transform="scale(-1,1)" y="397" x="-1797.498" height="250" width="304" id="rect3009-5" style="fill:none;stroke:url(#linearGradient3892);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
|
||||
<g id="g3880">
|
||||
<rect style="fill:none;stroke:url(#linearGradient3894);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" id="rect3009-0-0" width="304" height="250" x="-674" y="-1797.498" transform="matrix(0,-1,-1,0,0,0)"/>
|
||||
</g>
|
||||
</g>
|
||||
<text xml:space="preserve" style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none" x="959.99811" y="575.09833" id="text3005"><tspan sodipodi:role="line" id="tspan3007" x="959.99811" y="575.09833" style="font-weight:bold;font-size:96.42027283px;line-height:1.25;font-family:'Bitstream Vera Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1">Tired of lost training notes?</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.9 KiB |
BIN
static/docs/fetch-metrics-demo-video-scenes.xcf
Normal file
47
static/docs/sitemap.xml
Normal file
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<!-- Core-->
|
||||
<url>
|
||||
<loc>https://fetch-metrics.co.uk/</loc>
|
||||
<lastmod>2025-01-01</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://fetch-metrics.co.uk/contact</loc>
|
||||
<lastmod>2025-01-01</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<!-- Legal -->
|
||||
<url>
|
||||
<loc>https://fetch-metrics.co.uk/license</loc>
|
||||
<lastmod>2025-01-01</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://fetch-metrics.co.uk/accessibility-statement</loc>
|
||||
<lastmod>2025-01-01</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://fetch-metrics.co.uk/accessibility-report</loc>
|
||||
<lastmod>2025-01-01</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://fetch-metrics.co.uk/retention-schedule</loc>
|
||||
<lastmod>2025-01-01</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://fetch-metrics.co.uk/privacy-policy</loc>
|
||||
<lastmod>2025-01-01</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
BIN
static/images/fetch-metrics-logo-and-company-name-curved-0.5.ico
Normal file
|
After Width: | Height: | Size: 139 KiB |
BIN
static/images/fetch-metrics-logo.ico
Normal file
|
After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
BIN
static/images/fetch-metrics-page-assessment-v2a-long.png
Normal file
|
After Width: | Height: | Size: 25 MiB |
BIN
static/images/fetch-metrics-page-assessment-v2a.webp
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
static/images/fetch-metrics-page-assessment_v2a.png
Normal file
|
After Width: | Height: | Size: 7.9 MiB |
BIN
static/images/fetch-metrics-page-assessment_v2a.webp
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
static/images/fetch-metrics-page-assessment_v2a.xcf
Normal file
BIN
static/images/fetch-metrics-page-commands-FQ.png
Normal file
|
After Width: | Height: | Size: 8.6 MiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
BIN
static/images/fetch-metrics-page-commands-v2a-long.png
Normal file
|
After Width: | Height: | Size: 25 MiB |
BIN
static/images/fetch-metrics-page-commands_v2a.png
Normal file
|
After Width: | Height: | Size: 7.9 MiB |
BIN
static/images/fetch-metrics-page-commands_v2a.webp
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
static/images/fetch-metrics-page-commands_v2a.xcf
Normal file
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 25 MiB |
BIN
static/images/fetch-metrics-report-line-command-progress-v2a.png
Normal file
|
After Width: | Height: | Size: 7.9 MiB |
|
After Width: | Height: | Size: 47 KiB |
BIN
static/images/fetch-metrics-report-line-command-progress-v2a.xcf
Normal file
|
After Width: | Height: | Size: 25 MiB |
|
After Width: | Height: | Size: 7.9 MiB |
|
After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
@@ -5,7 +5,7 @@
|
||||
Add response
|
||||
{% else %}
|
||||
{% for assessment_response_preview in assessment_response_previews %}
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">{{ assessment_response_preview.response_quality_metric.name }} - {{ assessment_response_preview.obedience_level.name }}</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">{{ assessment_response_preview.response_quality_metric.name }} - {{ assessment_response_preview.obedience_level.name }} - {{ assessment_response_preview.value_measured }} {{ assessment_response_preview.response_quality_metric.unit_measurement.symbol }}</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -4,6 +4,13 @@
|
||||
<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() }}" />
|
||||
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='images/fetch-metrics-logo.ico') }}">
|
||||
<!-- Cross-browser compatibility not yet implemented
|
||||
-and-company-name-curved-0.5
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='favicon-32x32.png') }}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='favicon-16x16.png') }}">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ url_for('static', filename='apple-touch-icon.png') }}">
|
||||
-->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
|
||||
@@ -97,28 +97,28 @@
|
||||
<h3>📝 Command Management</h3>
|
||||
<p>Customise commands, categories, and signals for your training style</p>
|
||||
<div class="project-thumbnail">
|
||||
<img src="{{ url_for('static', filename='images/fetch-metrics-page-commands.webp') }}" alt="Command Management" aria-label="Command Management">
|
||||
<img src="{{ url_for('static', filename='images/fetch-metrics-page-commands_v2a.webp') }}" alt="Command Management" aria-label="Command Management">
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<h3>📊 Assessment Tracking</h3>
|
||||
<p>Record distractions, environments, response times, and success rates</p>
|
||||
<div class="project-thumbnail">
|
||||
<img src="{{ url_for('static', filename='images/fetch-metrics-page-assessment.webp') }}" alt="Assessment Tracking" aria-label="Assessment Tracking">
|
||||
<img src="{{ url_for('static', filename='images/fetch-metrics-page-assessment_v2a.webp') }}" alt="Assessment Tracking" aria-label="Assessment Tracking">
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<h3>🎯 Progress Visualisation</h3>
|
||||
<p>Radar charts showing command mastery and improvement over time</p>
|
||||
<div class="project-thumbnail">
|
||||
<img src="{{ url_for('static', filename='images/fetch-metrics-report-radar-command-mastery.webp') }}" alt="Progress Visualisation" aria-label="Progress Visualisation">
|
||||
<img src="{{ url_for('static', filename='images/fetch-metrics-report-radar-command-category-progress-v2a.webp') }}" alt="Progress Visualisation" aria-label="Progress Visualisation">
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<h3>📈 Performance Analytics</h3>
|
||||
<p>Line charts tracking response latency and compliance duration</p>
|
||||
<div class="project-thumbnail">
|
||||
<img src="{{ url_for('static', filename='images/fetch-metrics-report-line-command-progress.webp') }}" alt="Performance Analytics" aria-label="Performance Analytics">
|
||||
<img src="{{ url_for('static', filename='images/fetch-metrics-report-line-command-progress-v2a.webp') }}" alt="Performance Analytics" aria-label="Performance Analytics">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -150,14 +150,16 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
<section id="{{ model.FLAG_TESTIMONIAL }}" class="{{ model.FLAG_TESTIMONIAL }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<p class="text-center">"I've been tracking commands in spreadsheets for years. This is exactly what I needed - finally, someone who understands what trainers actually do day-to-day."</p>
|
||||
<h2 class="section-subtitle text-center">- Sarah M., Certified Dog Behaviourist, Manchester</h2>
|
||||
<!-- <p class="text-center">"I've been tracking progress with binders of loose paper for years. This is exactly what I needed - simple, intuitive, and really powerful. Works perfectly on your phone in outdoor sessions I can input data while training and the progress reports would be impossible with my previous system."</p> -->
|
||||
<p class="text-center">"I've been tracking progress with binders of loose paper for years. This is exactly what I needed - simple, intuitive, and really powerful. Works perfectly on your phone in outdoor sessions
|
||||
- just capture essential data and the progress reports are immediately available to the client."</p>
|
||||
<h2 class="section-subtitle text-center">- Wendy M., Certified Animal Behaviourist, Rugby</h2>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
<section id="{{ model.FLAG_EARLY_ACCESS }}" class="{{ model.FLAG_EARLY_ACCESS }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<h2 class="section-title text-center">Be Among the First</h2>
|
||||
|
||||
@@ -128,6 +128,7 @@
|
||||
</form>
|
||||
|
||||
<form id="{{ model.ID_FORM_DISTRACTIONS }}" class="{{ model.FLAG_ROW }} {{ model.FLAG_CARD }}">
|
||||
<h2>Distractions</h2>
|
||||
<table id="{{ model.ID_TABLE_DISTRACTIONS}}" class="{{ model.FLAG_TABLE_MAIN }} {{ model.FLAG_ROW }} {{ model.FLAG_CARD }} {{ model.FLAG_DISTRACTION }}">
|
||||
<thead>
|
||||
<tr class="{{ model.FLAG_DISTRACTION }}">
|
||||
@@ -160,6 +161,7 @@
|
||||
</form>
|
||||
|
||||
<form id="{{ model.ID_FORM_ASSESSMENT_COMMAND_MODALITY_LINKS }}" class="{{ model.FLAG_ROW }} {{ model.FLAG_CARD }}">
|
||||
<h2>Commands and Responses</h2>
|
||||
<table id="{{ model.ID_TABLE_ASSESSMENT_COMMAND_MODALITY_LINKS }}" class="{{ model.FLAG_TABLE_MAIN }} {{ model.FLAG_ROW }} {{ model.FLAG_CARD }} {{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}">
|
||||
<thead>
|
||||
<tr class="{{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}">
|
||||
|
||||