Skip to content

Commit 4f5db51

Browse files
author
PrintableTools Lab Bot
committed
Add direct sponsor proposal funnel
1 parent b4f260f commit 4f5db51

29 files changed

Lines changed: 367 additions & 191 deletions

app.js

Lines changed: 90 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5338,6 +5338,7 @@
53385338
if (parts[0] === "pdf-tool-finder") return renderPdfToolFinder();
53395339
if (parts[0] === "submit-directory") return renderDirectorySubmissionPack();
53405340
if (parts[0] === "share-kit") return renderShareKit();
5341+
if (parts[0] === "sponsor-proposal") return renderSponsorProposalPage();
53415342
if (parts[0] === "sponsor-deal-room") return renderSponsorDealRoomPage();
53425343
if (parts[0] === "sponsor-call") return renderSponsorCallPage();
53435344
if (parts[0] === "sponsor-opportunities") return renderSponsorOpportunitiesPage();
@@ -7543,6 +7544,61 @@ ${paragraphs.join("\n")}
75437544
initSponsorLeadForms(app);
75447545
}
75457546

7547+
function renderSponsorProposalPage() {
7548+
setMeta("Sponsor Proposal for PrintableTools Lab", "Noindex sponsor proposal page for one policy-fit partner, with a recommended pilot deal and prefilled inquiry path.");
7549+
setMetaTag("robots", "noindex,follow");
7550+
const params = new URLSearchParams(window.location.search || "");
7551+
const prospect = sponsorProspectFromParams(params);
7552+
const vertical = sponsorVerticals.find((item) => item.slug === prospect.vertical) || sponsorVerticals[0];
7553+
const deal = sponsorDeals.find((item) => item.id === (params.get("deal") || prospect.dealId)) || sponsorDeals[1] || sponsorDeals[0];
7554+
const dealUrl = sponsorProspectDealUrl(prospect, deal, vertical);
7555+
const proposalUrl = sponsorProspectProposalUrl(prospect, deal, vertical);
7556+
const pitch = sponsorProspectPitch(prospect, deal, vertical, proposalUrl);
7557+
app.innerHTML = `
7558+
<section class="shell page-title section sponsor-hero">
7559+
<a href="/sponsor-deal-room/">Sponsor deal room</a>
7560+
<h1>${escapeHtml(prospect.name)} sponsor proposal</h1>
7561+
<p>A direct, business-safe proposal for a small, clearly labeled sponsor pilot with PrintableTools Lab. Downloads stay free, sponsor copy is manually reviewed, and revenue is counted only after a signed agreement or settled external payment.</p>
7562+
<p><a class="button" data-track-event="sponsor_request_intent" data-track-tool="sponsor" href="#sponsor-inquiry">Start inquiry</a> <a class="button secondary" data-track-event="sponsor_request_intent" data-track-tool="sponsor" href="${escapeHtml(dealUrl)}">Open deal room path</a> <button class="button ghost" type="button" data-copy-text="${escapeHtml(pitch)}">Copy outreach note</button></p>
7563+
</section>
7564+
<section class="shell section">
7565+
<h2>Why this is a fit</h2>
7566+
<div class="grid-3">
7567+
<article class="panel"><h3>Partner</h3><p><strong>${escapeHtml(prospect.name)}</strong></p><p>${escapeHtml(prospect.category)}</p></article>
7568+
<article class="panel"><h3>Audience match</h3><p>${escapeHtml(prospect.fitReason)}</p></article>
7569+
<article class="panel"><h3>Relevant vertical</h3><p><strong>${escapeHtml(vertical.title)}</strong></p><p>${escapeHtml(vertical.audience)}</p></article>
7570+
</div>
7571+
</section>
7572+
<section class="shell section">
7573+
<h2>Recommended pilot</h2>
7574+
<div class="grid-3">
7575+
<article class="panel"><h3>${escapeHtml(deal.title)}</h3><p><strong>${escapeHtml(deal.price)}</strong></p><p>${escapeHtml(deal.bestFor)}</p></article>
7576+
<article class="panel"><h3>Deliverable</h3><p>${escapeHtml(deal.deliverable)}</p></article>
7577+
<article class="panel"><h3>Review needed</h3><p>${escapeHtml(deal.proofNeeded)}</p></article>
7578+
</div>
7579+
</section>
7580+
<section class="shell section">
7581+
<h2>Relevant tool inventory</h2>
7582+
<div class="cluster-links">
7583+
${vertical.links.map(([label, pathName]) => `<a href="/${escapeHtml(pathName)}/?utm_source=sponsor-proposal&utm_medium=proposal&utm_campaign=${escapeHtml(vertical.campaign)}&utm_content=${escapeHtml(prospect.id)}">${escapeHtml(label)}</a>`).join("")}
7584+
</div>
7585+
</section>
7586+
${renderSponsorLeadForm()}
7587+
<section class="shell section">
7588+
<h2>Proposal rules</h2>
7589+
<ul>
7590+
<li>Sponsor copy must be clearly labeled and manually approved before placement.</li>
7591+
<li>Downloads stay free and cannot require sponsor interaction, ad clicks, accounts, or payment.</li>
7592+
<li>No gambling, adult, deceptive finance, malware, fake document, misleading upload-service, or unsafe claims.</li>
7593+
<li>Payment, tax, bank, private identity, phone, and customer-file details stay outside this form.</li>
7594+
</ul>
7595+
<p class="help">Proposal URL: ${escapeHtml(proposalUrl)}</p>
7596+
</section>
7597+
`;
7598+
applySponsorDealPrefill(app.querySelector("[data-sponsor-lead-form]"), sponsorDealPrefillFromDeal(deal));
7599+
initSponsorLeadForms(app);
7600+
}
7601+
75467602
function renderSponsorCallPage() {
75477603
setMeta("Sponsor Call for PrintableTools Lab", "Public sponsor call for privacy-friendly PDF, image, QR, resume, classroom, and small-business workflow partners to request a labeled pilot placement.");
75487604
app.innerHTML = `
@@ -7954,7 +8010,8 @@ ${paragraphs.join("\n")}
79548010
const vertical = sponsorVerticals.find((item) => item.slug === prospect.vertical) || sponsorVerticals[0];
79558011
const deal = sponsorDeals.find((item) => item.id === prospect.dealId) || sponsorDeals[1] || sponsorDeals[0];
79568012
const dealUrl = sponsorProspectDealUrl(prospect, deal, vertical);
7957-
const pitch = sponsorProspectPitch(prospect, deal, vertical, dealUrl);
8013+
const proposalUrl = sponsorProspectProposalUrl(prospect, deal, vertical);
8014+
const pitch = sponsorProspectPitch(prospect, deal, vertical, proposalUrl);
79588015
return `
79598016
<article class="ops-action-card">
79608017
<div>
@@ -7965,13 +8022,30 @@ ${paragraphs.join("\n")}
79658022
</div>
79668023
<div class="ops-action-buttons">
79678024
<a class="button secondary" href="${escapeHtml(prospect.contactUrl)}" target="_blank" rel="noreferrer">Contact</a>
7968-
<a class="button secondary" href="${escapeHtml(dealUrl)}" target="_blank" rel="noreferrer">Deal link</a>
8025+
<a class="button secondary" href="${escapeHtml(proposalUrl)}" target="_blank" rel="noreferrer">Proposal</a>
8026+
<a class="button ghost" href="${escapeHtml(dealUrl)}" target="_blank" rel="noreferrer">Deal link</a>
79698027
<button class="button ghost" type="button" data-copy-text="${escapeHtml(pitch)}">Copy pitch</button>
79708028
</div>
79718029
</article>
79728030
`;
79738031
}
79748032

8033+
function sponsorProspectFromParams(params) {
8034+
const id = String(params.get("prospect") || params.get("utm_content") || "").trim();
8035+
const found = sponsorProspects.find((item) => item.id === id);
8036+
if (found) return found;
8037+
const vertical = sponsorVerticals.find((item) => item.slug === params.get("vertical")) || sponsorVerticals[0];
8038+
return {
8039+
id: id || "direct-sponsor",
8040+
name: "Policy-fit partner",
8041+
vertical: vertical.slug,
8042+
category: "Sponsor prospect",
8043+
contactUrl: "/sponsor-deal-room/",
8044+
fitReason: `This proposal is for partners that fit ${vertical.title} and can help visitors with ${vertical.audience.toLowerCase()}`,
8045+
dealId: params.get("deal") || "guide-sponsor-pilot",
8046+
};
8047+
}
8048+
79758049
function sponsorProspectDealUrl(prospect, deal, vertical) {
79768050
const params = new URLSearchParams({
79778051
utm_source: "sponsor-outreach",
@@ -7984,6 +8058,19 @@ ${paragraphs.join("\n")}
79848058
return `/sponsor-deal-room/?${params.toString()}#sponsor-inquiry`;
79858059
}
79868060

