Feat: Refresh Insight trial teaser preview

This commit is contained in:
Herbert Wolverson committed 2026-03-30 16:30:06 -05:00
1 parent 819139f7f9
commit fbbf21f4ad
10 files changed
+32 -31

No files matched your search

@@ -2,55 +2,56 @@
// Used by both the standalone Insight trial page and the
// in-app Insight nag modal so the benefits only need to be
// maintained in one place.
//
// Draft teaser copy and image mapping for in-place review.
export const PLACEHOLDER_TEASERS = [
{
id: "ai",
title: "AI Reports",
id: "executive_summary",
title: "Executive Summary",
description:
"Diagnose problems quickly using AI-powered analyses of aggregated data.",
image: "01_ai_report.png",
"See network health, capacity, and the biggest problem areas at a glance so you know where to look next.",
image: "01_executive_summary.png",
order: 1,
},
{
id: "mapper",
title: "Insight Network Mapper",
id: "site_overview",
title: "Site Overview",
description:
"Configure and manage complex networks and multiple shaper boxes with ease.",
image: "02_mapper.png",
"Open a site and compare performance, utilization, and quality over time without jumping between tools.",
image: "02_site_overview.png",
order: 2,
},
{
id: "long_term",
title: "Long Term Data",
id: "site_rankings",
title: "Site Rankings",
description:
"Flexible time windows ranging from 15 minutes to 28 days, giving you comprehensive network performance insights.",
image: "03_long_term.png",
"Rank sites by quality over the selected period so the worst performers surface immediately.",
image: "03_site_rankings.png",
order: 3,
},
{
id: "heatmap",
title: "Heatmaps",
id: "subscriber_view",
title: "Subscriber View",
description:
"Don’t waste time going through charts – instantly spot performance trends on APs, OLTs, and sites.",
image: "04_heatmap.png",
"Inspect subscriber behavior, usage, and performance from one place when a specific customer needs attention.",
image: "04_subscriber_view.png",
order: 4,
},
{
id: "alerts",
title: "Alerts",
id: "issue_triage",
title: "Issue Triage",
description:
"Get notified before issues impact your customers with intelligent alert monitoring.",
image: "05_alerts.png",
"Turn symptoms into a focused troubleshooting summary with likely causes and recommended next steps.",
image: "05_issue_triage.png",
order: 5,
},
{
id: "endpoints",
title: "Endpoints by Circuit",
id: "api_only",
title: "API-Only Option",
description:
"Observe important endpoint information, even for individual circuits.",
image: "06_endpoints.png",
"Choose the lower-cost API-only option when you only need provisioning and automation integrations. Hosted dashboards and remote Insight history are not included.",
image: "06_api_only.png",
order: 6,
},
];
@@ -325,7 +325,7 @@ async function loadTeasers() {
const response = await $.get(getLtsUrl('teasers'));
if (response.teasers != null) {
response.teasers.forEach(teaser => {
teaser.image = getLtsUrl(teaser.image.replace("signup-api/", ""));
teaser.image = getLtsUrl(teaser.image.replace(/^\/?signup-api\//, ""));
});
}
currentTeasers = response.teasers || PLACEHOLDER_TEASERS;
@@ -701,13 +701,13 @@ function attachEventHandlers() {
showSection('successSection');
$('#successMessage').html(`
<strong>License Key:</strong> ${response.licenseKey}<br>
<small>Your trial is almost active. Watch for an email from Insight to add billing details within 2 days. No charge occurs until the trial ends, and you can cancel any time.</small>
<small>Your trial is almost active. Watch for an email from Insight with your account details. No charge occurs until the trial ends, and you can cancel any time.</small>
`);
$('#configStatus').text('Saving configuration...');
wsClient.send({ LtsSignUp: { license_key: response.licenseKey } });
// Show success message now, then swap spinner to a check and enable dashboard after 5s
$('#configStatus').html(`Your Insight trial has been created. Add billing details from the Insight email within 2 days to keep the trial active.`);
$('#configStatus').html(`Your Insight trial has been created. Check your email for the next steps while configuration is being saved.`);
setTimeout(() => {
$('#configSpinner').hide();
$('#configStatus').html(`<i class="fas fa-check-circle text-success"></i> Configuration saved.`);
@@ -75,7 +75,7 @@ async function loadModalTeasers() {
const copy = { ...teaser };
if (copy.image) {
const img = typeof copy.image === "string" ? copy.image : "";
const cleaned = img.replace(/^signup-api\//, "");
const cleaned = img.replace(/^\/?signup-api\//, "");
copy.image = getModalLtsUrl(cleaned);
}
return copy;
Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

@@ -124,7 +124,7 @@ body.dark-mode .card-header.bg-light {
<h1 class="display-4 fw-bold"><i class="fas fa-chart-line"></i> LibreQoS Insight</h1>
<p class="lead">Unlock the full potential of your network with advanced analytics, reporting, and monitoring.</p>
<div class="alert alert-light text-primary-emphasis border-0 shadow-sm mt-4 mb-0" role="alert">
Free 30-day trial. Billing details are required within 2 days to keep the trial active. You will not be charged until the trial ends. Cancel any time.
Free 30-day trial. You will not be charged until the trial ends. Cancel any time.
</div>
<div id="circuitCount" class="mt-3 mb-4" style="display: none;">
<h3>Your Network: <span id="circuitNumber">0</span> Active Circuits</h3>
@@ -335,7 +335,7 @@ body.dark-mode .card-header.bg-light {
<i class="fas fa-rocket"></i> Start Free Trial
</button>
<p class="small text-body-secondary mb-0 text-center">
Free 30-day trial. Billing details are required within 2 days to keep the trial active. You will not be charged until the trial ends. Cancel any time.
Free 30-day trial. You will not be charged until the trial ends. Cancel any time.
</p>
<button type="button" id="btnBackFromSignup" class="btn btn-secondary">
<i class="fas fa-arrow-left"></i> Back