Skip to content

Commit 43dbc7c

Browse files
Update index.html
1 parent 76219a8 commit 43dbc7c

1 file changed

Lines changed: 74 additions & 48 deletions

File tree

index.html

Lines changed: 74 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -168,23 +168,30 @@ <h1 class="mt-4 text-3xl font-semibold tracking-tight sm:text-4xl">
168168
{ tier: "Registered / LAR", engagement: "Transactional (Band 3)", involvement: "High-touch / Recast-led", range: "0–5%", notes: "Finder’s fee or referral incentive" },
169169
],
170170
},
171+
other: {
172+
partners: [
173+
{ partnerType: "MSP", tierEligibility: "Premier", margin: "Negotiated within Band 1–3 framework", dealRegistration: "Required", mdfAccess: "Strategic MDF", enablement: "Dedicated Channel Manager, SE alignment, joint QBRs" },
174+
{ partnerType: "Technology Partner (ISV)", tierEligibility: "Premier", margin: "Negotiated; typically Band 2 equivalent + referral incentives", dealRegistration: "Optional", mdfAccess: "Co-marketing only", enablement: "Developer enablement, API/SDK certification" },
175+
{ partnerType: "OEM Partner", tierEligibility: "Premier", margin: "Embedded / co-sell pricing (not margin-based)", dealRegistration: "N/A", mdfAccess: "Strategic MDF", enablement: "OEM SDK, roadmap collaboration, joint solution blueprints" },
176+
{ partnerType: "Distributor Partner", tierEligibility: "Premier", margin: "Transactional (Band 3 equivalent, pre-negotiated)", dealRegistration: "Required", mdfAccess: "Tiered MDF by volume", enablement: "Distributor onboarding toolkit, partner training delivery" },
177+
]
178+
}
171179
}
172180
};
173-
const TIERS = ["Registered", "Preferred", "Premier"];
181+
const TIERS = ["Registered", "Preferred", "Premier", "Other"];
174182
function render() {
175183
if (STATE.tier === "Registered") {
176184
STATE.newPartner = false;
177185
}
178186
let html = '<div class="space-y-6">';
179-
html += '<section class="grid gap-3 sm:grid-cols-3">';
187+
html += '<section class="grid gap-3 sm:grid-cols-4">';
180188
TIERS.forEach((t) => {
181189
const active = STATE.tier === t;
182-
const subtitle =
183-
t === "Registered"
184-
? "Access & referral economics"
185-
: t === "Preferred"
186-
? "Pipeline tools, CRM access, joint motions"
187-
: "Campaigns + priority support";
190+
let subtitle = "";
191+
if (t === "Registered") subtitle = "Access & referral economics";
192+
if (t === "Preferred") subtitle = "Pipeline tools, CRM access, joint motions";
193+
if (t === "Premier") subtitle = "Campaigns + priority support";
194+
if (t === "Other") subtitle = "Specialized partner types";
188195
html += `
189196
<button
190197
class="${
@@ -205,40 +212,44 @@ <h1 class="mt-4 text-3xl font-semibold tracking-tight sm:text-4xl">
205212
`;
206213
});
207214
html += "</section>";
208-
html += '<nav role="tablist" aria-label="Sections" class="flex flex-wrap gap-2 rounded-full bg-white p-1 shadow-sm border border-[#E2E8F0]">';
209-
const tabs = [
210-
{ id: "takes", label: "What it takes" },
211-
{ id: "gets", label: "What you get" },
212-
{ id: "margins", label: "Margins" },
213-
{ id: "onboarding", label: "Onboarding" },
214-
];
215-
tabs.forEach((tabObj) => {
216-
const active = STATE.tab === tabObj.id;
217-
html += `
218-
<button
219-
role="tab"
220-
aria-selected="${active}"
221-
class="${
222-
active ? "bg-[#0070F3] text-white" : "hover:bg-[#F7F9FB]"
223-
} rounded-full px-4 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-[#0070F3]"
224-
data-tab="${tabObj.id}"
225-
>
226-
${tabObj.label}
227-
</button>
228-
`;
229-
});
230-
html += "</nav>";
231-
html += '<div class="grid gap-4" aria-live="polite">';
232-
if (STATE.tab === "takes") {
233-
html += renderWhatItTakes();
234-
} else if (STATE.tab === "gets") {
235-
html += renderWhatYouGet();
236-
} else if (STATE.tab === "margins") {
237-
html += renderMargins();
238-
} else if (STATE.tab === "onboarding") {
239-
html += renderOnboarding();
215+
if (STATE.tier === "Other") {
216+
html += renderOther();
217+
} else {
218+
html += '<nav role="tablist" aria-label="Sections" class="flex flex-wrap gap-2 rounded-full bg-white p-1 shadow-sm border border-[#E2E8F0]">';
219+
const tabs = [
220+
{ id: "takes", label: "What it takes" },
221+
{ id: "gets", label: "What you get" },
222+
{ id: "margins", label: "Margins" },
223+
{ id: "onboarding", label: "Onboarding" },
224+
];
225+
tabs.forEach((tabObj) => {
226+
const active = STATE.tab === tabObj.id;
227+
html += `
228+
<button
229+
role="tab"
230+
aria-selected="${active}"
231+
class="${
232+
active ? "bg-[#0070F3] text-white" : "hover:bg-[#F7F9FB]"
233+
} rounded-full px-4 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-[#0070F3]"
234+
data-tab="${tabObj.id}"
235+
>
236+
${tabObj.label}
237+
</button>
238+
`;
239+
});
240+
html += "</nav>";
241+
html += '<div class="grid gap-4" aria-live="polite">';
242+
if (STATE.tab === "takes") {
243+
html += renderWhatItTakes();
244+
} else if (STATE.tab === "gets") {
245+
html += renderWhatYouGet();
246+
} else if (STATE.tab === "margins") {
247+
html += renderMargins();
248+
} else if (STATE.tab === "onboarding") {
249+
html += renderOnboarding();
250+
}
251+
html += "</div>";
240252
}
241-
html += "</div>";
242253
html += '<footer class="pt-2 text-xs text-[#4A5568]">Preview purposes only. Program terms subject to agreement.</footer>';
243254
html += "</div>";
244255
document.getElementById("app").innerHTML = html;
@@ -248,13 +259,15 @@ <h1 class="mt-4 text-3xl font-semibold tracking-tight sm:text-4xl">
248259
render();
249260
});
250261
});
251-
document.querySelectorAll("[data-tab]").forEach((btn) => {
252-
btn.addEventListener("click", () => {
253-
STATE.tab = btn.dataset.tab;
254-
render();
262+
if (STATE.tier !== "Other") {
263+
document.querySelectorAll("[data-tab]").forEach((btn) => {
264+
btn.addEventListener("click", () => {
265+
STATE.tab = btn.dataset.tab;
266+
render();
267+
});
255268
});
256-
});
257-
if (STATE.tab === "margins") {
269+
}
270+
if (STATE.tab === "margins" && STATE.tier !== "Other") {
258271
const commitmentSelect = document.getElementById("commitment");
259272
if (commitmentSelect) {
260273
commitmentSelect.addEventListener("change", (e) => {
@@ -284,7 +297,7 @@ <h1 class="mt-4 text-3xl font-semibold tracking-tight sm:text-4xl">
284297
});
285298
}
286299
}
287-
if (STATE.tab === "onboarding") {
300+
if (STATE.tab === "onboarding" && STATE.tier !== "Other") {
288301
document.querySelectorAll("[data-step]").forEach((btn) => {
289302
btn.addEventListener("click", () => {
290303
STATE.activeStep = parseInt(btn.dataset.step);
@@ -485,6 +498,19 @@ <h3 class="text-lg font-semibold">Onboarding (Preferred & Premier)</h3>
485498
</div>
486499
`;
487500
}
501+
function renderOther() {
502+
let otherTable = '<table class="min-w-full divide-y divide-[#E2E8F0]"><thead><tr><th class="px-6 py-3 text-left text-sm font-semibold">Partner Type</th><th class="px-6 py-3 text-left text-sm font-semibold">Tier Eligibility</th><th class="px-6 py-3 text-left text-sm font-semibold">Margin</th><th class="px-6 py-3 text-left text-sm font-semibold">Deal Registration</th><th class="px-6 py-3 text-left text-sm font-semibold">MDF Access</th><th class="px-6 py-3 text-left text-sm font-semibold">Enablement</th></tr></thead><tbody class="divide-y divide-[#E2E8F0]">';
503+
STATE.model.other.partners.forEach((p) => {
504+
otherTable += `<tr><td class="px-6 py-4 text-sm font-medium">${p.partnerType}</td><td class="px-6 py-4 text-sm text-[#4A5568]">${p.tierEligibility}</td><td class="px-6 py-4 text-sm text-[#4A5568]">${p.margin}</td><td class="px-6 py-4 text-sm text-[#4A5568]">${p.dealRegistration}</td><td class="px-6 py-4 text-sm text-[#4A5568]">${p.mdfAccess}</td><td class="px-6 py-4 text-sm text-[#4A5568]">${p.enablement}</td></tr>`;
505+
});
506+
otherTable += '</tbody></table>';
507+
return `
508+
<div class="mt-4 rounded-2xl border border-[#E2E8F0] bg-white shadow-md overflow-hidden">
509+
<h3 class="text-lg font-semibold p-5 border-b border-[#E2E8F0]">Other Partner Types</h3>
510+
<div class="overflow-x-auto">${otherTable}</div>
511+
</div>
512+
`;
513+
}
488514
document.addEventListener("DOMContentLoaded", () => {
489515
render();
490516
});

0 commit comments

Comments
 (0)