8061+
function sponsorProspectProposalUrl(prospect, deal, vertical) {
8062+
const params = new URLSearchParams({
8063+
prospect: prospect.id,
8064+
deal: deal.id,
8065+
vertical: vertical.slug,
8066+
utm_source: "sponsor-outreach",
8067+
utm_medium: "manual",
8068+
utm_campaign: "sponsor_proposal",
8069+
utm_content: prospect.id,
8070+
});
8071+
return `/sponsor-proposal/?${params.toString()}#sponsor-inquiry`;
8072+
}
8073+
79878074
function sponsorProspectPitch(prospect, deal, vertical, dealUrl) {
79888075
const absoluteDealUrl = absoluteSponsorUrl(dealUrl);
79898076
const contextUrl = absoluteSponsorUrl(`/sponsor/${vertical.slug}/?utm_source=sponsor-outreach&utm_medium=manual&utm_campaign=${encodeURIComponent(vertical.campaign)}&utm_content=${encodeURIComponent(prospect.id)}`);
@@ -12403,7 +12490,7 @@ ${paragraphs.join("\n")}
1240312490
utmMedium: clean(params.get("utm_medium")),
1240412491
utmCampaign: clean(params.get("utm_campaign")),
1240512492
utmContent: clean(params.get("utm_content")),
12406-
vertical: parts[0] === "sponsor" && parts[1] ? clean(parts[1]) : "",
12493+
vertical: clean(params.get("vertical")) || (parts[0] === "sponsor" && parts[1] ? clean(parts[1]) : ""),
1240712494
};
1240812495
}
1240912496

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-07T09:30:55.953Z",
4+
"generatedAt": "2026-06-07T09:38:03.253Z",
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/game-submission-feed.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "HTML5 Game Submission Feed",
3-
"generatedAt": "2026-06-07T09:30:56.039Z",
3+
"generatedAt": "2026-06-07T09:38:03.341Z",
44
"directory": "https://yanqr213.github.io/printable-tools-lab/html5-game-submission-pack/",
55
"mainSubmissionPack": "https://printable-tools-lab.pages.dev/portal-submission-pack/",
66
"purpose": "Public machine-readable feed for HTML5 game portals and reviewers. It lists playable builds, clean ZIPs, SDK packages, demo videos, review reports, and ad-safety notes without private account or payout data.",

