Skip to content

Commit cc7e955

Browse files
author
PrintableTools Lab Bot
committed
Add internal sponsor submission queue
1 parent 9656abc commit cc7e955

35 files changed

Lines changed: 552 additions & 204 deletions

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-08T01:34:25.895Z
3+
Last generated: 2026-06-08T01:49:42.907Z
44

55
## Current Automated Status
66

app.js

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5265,6 +5265,69 @@
52655265
],
52665266
};
52675267

5268+
const sponsorOpsSubmissionQueue = [
5269+
{
5270+
name: "Cloudmersive",
5271+
category: "Document conversion API",
5272+
contactRouteStatus: "ready",
5273+
firstAction: "Prepare only",
5274+
bestContactUrl: "https://portal.cloudmersive.com/partnerships",
5275+
publicEmail: "",
5276+
prospectId: "cloudmersive-document-api",
5277+
dealId: "starter-fit-review",
5278+
vertical: "pdf-image-qr-saas",
5279+
note: "Route is ready but requires real email, name, phone, and consent checkbox.",
5280+
},
5281+
{
5282+
name: "QRCodeChimp",
5283+
category: "QR code marketing",
5284+
contactRouteStatus: "review",
5285+
firstAction: "Open email draft",
5286+
bestContactUrl: "https://www.qrcodechimp.com/contact",
5287+
publicEmail: "support@qrcodechimp.com",
5288+
prospectId: "qrcodechimp-qr-marketing",
5289+
dealId: "guide-sponsor-pilot",
5290+
vertical: "local-marketing-qr-sponsors",
5291+
note: "Public email visible; confirm sponsorship or partnership relevance before sending.",
5292+
},
5293+
{
5294+
name: "Invoice Ninja",
5295+
category: "Invoicing software",
5296+
contactRouteStatus: "review",
5297+
firstAction: "Open email draft",
5298+
bestContactUrl: "https://www.invoiceninja.com/contact/",
5299+
publicEmail: "contact@invoiceninja.com",
5300+
prospectId: "invoice-ninja-small-business",
5301+
dealId: "vertical-category-pilot",
5302+
vertical: "small-business-paperwork-sponsors",
5303+
note: "Warmest business-paperwork fit; use truthful sender identity and record evidence if sent.",
5304+
},
5305+
{
5306+
name: "Education.com",
5307+
category: "Worksheets and learning resources",
5308+
contactRouteStatus: "review",
5309+
firstAction: "Open email draft",
5310+
bestContactUrl: "https://www.education.com/support/contact/",
5311+
publicEmail: "support@education.com",
5312+
prospectId: "educationcom-worksheets",
5313+
dealId: "vertical-category-pilot",
5314+
vertical: "classroom-printable-sponsors",
5315+
note: "Public email visible, but the route asks for real sender details; send only from a truthful authorized sender.",
5316+
},
5317+
{
5318+
name: "Zoho Invoice",
5319+
category: "Small-business invoicing",
5320+
contactRouteStatus: "review",
5321+
firstAction: "Open contact route",
5322+
bestContactUrl: "https://www.zoho.com/partners",
5323+
publicEmail: "",
5324+
prospectId: "zoho-invoice-small-business",
5325+
dealId: "guide-sponsor-pilot",
5326+
vertical: "small-business-paperwork-sponsors",
5327+
note: "Partner route discovered; use public-safe form message only after confirming route fit.",
5328+
},
5329+
];
5330+
52685331
function sponsorExternalDiscoveryProofLine() {
52695332
const listedCount = sponsorExternalDiscoveryProof.directoryListedCount || sponsorExternalDiscoveryProof.listedDirectories.length;
52705333
const pendingCount = sponsorExternalDiscoveryProof.directoryPendingCount || 0;
@@ -8274,6 +8337,7 @@ ${paragraphs.join("\n")}
82748337
</div>
82758338
</section>
82768339
</div>
8340+
${sponsorOpsSubmissionQueueHtml()}
82778341
</section>
82788342
`;
82798343
}
@@ -8379,6 +8443,60 @@ ${paragraphs.join("\n")}
83798443
`;
83808444
}
83818445

