Skip to content

Commit aa755aa

Browse files
author
PrintableTools Lab Bot
committed
Inline service lead capture after downloads
1 parent 5104056 commit aa755aa

45 files changed

Lines changed: 285 additions & 220 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

VALIDATION.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Validation Gates
22

3-
Last generated: 2026-06-08T03:33:35.189Z
3+
Last generated: 2026-06-08T03:43:25.748Z
44

55
## Current Automated Status
66

app.js

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7882,6 +7882,7 @@ ${paragraphs.join("\n")}
78827882
<strong>Want this turned into a local print pack?</strong>
78837883
<p class="help">Request the $29 Custom Local Print Pack Setup, or start with a free Market Table Print Audit. Payment starts only after fit is confirmed and a real external checkout or invoice is paid.</p>
78847884
</div>
7885+
${renderDownloadServiceLeadForm(tool)}
78857886
<div class="download-after-actions">
78867887
<a class="button" data-track-event="service_request_intent" data-track-tool="custom-local-print-pack" href="${escapeHtml(serviceHref)}">Request $29 setup</a>
78877888
<a class="button secondary" data-track-event="audit_request_intent" data-track-tool="market-table-print-audit" href="${escapeHtml(auditHref)}">Free print audit first</a>
@@ -7894,6 +7895,49 @@ ${paragraphs.join("\n")}
78947895
`;
78957896
}
78967897

7898+
function renderDownloadServiceLeadForm(tool) {
7899+
if (!tool || !LOCAL_SELLER_FUNNEL_TOOL_IDS.has(tool.id)) return "";
7900+
const toolId = tool.id || "download";
7901+
const sourcePath = `/tools/${toolId}/`;
7902+
const fallbackUrl = serviceLeadFallbackUrl({
7903+
serviceType: "custom-local-print-pack",
7904+
businessName: "",
7905+
contact: "",
7906+
needBy: "",
7907+
requestSummary: `I just downloaded ${tool.shortTitle || tool.title || toolId} and want a quick $29 local print pack review.`,
7908+
path: sourcePath,
7909+
});
7910+
return `
7911+
<form class="download-service-lead-form" data-service-lead-form data-service-type="custom-local-print-pack" data-lead-path="${escapeHtml(sourcePath)}" data-utm-source="download_success" data-utm-medium="site" data-utm-campaign="service_request" data-utm-content="${escapeHtml(toolId)}" data-service-fallback-url="${escapeHtml(fallbackUrl)}">
7912+
<input class="sr-only" type="text" name="websiteTrap" tabindex="-1" autocomplete="off" aria-hidden="true">
7913+
<input type="hidden" name="serviceType" value="custom-local-print-pack">
7914+
<input type="hidden" name="businessName" value="Downloaded ${escapeHtml(tool.shortTitle || tool.title || toolId)}">
7915+
<input type="hidden" name="needBy" value="">
7916+
<input type="hidden" name="utmSource" value="download_success">
7917+
<input type="hidden" name="utmMedium" value="site">
7918+
<input type="hidden" name="utmCampaign" value="service_request">
7919+
<input type="hidden" name="utmContent" value="${escapeHtml(toolId)}">
7920+
<label class="field">
7921+
<span>Reply email or public contact</span>
7922+
<input name="contact" maxlength="180" autocomplete="email" placeholder="you@example.com or @publichandle" required>
7923+
</label>
7924+
<label class="field">
7925+
<span>What should be assembled?</span>
7926+
<textarea name="requestSummary" maxlength="1000" required>I just downloaded ${escapeHtml(tool.shortTitle || tool.title || toolId)} and want a quick $29 local print pack review.</textarea>
7927+
</label>
7928+
<label class="check-row">
7929+
<input name="consent" type="checkbox" required>
7930+
<span>I will keep payment, tax, identity, passwords, customer lists, and private files outside this request.</span>
7931+
</label>
7932+
<div class="actions">
7933+
<button class="button" type="submit" data-track-event="service_request_intent" data-track-tool="custom-local-print-pack">Send $29 setup request</button>
7934+
<a class="button ghost" data-service-lead-fallback-link data-track-event="service_request_intent" data-track-tool="custom-local-print-pack" href="${escapeHtml(fallbackUrl)}" target="_blank" rel="noreferrer">Open GitHub backup</a>
7935+
</div>
7936+
<p class="help service-lead-status" data-service-lead-status role="status" aria-live="polite">Fastest path: send a public-safe request here. Payment still happens only through a real external checkout or invoice after fit is confirmed.</p>
7937+
</form>
7938+
`;
7939+
}
7940+
78977941
function showDownloadComplete(tool, target, remaining, title = "PDF downloaded") {
78987942
if (!target) return;
78997943
const related = getRelatedTools(tool.id).slice(0, 3);
@@ -7911,6 +7955,7 @@ ${paragraphs.join("\n")}
79117955
</div>
79127956
${renderAdUnit("tool", "download-complete area, clearly separated from the PDF action")}
79137957
`;
7958+
initServiceLeadForms(target);
79147959
setTimeout(pushVisibleAds, 0);
79157960
}
79167961