docs/games.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "HTML5 Game Submission Feed",
3-
"generatedAt": "2026-06-07T09:30:56.039Z",
3+
"generatedAt": "2026-06-07T09:38:03.341Z",
44
"directory": "https://yanqr213.github.io/printable-tools-lab/html5-game-submission-pack/",
55
"mainSubmissionPack": "https://printable-tools-lab.pages.dev/portal-submission-pack/",
66
"purpose": "Public machine-readable feed for HTML5 game portals and reviewers. It lists playable builds, clean ZIPs, SDK packages, demo videos, review reports, and ad-safety notes without private account or payout data.",

docs/organic-push-kit.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "PrintableTools Lab Organic Push Kit Mirror",
3-
"generatedAt": "2026-06-07T09:30:56.039Z",
3+
"generatedAt": "2026-06-07T09:38:03.341Z",
44
"directory": "https://yanqr213.github.io/printable-tools-lab/organic-push-kit/",
55
"livePage": "https://printable-tools-lab.pages.dev/organic-push-kit/",
66
"liveJson": "https://printable-tools-lab.pages.dev/organic-push-kit.json",

docs/sponsor-call.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "PrintableTools Lab Sponsor Call Mirror",
3-
"generatedAt": "2026-06-07T09:30:56.039Z",
3+
"generatedAt": "2026-06-07T09:38:03.341Z",
44
"directory": "https://yanqr213.github.io/printable-tools-lab/sponsor-call/",
55
"livePage": "https://printable-tools-lab.pages.dev/sponsor-call/",
66
"liveJson": "https://printable-tools-lab.pages.dev/sponsor-call.json",

docs/sponsor-deal-room.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "PrintableTools Lab Sponsor Deal Room Mirror",
3-
"generatedAt": "2026-06-07T09:30:56.039Z",
3+
"generatedAt": "2026-06-07T09:38:03.341Z",
44
"directory": "https://yanqr213.github.io/printable-tools-lab/sponsor-deal-room/",
55
"livePage": "https://printable-tools-lab.pages.dev/sponsor-deal-room/",
66
"liveJson": "https://printable-tools-lab.pages.dev/sponsor-deal-room.json",

