File: D:/web/hyperflight/apps/index.asp
<%
Response.Buffer = True
Response.Expires = -1
Response.ExpiresAbsolute = #1/1/1980#
Response.AddHeader "Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"
Response.AddHeader "Pragma", "no-cache"
%>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>HyperFlight Apps</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css"
rel="stylesheet"
>
<style>
:root {
--app-page-bg: #f5f7f9;
--app-card-border: #dee2e6;
--app-card-border-hover: #b9c2ca;
--app-icon-bg: #e9f2ff;
--app-icon-colour: #0d6efd;
}
body {
background: var(--app-page-bg);
color: #212529;
}
.apps-navbar {
background: rgba(255, 255, 255, .96);
}
.apps-main {
max-width: 1320px;
}
.page-intro {
max-width: 720px;
}
.app-card {
display: block;
height: 100%;
color: inherit;
text-decoration: none;
background: #fff;
border: 1px solid var(--app-card-border);
border-radius: .85rem;
box-shadow: 0 .125rem .35rem rgba(33, 37, 41, .04);
transition:
transform .14s ease,
box-shadow .14s ease,
border-color .14s ease;
}
.app-card:hover {
color: inherit;
border-color: var(--app-card-border-hover);
box-shadow: 0 .55rem 1.25rem rgba(33, 37, 41, .09);
transform: translateY(-3px);
}
.app-card:focus-visible {
color: inherit;
outline: 3px solid rgba(13, 110, 253, .3);
outline-offset: 3px;
}
.app-card-body {
padding: 1.25rem;
}
.app-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2.75rem;
height: 2.75rem;
flex: 0 0 2.75rem;
color: var(--app-icon-colour);
background: var(--app-icon-bg);
border-radius: .75rem;
}
.app-icon svg {
width: 1.35rem;
height: 1.35rem;
}
.app-title {
margin-bottom: .3rem;
font-size: 1.1rem;
font-weight: 650;
}
.app-description {
margin-bottom: 1.25rem;
color: #5c636a;
line-height: 1.45;
}
.app-badge {
font-weight: 500;
color: #495057 !important;
background: #f1f3f5 !important;
border: 1px solid #e2e6ea;
}
@media (prefers-reduced-motion: reduce) {
.app-card {
transition: none;
}
.app-card:hover {
transform: none;
}
}
</style>
</head>
<body>
<nav class="navbar apps-navbar border-bottom">
<div class="container-fluid px-3 px-lg-4">
<span class="navbar-brand mb-0 fw-semibold">HyperFlight Apps</span>
</div>
</nav>
<main class="container apps-main py-4 py-lg-5">
<header class="page-intro mb-4">
<h1 class="h3 mb-2">Apps</h1>
<p class="text-secondary mb-0">
Internal tools for managing operations, monitoring orders and deliveries, and analysing performance.
</p>
</header>
<div class="row g-3 g-lg-4">
<!-- Live Orders -->
<div class="col-12 col-md-6">
<a class="app-card" href="/apps/~tab/" aria-label="Open Live Orders">
<div class="app-card-body">
<div class="d-flex align-items-start gap-3">
<span class="app-icon" aria-hidden="true">
<svg viewBox="0 0 16 16" fill="currentColor">
<path d="M5.5 5.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1H6a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1H6a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1H6a.5.5 0 0 1-.5-.5Z"/>
<path d="M4 1.5A1.5 1.5 0 0 0 2.5 3v10A1.5 1.5 0 0 0 4 14.5h8a1.5 1.5 0 0 0 1.5-1.5V3A1.5 1.5 0 0 0 12 1.5h-1.5a.5.5 0 0 0-.5-.5H6a.5.5 0 0 0-.5.5H4Zm2.5.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1ZM4 2.5h1.5A1.5 1.5 0 0 0 7 4h2a1.5 1.5 0 0 0 1.5-1.5H12a.5.5 0 0 1 .5.5v10a.5.5 0 0 1-.5.5H4a.5.5 0 0 1-.5-.5V3a.5.5 0 0 1 .5-.5Z"/>
</svg>
</span>
<div class="flex-grow-1">
<div class="d-flex flex-wrap align-items-center gap-2">
<h2 class="app-title mb-0">Live Orders</h2>
<span class="badge rounded-pill app-badge">~tab</span>
</div>
<p class="app-description mt-2">
Monitor live orders and their current processing status.
</p>
</div>
</div>
</div>
</a>
</div>
<!-- InXpress Invoices -->
<div class="col-12 col-md-6">
<a class="app-card" href="/apps/inxpress/invoices" aria-label="Open InXpress Invoices">
<div class="app-card-body">
<div class="d-flex align-items-start gap-3">
<span class="app-icon" aria-hidden="true">
<svg viewBox="0 0 16 16" fill="currentColor">
<path d="M4 0h5.5L14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2Zm5 1.5V5h3.5L9 1.5ZM4 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V6h-4a1 1 0 0 1-1-1V1H4Z"/>
<path d="M5 8.5A.5.5 0 0 1 5.5 8h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm0 2A.5.5 0 0 1 5.5 10h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm0 2a.5.5 0 0 1 .5-.5H8a.5.5 0 0 1 0 1H5.5a.5.5 0 0 1-.5-.5Z"/>
</svg>
</span>
<div class="flex-grow-1">
<h2 class="app-title">InXpress Invoices</h2>
<p class="app-description">
Browse courier invoice PDFs and inspect related shipments.
</p>
</div>
</div>
</div>
</a>
</div>
<!-- Order & Delivery Status -->
<div class="col-12 col-md-6">
<a class="app-card" href="/apps/status/" aria-label="Open Order and Delivery Status">
<div class="app-card-body">
<div class="d-flex align-items-start gap-3">
<span class="app-icon" aria-hidden="true">
<svg viewBox="0 0 16 16" fill="currentColor">
<path d="M0 3.5A1.5 1.5 0 0 1 1.5 2h7A1.5 1.5 0 0 1 10 3.5V5h2.5c.4 0 .78.16 1.06.44l1 1c.28.28.44.66.44 1.06V11a1 1 0 0 1-1 1h-.17a2 2 0 1 1-3.66 0H5.83a2 2 0 1 1-3.66 0H1a1 1 0 0 1-1-1V3.5ZM1.5 3a.5.5 0 0 0-.5.5V11h1.17a2 2 0 0 1 3.66 0H9V3.5a.5.5 0 0 0-.5-.5h-7ZM10 6v5h.17a2 2 0 0 1 3.66 0H14V7.5a.5.5 0 0 0-.15-.35l-1-1A.5.5 0 0 0 12.5 6H10ZM4 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm8 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"/>
<path d="M6.85 4.15a.5.5 0 0 1 0 .7l-2 2a.5.5 0 0 1-.7 0l-1-1a.5.5 0 1 1 .7-.7l.65.64 1.65-1.64a.5.5 0 0 1 .7 0Z"/>
</svg>
</span>
<div class="flex-grow-1">
<h2 class="app-title">Order & Delivery Status</h2>
<p class="app-description">
View current order status and delivery totals by carrier.
</p>
</div>
</div>
</div>
</a>
</div>
<!-- Stock Ledger & Audit -->
<div class="col-12 col-md-6">
<a class="app-card" href="/apps/stockflow/" aria-label="Open Stock Ledger and Audit">
<div class="app-card-body">
<div class="d-flex align-items-start gap-3">
<span class="app-icon" aria-hidden="true">
<svg viewBox="0 0 16 16" fill="currentColor">
<path d="M8.21.21a.75.75 0 0 0-.42 0l-6.5 2.25A.75.75 0 0 0 .75 3.17v9.66c0 .32.2.6.5.71l6.5 2.25c.16.06.34.06.5 0l6.5-2.25a.75.75 0 0 0 .5-.71V3.17a.75.75 0 0 0-.5-.71L8.21.21ZM8 1.22l5.48 1.9L8 5.02l-5.48-1.9L8 1.22ZM1.75 4.22l5.75 1.99v8.4l-5.75-1.99v-8.4Zm6.75 10.4v-8.4l5.75-1.99v8.4L8.5 14.62Z"/>
</svg>
</span>
<div class="flex-grow-1">
<h2 class="app-title">Stock Ledger & Audit</h2>
<p class="app-description">
Trace stock movements and investigate discrepancies.
</p>
</div>
</div>
</div>
</a>
</div>
<!-- Royal Mail Delivery -->
<div class="col-12 col-md-6">
<a class="app-card" href="/apps/royalmaildelivery/" aria-label="Open Royal Mail Delivery">
<div class="app-card-body">
<div class="d-flex align-items-start gap-3">
<span class="app-icon" aria-hidden="true">
<svg viewBox="0 0 16 16" fill="currentColor">
<path d="M0 3.5A1.5 1.5 0 0 1 1.5 2h8A1.5 1.5 0 0 1 11 3.5V5h1.5c.4 0 .78.16 1.06.44l1 1c.28.28.44.66.44 1.06V11a1 1 0 0 1-1 1h-.17a2 2 0 1 1-3.66 0H5.83a2 2 0 1 1-3.66 0H1a1 1 0 0 1-1-1V3.5ZM1.5 3a.5.5 0 0 0-.5.5V11h1.17a2 2 0 0 1 3.66 0H10V3.5a.5.5 0 0 0-.5-.5h-8Zm9.5 3v5h.17a2 2 0 0 1 3.66 0H14V7.5a.5.5 0 0 0-.15-.35l-1-1A.5.5 0 0 0 12.5 6H11ZM4 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm8 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"/>
</svg>
</span>
<div class="flex-grow-1">
<h2 class="app-title">Royal Mail Delivery</h2>
<p class="app-description">
Review changes to Royal Mail delivery services.
</p>
</div>
</div>
</div>
</a>
</div>
<!-- Search Log Analysis -->
<div class="col-12 col-md-6">
<a class="app-card" href="/apps/search-log-analysis/" aria-label="Open Search Log Analysis">
<div class="app-card-body">
<div class="d-flex align-items-start gap-3">
<span class="app-icon" aria-hidden="true">
<svg viewBox="0 0 16 16" fill="currentColor">
<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85-.017.016ZM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0Z"/>
</svg>
</span>
<div class="flex-grow-1">
<h2 class="app-title">Search Log Analysis</h2>
<p class="app-description">
Analyse customer searches, results and zero-result terms.
</p>
</div>
</div>
</div>
</a>
</div>
<!-- Sales Analytics -->
<div class="col-12 col-md-6">
<a class="app-card" href="/apps/sales-analytics/" aria-label="Open Sales Analytics">
<div class="app-card-body">
<div class="d-flex align-items-start gap-3">
<span class="app-icon" aria-hidden="true">
<svg viewBox="0 0 16 16" fill="currentColor">
<path d="M0 0h1v15h15v1H0V0Z"/>
<path d="M3 12.5a.5.5 0 0 1-.5-.5V9a.5.5 0 0 1 1 0v3a.5.5 0 0 1-.5.5Zm3 0a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 1 0v6a.5.5 0 0 1-.5.5Zm3 0a.5.5 0 0 1-.5-.5V7.5a.5.5 0 0 1 1 0V12a.5.5 0 0 1-.5.5Zm3 0a.5.5 0 0 1-.5-.5V3a.5.5 0 0 1 1 0v9a.5.5 0 0 1-.5.5Z"/>
</svg>
</span>
<div class="flex-grow-1">
<h2 class="app-title">Sales Analytics</h2>
<p class="app-description">
Explore sales and orders by product, category and country.
</p>
</div>
</div>
</div>
</a>
</div>
</div>
</main>
</body>
</html>