@@ -13799,16 +13844,17 @@ ${paragraphs.join("\n")}
1379913844
function serviceLeadPayload(form) {
1380013845
const values = getFormValues(form);
1380113846
const params = new URLSearchParams(window.location.search || "");
13847+
const fieldOrDataOrParam = (field, data, param) => values[field] || form.dataset[data] || params.get(param) || "";
1380213848
return {
1380313849
...values,
1380413850
serviceType: values.serviceType || form.dataset.serviceType || "custom-local-print-pack",
1380513851
consent: Boolean(form.querySelector("input[name='consent']")?.checked),
13806-
path: getCurrentRoutePath(),
13852+
path: values.path || form.dataset.leadPath || getCurrentRoutePath(),
1380713853
source: getTrafficSource(),
13808-
utmSource: params.get("utm_source") || "",
13809-
utmMedium: params.get("utm_medium") || "",
13810-
utmCampaign: params.get("utm_campaign") || "",
13811-
utmContent: params.get("utm_content") || "",
13854+
utmSource: fieldOrDataOrParam("utmSource", "utmSource", "utm_source"),
13855+
utmMedium: fieldOrDataOrParam("utmMedium", "utmMedium", "utm_medium"),
13856+
utmCampaign: fieldOrDataOrParam("utmCampaign", "utmCampaign", "utm_campaign"),
13857+
utmContent: fieldOrDataOrParam("utmContent", "utmContent", "utm_content"),
1381213858
};
1381313859
}
1381413860