docs/sponsor-opportunities.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "PrintableTools Lab Sponsor Opportunities Mirror",
3-
"generatedAt": "2026-06-07T09:30:56.039Z",
3+
"generatedAt": "2026-06-07T09:38:03.341Z",
44
"directory": "https://yanqr213.github.io/printable-tools-lab/sponsor-opportunities/",
55
"livePage": "https://printable-tools-lab.pages.dev/sponsor-opportunities/",
66
"liveJson": "https://printable-tools-lab.pages.dev/sponsor-opportunities.json",

docs/tools.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"finder": "https://printable-tools-lab.pages.dev/pdf-tool-finder/",
66
"feed": "https://printable-tools-lab.pages.dev/feed.xml",
77
"githubPagesDirectory": "https://yanqr213.github.io/printable-tools-lab/",
8-
"generatedAt": "2026-06-07T09:30:56.039Z",
8+
"generatedAt": "2026-06-07T09:38:03.341Z",
99
"landingPages": [
1010
{
1111
"title": "Free Upload Limit Fixer",
@@ -1559,7 +1559,7 @@
15591559
},
15601560
"organicPushKit": {
15611561
"name": "PrintableTools Lab Organic Push Kit Mirror",
1562-
"generatedAt": "2026-06-07T09:30:56.039Z",
1562+
"generatedAt": "2026-06-07T09:38:03.341Z",
15631563
"directory": "https://yanqr213.github.io/printable-tools-lab/organic-push-kit/",
15641564
"livePage": "https://printable-tools-lab.pages.dev/organic-push-kit/",
15651565
"liveJson": "https://printable-tools-lab.pages.dev/organic-push-kit.json",
@@ -1656,7 +1656,7 @@
16561656
},
16571657
"uploadErrorCheatsheet": {
16581658
"name": "PrintableTools Lab Upload Error Cheatsheet Mirror",
1659-
"generatedAt": "2026-06-07T09:30:56.039Z",
1659+
"generatedAt": "2026-06-07T09:38:03.341Z",
16601660
"directory": "https://yanqr213.github.io/printable-tools-lab/upload-error-cheatsheet/",
16611661
"livePage": "https://printable-tools-lab.pages.dev/upload-error-cheatsheet/",
16621662
"liveJson": "https://printable-tools-lab.pages.dev/upload-error-cheatsheet.json",
@@ -1803,7 +1803,7 @@
18031803
},
18041804
"sponsorDealRoom": {
18051805
"name": "PrintableTools Lab Sponsor Deal Room Mirror",
1806-
"generatedAt": "2026-06-07T09:30:56.039Z",
1806+
"generatedAt": "2026-06-07T09:38:03.341Z",
18071807
"directory": "https://yanqr213.github.io/printable-tools-lab/sponsor-deal-room/",
18081808
"livePage": "https://printable-tools-lab.pages.dev/sponsor-deal-room/",
18091809
"liveJson": "https://printable-tools-lab.pages.dev/sponsor-deal-room.json",
@@ -1903,7 +1903,7 @@
19031903
},
19041904
"sponsorCall": {
19051905
"name": "PrintableTools Lab Sponsor Call Mirror",
1906-
"generatedAt": "2026-06-07T09:30:56.039Z",
1906+
"generatedAt": "2026-06-07T09:38:03.341Z",
19071907
"directory": "https://yanqr213.github.io/printable-tools-lab/sponsor-call/",
19081908
"livePage": "https://printable-tools-lab.pages.dev/sponsor-call/",
19091909
"liveJson": "https://printable-tools-lab.pages.dev/sponsor-call.json",
@@ -2012,7 +2012,7 @@
20122012
},
20132013
"sponsorOpportunities": {
20142014
"name": "PrintableTools Lab Sponsor Opportunities Mirror",
2015-
"generatedAt": "2026-06-07T09:30:56.039Z",
2015+
"generatedAt": "2026-06-07T09:38:03.341Z",
20162016
"directory": "https://yanqr213.github.io/printable-tools-lab/sponsor-opportunities/",
20172017
"livePage": "https://printable-tools-lab.pages.dev/sponsor-opportunities/",
20182018
"liveJson": "https://printable-tools-lab.pages.dev/sponsor-opportunities.json",

docs/upload-error-cheatsheet.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "PrintableTools Lab Upload Error Cheatsheet Mirror",
3-
"generatedAt": "2026-06-07T09:30:56.039Z",
3+
"generatedAt": "2026-06-07T09:38:03.341Z",
44
"directory": "https://yanqr213.github.io/printable-tools-lab/upload-error-cheatsheet/",
55
"livePage": "https://printable-tools-lab.pages.dev/upload-error-cheatsheet/",
66
"liveJson": "https://printable-tools-lab.pages.dev/upload-error-cheatsheet.json",

0 commit comments

Comments
 (0)