8446+
function sponsorOpsSubmissionQueueHtml() {
8447+
return `
8448+
<div class="ops-submission-queue">
8449+
<h3>Next sponsor submissions</h3>
8450+
<p class="help">Use only with a truthful sender identity. Mark sent only after a real public form submission or legitimate email send with evidence.</p>
8451+
<div class="ops-action-list">
8452+
${sponsorOpsSubmissionQueue.map(sponsorOpsSubmissionCard).join("")}
8453+
</div>
8454+
</div>`;
8455+
}
8456+
8457+
function sponsorOpsSubmissionCard(row) {
8458+
const prospect = sponsorProspects.find((item) => item.id === row.prospectId) || {
8459+
id: row.prospectId,
8460+
name: row.name,
8461+
category: row.category,
8462+
website: "",
8463+
contactUrl: row.bestContactUrl,
8464+
fitReason: row.note,
8465+
vertical: row.vertical,
8466+
dealId: row.dealId,
8467+
};
8468+
const vertical = sponsorVerticals.find((item) => item.slug === row.vertical) || sponsorVerticals[0];
8469+
const deal = sponsorDeals.find((item) => item.id === row.dealId) || sponsorDeals[1] || sponsorDeals[0];
8470+
const proposalUrl = sponsorProspectProposalUrl(prospect, deal, vertical);
8471+
const publicReplyUrl = sponsorPublicReplyUrl(prospect, deal, vertical, proposalUrl);
8472+
const pitch = sponsorProspectPitch(prospect, deal, vertical, proposalUrl);
8473+
const mailtoUrl = row.publicEmail ? sponsorMailtoDraft(row.publicEmail, `${deal.title} for ${vertical.title}`, pitch) : "";
8474+
return `
8475+
<article class="ops-action-card sponsor-submission-card">
8476+
<div>
8477+
<p class="eyebrow">${escapeHtml(row.contactRouteStatus)} / ${escapeHtml(row.firstAction)}</p>
8478+
<h4>${escapeHtml(row.name)}</h4>
8479+
<p><strong>${escapeHtml(deal.title)}:</strong> ${escapeHtml(deal.price)} · ${escapeHtml(row.category)}</p>
8480+
<p class="help">${escapeHtml(row.note)}</p>
8481+
</div>
8482+
<div class="ops-action-buttons">
8483+
<a class="button secondary" href="${escapeHtml(row.bestContactUrl)}" target="_blank" rel="noreferrer">Open route</a>
8484+
${mailtoUrl ? `<a class="button" href="${escapeHtml(mailtoUrl)}">Open email draft</a>` : ""}
8485+
<a class="button secondary" href="${escapeHtml(proposalUrl)}" target="_blank" rel="noreferrer">Short proposal</a>
8486+
<a class="button ghost" href="${escapeHtml(sponsorVerticalInvoiceReviewUrl(vertical, row.prospectId))}" target="_blank" rel="noreferrer">Invoice URL</a>
8487+
<a class="button ghost" href="${escapeHtml(publicReplyUrl)}" target="_blank" rel="noreferrer">Public reply</a>
8488+
<button class="button ghost" type="button" data-copy-text="${escapeHtml(pitch)}">Copy message</button>
8489+
</div>
8490+
</article>`;
8491+
}
8492+
8493+
function sponsorMailtoDraft(email, subject, body) {
8494+
const params = new URLSearchParams();
8495+
params.set("subject", subject || "PrintableTools Lab sponsor pilot");
8496+
params.set("body", body || "");
8497+
return `mailto:${email}?${params.toString()}`;
8498+
}
8499+
83828500
function sponsorProspectFromParams(params) {
83838501
const id = String(params.get("prospect") || params.get("utm_content") || "").trim();
83848502
const found = sponsorProspects.find((item) => item.id === id);

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-08T01:36:11.088Z",
4+
"generatedAt": "2026-06-08T01:52:22.072Z",
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-08T01:36:11.180Z",
3+
"generatedAt": "2026-06-08T01:52:22.166Z",
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-08T01:36:11.180Z",
3+
"generatedAt": "2026-06-08T01:52:22.166Z",
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-08T01:36:11.180Z",
3+
"generatedAt": "2026-06-08T01:52:22.166Z",
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-08T01:36:11.180Z",
3+
"generatedAt": "2026-06-08T01:52:22.166Z",
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-08T01:36:11.180Z",
3+
"generatedAt": "2026-06-08T01:52:22.166Z",
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-08T01:36:11.180Z",
3+
"generatedAt": "2026-06-08T01:52:22.166Z",
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/sponsor-starter-review.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "PrintableTools Lab USD 49 Starter Sponsor Review Mirror",
3-
"generatedAt": "2026-06-08T01:36:11.180Z",
3+
"generatedAt": "2026-06-08T01:52:22.166Z",
44
"directory": "https://yanqr213.github.io/printable-tools-lab/sponsor-starter-review/",
55
"livePage": "https://printable-tools-lab.pages.dev/sponsor-starter-review/",
66
"trackedReviewUrl": "https://printable-tools-lab.pages.dev/sponsor-starter-review/?utm_source=sponsor-outreach&utm_medium=organic&utm_campaign=sponsor_call&utm_content=github-pages-starter-review#sponsor-inquiry",

0 commit comments

Comments
 (0)