assets/digital-products/local-seller-starter-kit-package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"product": "Local Seller Starter Kit",
3-
"generatedAt": "2026-06-08T03:36:52.889Z",
3+
"generatedAt": "2026-06-08T03:44:38.833Z",
44
"priceUsd": 9,
55
"checkoutConfigured": false,
66
"publicSample": {
77
"path": "assets/digital-products/local-seller-starter-kit-sample.zip",
88
"url": "https://printable-tools-lab.pages.dev/assets/digital-products/local-seller-starter-kit-sample.zip",
99
"fileCount": 4,
1010
"sizeBytes": 1790,
11-
"sha256": "538c393b015d524372ed821776ec9a2b09203f8c926454f90be506f1c7f97337"
11+
"sha256": "3b739ae3baf5b7c18aa9b8d7e3403d1a9bf55b07864d543276394fb7f69e7ed1"
1212
},
1313
"publicRequestTemplate": {
1414
"path": "assets/digital-products/local-seller-starter-kit-buy-request.txt",
@@ -21,7 +21,7 @@
2121
"gitIgnored": true,
2222
"fileCount": 13,
2323
"sizeBytes": 7576,
24-
"sha256": "30041c04f51f9a1695b9e07912f05cd2fd76383f9b1692cf0d92eb73e519d4a9"
24+
"sha256": "33a8542a33b57e16871bf57d9e80942c9323955c1bdfb5c48a674ee305198986"
2525
},
2626
"moneyGate": "Revenue is proven only after a real payment provider shows a paid order, payout balance, or settled payment for this kit.",
2727
"riskControls": [
0 Bytes
Binary file not shown.

assets/services/custom-local-print-pack-sample-delivery.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"service": "Custom Local Print Pack Setup",
3-
"generatedAt": "2026-06-08T03:36:52.889Z",
3+
"generatedAt": "2026-06-08T03:44:38.833Z",
44
"sampleOnly": true,
55
"sampleDelivery": {
66
"path": "assets/services/custom-local-print-pack-sample-delivery.zip",
77
"url": "https://printable-tools-lab.pages.dev/assets/services/custom-local-print-pack-sample-delivery.zip",
88
"sizeBytes": 4264,
9-
"sha256": "a92bc841db596b15a2f1a0780598d3a38a5785b83abfcbf110331b4f3e9a1f48"
9+
"sha256": "7a16906cd15bc6a6f91ccc3eb2d5ce7949757be4b36dad376ec684fc6497605b"
1010
},
1111
"deliveryInputExample": {
1212
"path": "assets/services/custom-local-print-pack-delivery-input.example.json",
0 Bytes
Binary file not shown.

digital-products.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "PrintableTools Lab Digital Products",
3-
"generatedAt": "2026-06-08T03:36:52.889Z",
3+
"generatedAt": "2026-06-08T03:44:38.833Z",
44
"canonical": "https://printable-tools-lab.pages.dev/digital-products.json",
55
"products": [
66
{
@@ -19,7 +19,7 @@
1919
"packageReportUrl": "https://printable-tools-lab.pages.dev/assets/digital-products/local-seller-starter-kit-package.json",
2020
"privatePackagePath": "paid-deliverables/local-seller-starter-kit.zip",
2121
"privatePackageReady": true,
22-
"privatePackageSha256": "30041c04f51f9a1695b9e07912f05cd2fd76383f9b1692cf0d92eb73e519d4a9",
22+
"privatePackageSha256": "33a8542a33b57e16871bf57d9e80942c9323955c1bdfb5c48a674ee305198986",
2323
"contents": [
2424
"30-day local promo calendar CSV",
2525
"price tag and SKU starter CSV",

discovery.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "PrintableTools Lab",
33
"url": "https://printable-tools-lab.pages.dev/",
4-
"generatedAt": "2026-06-08T03:36:52.889Z",
4+
"generatedAt": "2026-06-08T03:44:38.833Z",
55
"positioning": "Free no-signup browser PDF, image, and QR tools with local generation, original guides, and responsible ad placement after approval.",
66
"feed": "https://printable-tools-lab.pages.dev/feed.xml",
77
"manifest": "https://printable-tools-lab.pages.dev/site.webmanifest",

docs/assets/digital-products/local-seller-starter-kit-package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"product": "Local Seller Starter Kit",
3-
"generatedAt": "2026-06-08T03:36:52.889Z",
3+
"generatedAt": "2026-06-08T03:44:38.833Z",
44
"priceUsd": 9,
55
"checkoutConfigured": false,
66
"publicSample": {
77
"path": "assets/digital-products/local-seller-starter-kit-sample.zip",
88
"url": "https://printable-tools-lab.pages.dev/assets/digital-products/local-seller-starter-kit-sample.zip",
99
"fileCount": 4,
1010
"sizeBytes": 1790,
11-
"sha256": "538c393b015d524372ed821776ec9a2b09203f8c926454f90be506f1c7f97337"
11+
"sha256": "3b739ae3baf5b7c18aa9b8d7e3403d1a9bf55b07864d543276394fb7f69e7ed1"
1212
},
1313
"publicRequestTemplate": {
1414
"path": "assets/digital-products/local-seller-starter-kit-buy-request.txt",
@@ -21,7 +21,7 @@
2121
"gitIgnored": true,
2222
"fileCount": 13,
2323
"sizeBytes": 7576,
24-
"sha256": "30041c04f51f9a1695b9e07912f05cd2fd76383f9b1692cf0d92eb73e519d4a9"
24+
"sha256": "33a8542a33b57e16871bf57d9e80942c9323955c1bdfb5c48a674ee305198986"
2525
},
2626
"moneyGate": "Revenue is proven only after a real payment provider shows a paid order, payout balance, or settled payment for this kit.",
2727
"riskControls": [
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)