diff --git a/docs/ai-policy.md b/docs/ai-policy.md index 20458c34e78b4..e94aaed7c8bd9 100644 --- a/docs/ai-policy.md +++ b/docs/ai-policy.md @@ -2,15 +2,15 @@ id: ai-policy title: AI Usage Policy description: Guidelines for the responsible use of AI tools in the SailPoint Developer Community. -slug: ai-policy +slug: /ai-policy +displayed_sidebar: communityPoliciesSidebar +hide_table_of_contents: false unlisted: true custom_edit_url: null toc_min_heading_level: 2 toc_max_heading_level: 2 --- - - ## Purpose The SailPoint Community welcomes the responsible use of AI tools as part of the learning and problem-solving process. This policy establishes clear guidelines to ensure AI-generated content maintains the quality, accuracy, and educational value our community is known for. diff --git a/docs/community-code-of-conduct.md b/docs/community-code-of-conduct.md new file mode 100644 index 0000000000000..667a249688777 --- /dev/null +++ b/docs/community-code-of-conduct.md @@ -0,0 +1,160 @@ +--- +id: community-code-of-conduct +title: Community Code of Conduct +description: Standards and expectations for all members of the SailPoint Developer Community. +slug: /community-code-of-conduct +displayed_sidebar: communityPoliciesSidebar +unlisted: true +custom_edit_url: null +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + + + +## Our commitment + +The SailPoint Community is dedicated to providing a welcoming, inclusive, and harassment-free experience for everyone. We are committed to fostering an environment where questions are met with helpful responses, knowledge is shared openly, diverse perspectives are respected, and technical excellence is celebrated — regardless of age, disability, ethnicity, gender identity, level of experience, nationality, race, religion, or sexual orientation. + +By participating, you agree to uphold the standards in this document. + +## Scope + +This Code of Conduct applies to all members of the SailPoint Developer Community, including: + +- Community members +- Ambassadors and Expert Ambassadors +- SailPoint employees participating in community discussions +- Partner representatives +- Any person posting content in community forums including chat + +--- + +## Expected behavior + +**Respectful** +- Treat everyone with courtesy and professionalism +- Assume good intent and disagree constructively +- Use welcoming, inclusive language + +**Helpful** +- Share knowledge generously and guide newcomers patiently +- Acknowledge when you don't know something +- Point people to relevant resources +- Give credit for others' contributions and celebrate community successes + +**Diligent** +- Search before posting — check docs, knowledge base, and existing threads +- Provide context, version info, and what you've already tried +- Test solutions before sharing them +- Follow up when a solution works (or doesn't) + +**Professional** +- Keep discussions on-topic +- Avoid spam, unsolicited self-promotion, or commercial solicitation +- Represent yourself and your organization honestly + +## Unacceptable behavior + +The following are prohibited: + +- Harassment, discrimination, or offensive comments of any kind +- Sexual attention, personal attacks, or threats +- Doxxing or publishing private information without consent +- Spam, flooding, or deliberate derailment of discussions +- Plagiarism or misrepresenting others' work +- Sharing false, misleading, or unverified technical information +- Manipulating community systems +- Malicious code, phishing, or social engineering +- Content that violates laws or regulations +- Impersonating others or creating duplicate accounts +- Using "SailPoint" in your username or display name — this applies to all members, including SailPoint employees (official employees are identified by their SailPoint badge, not their username) +- Using a username or display name that impersonates a SailPoint product, team, or official account + +--- + +## Posting guidelines + +Before posting, search existing discussions and check SailPoint documentation and the [AI Usage Policy](/docs/ai-policy). When you do post: + +**Do:** +- Write a clear, specific title that describes the actual problem +- Include product name, version, what you've tried, and relevant error messages +- Format code using markdown code blocks and remove any sensitive data +- Post in the correct category with helpful tags + +**Don't:** +- Share credentials, API keys, customer data, or PII +- Post entire customer implementations or NDA-covered configurations +- Request that others do your work for free +- Post off-topic, political, religious, or inflammatory content +- Advertise or promote services outside of designated categories + +## Respectful disagreement + +Technical discussions often involve differing opinions — that's healthy. Focus on ideas, not people. Explain your reasoning, acknowledge valid points, and be willing to be convinced. Avoid dismissive language ("just Google it"), personal attacks, or continuing to argue after an impasse. + +## Community roles + +| Role | Description | +|---|---| +| **Member** | All registered community participants. Can ask questions, provide answers, and engage in discussions. | +| **Ambassador** | Recognized contributors who consistently provide high-quality assistance. Subject to the [Ambassador Code of Conduct](#). | +| **Expert Ambassador** | Top-tier contributors with proven deep expertise. Additional privileges and responsibilities per the Ambassador Code of Conduct. | +| **SailPoint Employee** | Identified by SailPoint badge. Moderate discussions, provide official guidance, and escalate issues internally. | + +## Reporting violations + +| Type | How to report | +|---|---| +| General violations | Use the "Report" flag on any post — moderators review within 2 business days | +| Private concerns | Email [developer-relations@sailpoint.com](mailto:developer-relations@sailpoint.com) or message @developer_relations_team on the forum | +| Moderator issues | *Escalation email TBD* | + +Reports are kept confidential. Retaliation against reporters is prohibited. Reporters receive confirmation their report was received. + +## Enforcement + +We believe in education first, but repeat violations will result in escalating consequences. + +**1st violation — Reminder** +- Friendly reminder via private message +- Post edited or hidden with explanation +- No formal warning on record + +**2nd violation — Warning** +- Official warning sent +- Formal acknowledgment of Community Code of Conduct required + +**3rd violation — Ban** +- Permanent posting ban +- Account converted to read-only +- Removal from Ambassador program if applicable + +Some behaviors result in an **immediate permanent ban**, regardless of prior history: + +- Harassment, hate speech, or targeted abuse +- Doxxing or sharing another person's private information +- Posting malicious code or security exploits +- Coordinated manipulation, fraud, or sock-puppet accounts +- Illegal activity + +--- + +## Appeals & reinstatement + +Any enforcement action of the 2nd violation or above may be appealed within 14 days. Email [community-appeals@sailpoint.com](mailto:community-appeals@sailpoint.com) with your perspective and any relevant context. DevRel leadership reviews within 5 business days — one appeal per incident, decision is final. + +Temporary bans are automatically lifted after the suspension period. Permanent bans may be petitioned for reconsideration after 1 year with demonstrated reform. + +--- + +## Questions & updates + +**Questions:** Post in the Community Feedback category on the forum. + +**Updates:** This policy is reviewed annually. Changes are communicated via community announcements. + +--- + +*Thank you for being part of the SailPoint Community. Together, we're building the most helpful, knowledgeable, and welcoming identity governance community in the industry.* diff --git a/docs/community-policies.md b/docs/community-policies.md new file mode 100644 index 0000000000000..795e38ea4d09a --- /dev/null +++ b/docs/community-policies.md @@ -0,0 +1,18 @@ +--- +id: community-policies +title: Community policies +description: The SailPoint Community operates under three complementary policy documents designed to maintain quality, foster collaboration, and ensure professional conduct. +slug: /community-policies +displayed_sidebar: communityPoliciesSidebar +unlisted: true +custom_edit_url: null +hide_table_of_contents: true +--- + + + +## How our community guidelines work together + +The SailPoint Community operates under three complementary policy documents designed to maintain quality, foster collaboration, and ensure professional conduct. **All community members** must follow the [AI Usage Policy](/docs/ai-policy) and [Community Code of Conduct](/docs/community-code-of-conduct), which establish baseline standards for content quality, respectful behavior, and responsible use of AI tools. The AI Usage Policy specifically requires disclosure, validation, and value-add when using AI assistance, while the Community Code of Conduct outlines expectations for professional interaction, quality posting standards, and consequences for violations. + +**Ambassadors** and **Expert Ambassadors** are held to additional standards outlined in the Ambassador Code of Conduct, which supplements both the community-wide policies and the legally binding Ambassador Program Agreement. As community leaders with access to confidential information, early product releases, and enhanced privileges, Ambassadors must exemplify the highest standards of conduct, protect SailPoint's confidential information, follow brand guidelines, and serve as role models for the broader community. These tiered policies work together to create a professional, trustworthy environment where everyone can learn and contribute while ensuring those with elevated status and access uphold correspondingly higher responsibilities. diff --git a/docs/event-code-of-conduct.md b/docs/event-code-of-conduct.md new file mode 100644 index 0000000000000..454d7cc029e16 --- /dev/null +++ b/docs/event-code-of-conduct.md @@ -0,0 +1,119 @@ +--- +id: event-code-of-conduct +title: Event Code of Conduct +description: Standards and expectations for all participants at SailPoint Developer Community events. +slug: /event-code-of-conduct +displayed_sidebar: communityPoliciesSidebar +unlisted: true +custom_edit_url: null +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + + + +## Our commitment + +SailPoint is committed to providing safe, welcoming, and inclusive events for everyone. This Code of Conduct applies to all participants — attendees, speakers, sponsors, volunteers, and SailPoint staff — at any SailPoint Developer Community event. By participating, you agree to uphold the standards in this document. + +## Scope + +This Code of Conduct applies to: + +- SailPoint Developer Days (in-person and virtual) +- Community live streams and webinars +- Ambassador summits and roundtables +- SailPoint-sponsored meetups and conferences +- Any event organized by or affiliated with the SailPoint Community team + +It covers all event spaces — physical venues, virtual platforms, side events, social gatherings, and online channels used during the event. + +--- + +## Expected behavior + +- Be respectful and professional toward all attendees, speakers, sponsors, and staff +- Use welcoming, inclusive language — assume good intent +- Engage constructively with content and questions — challenge ideas, not people +- Respect others' time, attention, and personal space +- Follow instructions from event organizers and moderators +- Respect that sessions may be recorded — behave accordingly + +## Unacceptable behavior + +- Harassment, intimidation, or discrimination of any kind +- Offensive, sexist, racist, or otherwise exclusionary comments or jokes +- Unwelcome physical contact or sexual attention +- Deliberate disruption of sessions, talks, or networking +- Photography or recording of attendees without consent +- Sustained interruption of speakers or Q&A sessions +- Sharing confidential session content without permission +- Intoxicated or disruptive behavior +- Misrepresenting your affiliation or credentials + +--- + +## Virtual event guidelines + +For online events, the following additional expectations apply: + +- Keep your display name accurate and professional +- Mute yourself when not speaking +- Don't share session links, recordings, or materials without explicit permission +- Chat and reactions should follow the same standards as verbal communication +- Respect the session format — save questions for designated Q&A time +- Don't use virtual backgrounds or display images that could be offensive + +--- + +## Reporting an incident + +If you experience or witness a Code of Conduct violation during an event, please report it as soon as possible. All reports are taken seriously and handled confidentially. + +| Situation | How to report | +|---|---| +| During an in-person event | Speak directly with any SailPoint staff member or event organizer | +| During a virtual event | Message a moderator directly in the event platform, or email below | +| After an event | Email [developer-relations@sailpoint.com](mailto:developer-relations@sailpoint.com) with details of the incident | + +Reporters will not face retaliation. Anonymous reports are accepted for serious concerns. + +## Enforcement + +We believe in education first, but repeat incidents will result in escalating consequences. + +**1st incident — Warning** +- Private warning from event staff +- You'll be asked to adjust your behavior to continue participating + +**2nd incident — Session removal** +- Removal from the session or activity +- Remainder of the event may continue with conditions + +**3rd incident — Event removal** +- Removal from the event +- May affect eligibility for future SailPoint events +- Possible community ban + +Some behaviors result in **immediate removal from the event**, regardless of prior history: + +- Harassment, physical contact, or threats of any kind +- Hate speech or discriminatory behavior +- Sharing or distributing content that violates these standards +- Illegal activity + +--- + +## Speakers & sponsors + +Speakers and sponsors are also subject to this Code of Conduct. Presentations, demos, and sponsored content should not contain material that violates these standards. SailPoint reserves the right to ask speakers or sponsors to modify content that is offensive, exclusionary, or otherwise inappropriate. + +--- + +## Questions? + +Email [developer-relations@sailpoint.com](mailto:developer-relations@sailpoint.com) + +--- + +*Thank you for helping make SailPoint events welcoming for everyone.* diff --git a/navbar.ts b/navbar.ts index 6db2fb3d06ca0..b812d175e8236 100644 --- a/navbar.ts +++ b/navbar.ts @@ -45,10 +45,10 @@ const navbarConfig = { position: 'left', items: [ { label: 'Developer forum', to: 'https://developer.sailpoint.com/discuss/' }, - { label: 'AI Policy', to: '/docs/ai-policy' }, { label: 'CoLab marketplace', to: '/colab' }, { label: 'Developer blog', to: '/blog' }, { label: 'Ambassador program', to: '/ambassadors' }, + { label: 'Community policies', to: '/docs/community-policies' }, ], }, { diff --git a/sidebars.ts b/sidebars.ts index 65a5efc37f02b..02f490854e782 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -462,6 +462,21 @@ const sidebars: SidebarsConfig = { items: require('./docs/api/v3/sidebar.ts'), }, ], + + communityPoliciesSidebar: [ + { + type: 'category', + label: 'Community policies', + collapsible: false, + link: { type: 'doc', id: 'community-policies' }, + items: [ + { type: 'doc', id: 'community-policies', label: 'Overview' }, + { type: 'doc', id: 'ai-policy', label: 'AI Usage Policy' }, + { type: 'doc', id: 'community-code-of-conduct', label: 'Community Code of Conduct' }, + { type: 'doc', id: 'event-code-of-conduct', label: 'Event Code of Conduct' }, + ], + }, + ], }; export default sidebars; diff --git a/src/components/ambassador/AmbassadorCards/index.tsx b/src/components/ambassador/AmbassadorCards/index.tsx index 26874e3cea48d..273da41d7b879 100644 --- a/src/components/ambassador/AmbassadorCards/index.tsx +++ b/src/components/ambassador/AmbassadorCards/index.tsx @@ -13,6 +13,7 @@ import { // Define types for the component props interface AmbassadorCardsProps { expert: boolean; + limit?: number; } // Define types for an ambassador member @@ -60,7 +61,7 @@ interface AmbassadorData { points?: number; } -const AmbassadorCards: React.FC = ({ expert }) => { +const AmbassadorCards: React.FC = ({ expert, limit }) => { const [cardData, setCardData] = useState(); const [loadingCards, setLoadingCards] = useState(true); @@ -124,7 +125,7 @@ const AmbassadorCards: React.FC = ({ expert }) => { return (
- {cardData.map((a) => ( + {(limit ? cardData.slice(0, limit) : cardData).map((a) => ( ))}
diff --git a/src/css/custom.css b/src/css/custom.css index 0d5fd2e63b077..a0b78c8b6dd48 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -878,6 +878,12 @@ article:has(.ai-policy-page-marker) footer, .docItemContainer:has(#ai-policy-page) .theme-last-updated, article:has(#ai-policy-page) .theme-last-updated, .docItemContainer:has(.ai-policy-page-marker) .theme-last-updated, -article:has(.ai-policy-page-marker) .theme-last-updated { +article:has(.ai-policy-page-marker) .theme-last-updated, +article:has(.community-policy-page) .theme-last-updated, +article:has(.community-policy-page) footer { + display: none !important; +} + +.theme-unlisted-banner { display: none !important; } diff --git a/src/pages/ambassador.module.css b/src/pages/ambassador.module.css index 19d0524a78d91..40ea8334bf567 100644 --- a/src/pages/ambassador.module.css +++ b/src/pages/ambassador.module.css @@ -1,132 +1,363 @@ -.gridContainer { - display: grid; - place-content: center; - grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); - grid-gap: 40px; - margin-left: 40px; - margin-right: 40px; +/* ── True black background in dark mode (hero only) ────────────────────────── */ +[data-theme='dark'] .heroWrapper { + background-color: #000000; +} + +[data-theme='light'] .heroWrapper { + background-color: var(--ifm-background-color); + border-bottom: 1px solid var(--ifm-color-emphasis-200); +} + +/* ── Gradient bar ──────────────────────────────────────────────────────────── */ +.gradientBar { + width: 100%; + height: 45px; + background: linear-gradient(90deg, #EC008C 0%, #00ADDC 50%, #93D500 100%); } -.center { - margin: 50px auto; - max-width: 1000px; +/* ── Hero ──────────────────────────────────────────────────────────────────── */ +.heroWrapper { + width: 100%; } -.headerText { - text-align: center; +.hero { display: flex; - margin: 100px auto 0px auto; - width: calc(100% - 100px); - justify-content: center; + align-items: center; + gap: 48px; + padding: 60px 60px 48px; + max-width: 1100px; + margin: 0 auto; +} + +.heroContent { + flex: 1; } -.headerTextOne { +.heroHeading { + font-size: 28px; + font-weight: 800; color: var(--ifm-color-primary); - font-size: 30px; - font-weight: bold; - line-height: 100%; + line-height: 1.3; + margin-bottom: 14px; } -.spanLeft { - width: 35%; - margin: 14px; - position: relative; - top: -45px; - border-bottom-width: 2px; - border-bottom-style: solid; - border-bottom-color: var(--ifm-color-primary); +.heroBody { + font-size: 17px; + color: var(--dev-text-color-normal); + line-height: 1.7; + margin-bottom: 28px; +} + +.heroCta { + display: inline-block; + padding: 12px 28px; + background-color: var(--ifm-color-secondary); + color: #ffffff !important; + border-radius: 0.25rem; + font-weight: 700; + font-size: 15px; + text-decoration: none !important; + transition: background-color 0.2s, box-shadow 0.2s; + border: 1px solid transparent; +} + +.heroCta:hover { + background-color: var(--ifm-color-secondary-dark); + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.2); + text-decoration: none !important; + color: #ffffff !important; +} + +.heroImage { + width: 280px; + flex-shrink: 0; + object-fit: contain; +} + +[data-theme='light'] .heroImage { + mix-blend-mode: multiply; +} + +[data-theme='dark'] .heroImage { + mix-blend-mode: screen; +} + +@media only screen and (max-width: 900px) { + .hero { + flex-direction: column; + padding: 40px 24px; + } + .heroImage { + width: 100%; + max-width: 480px; + } } -.imageContainer { - text-align: center; +/* ── Sections ──────────────────────────────────────────────────────────────── */ +.section { + padding: 56px 60px; + border-bottom: 1px solid var(--ifm-color-emphasis-200); +} + +.sectionNoBorder { + border-top: none; + border-bottom: none; +} + +.sectionAlt { +} + +.sectionLast { + border-bottom: none; +} + +.sectionInner { + max-width: 1100px; + margin: 0 auto; +} + +.sectionHeading { + font-size: 24px; + font-weight: 700; + color: var(--ifm-color-primary); + margin-bottom: 16px; +} + +.sectionBody { + font-size: 16px; + color: var(--dev-text-color-normal); + line-height: 1.8; + max-width: 820px; + margin-bottom: 24px; +} + +.subHeading { + font-size: 16px; + font-weight: 700; + color: var(--dev-text-color-normal); + margin-bottom: 12px; + margin-top: 8px; +} + +/* ── Qualities list ────────────────────────────────────────────────────────── */ +.qualitiesList { + list-style: disc; + padding-left: 24px; + margin: 0; display: flex; - justify-content: center; + flex-direction: column; + gap: 10px; +} + +.qualitiesItem { + font-size: 15px; + color: var(--dev-text-color-normal); + line-height: 1.6; +} + +/* ── Benefits grid ─────────────────────────────────────────────────────────── */ +.benefitsGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 20px; + margin-top: 8px; +} + +.benefitCard { + background-color: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 0.5rem; + padding: 22px; + transition: border-color 0.2s; +} + +.benefitCard:hover { + border-color: var(--ifm-color-primary); +} + +.benefitTitle { + font-size: 15px; + font-weight: 700; + color: var(--ifm-color-primary); + margin-bottom: 8px; } -.ambassadorImage { - margin-left: 5px; - padding: 20px; - height: 120px; - width: 120px; +[data-theme='dark'] .benefitTitle { + color: #93D500; } -.expertAmbassadorImage { - margin-left: 5px; - height: 120px; - width: 120px; +.benefitDescription { + font-size: 14px; + color: var(--dev-text-color-normal); + line-height: 1.6; } -.ambassadorPurposeContainer { +/* ── Steps ─────────────────────────────────────────────────────────────────── */ +.stepsContainer { + display: flex; + flex-direction: column; + gap: 28px; + margin-bottom: 36px; +} + +.step { + display: flex; + gap: 20px; + align-items: flex-start; +} + +.stepNumber { + font-size: 32px; + font-weight: 900; + color: var(--ifm-color-emphasis-500); + line-height: 1; + min-width: 44px; + flex-shrink: 0; +} + +[data-theme='dark'] .stepNumber { + color: #93D500; +} + +[data-theme='light'] .stepNumber { + color: #93D500; +} + +.stepContent { + flex: 1; + padding-top: 4px; +} + +.stepTitle { + font-size: 16px; + font-weight: 700; + color: var(--dev-text-color-normal); + margin-bottom: 6px; +} + +.stepDescription { + font-size: 15px; + color: var(--dev-text-color-normal); + line-height: 1.6; +} + +/* ── CTA row ───────────────────────────────────────────────────────────────── */ +.ctaRow { + display: flex; + flex-direction: column; + gap: 20px; +} + +.policyLinks { display: flex; - justify-content: center; - width: calc(75% + 75px); align-items: center; - margin: 0px auto 0px auto; + gap: 16px; + flex-wrap: wrap; } -.ambassadorPurposeText { - font-size: 21px; - padding: 50px 0px 50px 50px; - font-weight: 500; +.policyLabel { + font-size: 13px; color: var(--dev-text-color-normal); } -.ambassadorPurposeImage { - width: 40%; - box-shadow: var(--dev-card-selected); - border-radius: 0.25em; - margin: 50px 50px 50px 0px; +.policyLink { + font-size: 13px; + color: var(--link-color) !important; + text-decoration: underline !important; + text-underline-offset: 3px; } -@media only screen and (max-width: 1460px) { - .ambassadorPurposeContainer { - flex-direction: column; - } - .ambassadorPurposeImage { - width: 80%; - margin: 50px 50px 50px 50px; - } - .ambassadorPurposeText { - padding: 50px 50px 50px 50px; - } +.policyLink:hover { + color: var(--ifm-color-primary) !important; } -.button:hover { - cursor: pointer; - top: -2px; - box-shadow: 0 4px 5px rgba(0, 0, 0, 0.2); +.applyBtn { + display: inline-block; + width: fit-content; + padding: 12px 28px; + background-color: var(--ifm-color-secondary); + color: #ffffff !important; + border-radius: 0.25rem; + font-weight: 700; + font-size: 15px; + text-decoration: none !important; + border: 1px solid transparent; + transition: background-color 0.2s, box-shadow 0.2s; +} + +.applyBtn:hover { background-color: var(--ifm-color-secondary-dark); - color: #ffffff; - text-decoration: none; + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.2); + text-decoration: none !important; + color: #ffffff !important; +} + +/* ── Ambassador card sections ──────────────────────────────────────────────── */ +.cardSectionHeader { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 0; } -.button { - text-decoration: none; - text-align: center; - margin: 30px auto; - font-size: 20px; +.cardSectionTitle { + color: var(--ifm-color-primary); + font-size: 26px; font-weight: bold; - line-height: 100%; + white-space: nowrap; + margin: 0 16px; +} - /* Layout Properties */ - width: 314px; - height: 61px; - line-height: 61px; - /* UI Properties */ - background: transparent 0% 0% no-repeat padding-box; - opacity: 1; +.spanLeft { + flex: 1; + height: 2px; + background-color: var(--ifm-color-primary); + opacity: 0.3; +} - box-shadow: 0px 20px 60px #00000015; - border: 1px solid transparent; - border-radius: .25rem; - transition: all 0.3s; +.cardSectionBadge { + display: flex; + justify-content: center; + margin-bottom: 8px; +} + +.badgeImage { + height: 80px; + width: 80px; + object-fit: contain; +} + +.badgeImageLarge { + height: 110px; + width: 110px; + object-fit: contain; +} + +.seeMoreContainer { + display: flex; + justify-content: center; + padding: 24px 0 8px; +} + +.seeMoreBtn { + font-size: 14px; + font-weight: 600; + color: #ffffff !important; background-color: var(--ifm-color-secondary); + border: 2px solid var(--ifm-color-secondary); + border-radius: 0.25rem; + padding: 10px 24px; + text-decoration: none !important; + transition: background-color 0.2s, box-shadow 0.2s; } -.link { - color: #ffffff;; +.seeMoreBtn:hover { + background-color: var(--ifm-color-secondary-dark); + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.2); + color: #ffffff !important; } -.link:hover { - color: #ffffff; - text-decoration: none; + +.ambassadorCardContainer { + margin-top: 8px; + margin-bottom: 20px; } diff --git a/src/pages/ambassadors.tsx b/src/pages/ambassadors.tsx index 74fbd756e66f3..86878f5ba0613 100644 --- a/src/pages/ambassadors.tsx +++ b/src/pages/ambassadors.tsx @@ -1,71 +1,235 @@ import React from 'react'; import Link from '@docusaurus/Link'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; import useBaseUrl from '@docusaurus/useBaseUrl'; +import {useColorMode} from '@docusaurus/theme-common'; import styles from './ambassador.module.css'; import AmbassadorCards from '../components/ambassador/AmbassadorCards'; -const Ambassador: React.FC = () => { - const { siteConfig } = useDocusaurusContext(); +const benefits = [ + { + title: 'Recognition & badge', + description: + 'Receive an exclusive Ambassador badge displayed on your community profile, signaling your expertise to peers across the SailPoint ecosystem.', + }, + { + title: 'Early access', + description: + 'Get early previews of new SailPoint developer features, APIs, and tooling before they reach general availability.', + }, + { + title: 'Direct product access', + description: + 'Gain a direct line to SailPoint product and the Developer Relations teams — your feedback shapes the product roadmap.', + }, + { + title: 'Free sandbox tenant', + description: + 'Get access to your own unconfigured Identity Security Cloud test tenant to build and test solutions. Expert Ambassadors receive a pre-configured tenant with access to the latest beta features.', + }, + { + title: 'Exclusive events', + description: + 'Receive invitations to Ambassador-only roundtables, community calls, and developer events throughout the year.', + }, + { + title: 'And more!', + description: + 'Exclusive swag, office hours with the Developer Relations team, and other perks as the program grows.', + }, +]; + +const howToJoinSteps = [ + { + step: '1', + title: 'Be an active member', + description: + 'Consistently contribute to the community — answer questions, share knowledge, and engage with fellow members.', + }, + { + step: '2', + title: 'Demonstrate expertise', + description: + 'Show your depth of SailPoint knowledge through accepted solutions, community guides, or technical discussions.', + }, + { + step: '3', + title: 'Apply on the forum', + description: + 'Submit your application via the community forum. The SailPoint team reviews applications on a rolling basis.', + }, +]; + +const AmbassadorContent: React.FC = () => { + const {colorMode} = useColorMode(); + const codeyBust = useBaseUrl( + colorMode === 'dark' + ? '/ambassador/codey-bust-dark.png' + : '/ambassador/codey-bust-light.png' + ); return ( - -
- {/* */} -
+
+ + {/* Gradient bar */} +
+ + {/* Hero */} +
+
+
+

+ Your experience and expertise has the power to empower others. +

+

+ Help us chart the future of identity security. +

+ + Become an Ambassador + +
Ambassador program Banner -
- Our Ambassador program offers not just exclusive benefits but also - an enriching learning experience on SailPoint; it's a journey to - expertise. As an Ambassador, your contributions foster community - growth, enabling knowledge-sharing among experts like you. +
+
+ + {/* What Is the Program */} +
+
+

What is the Ambassador Program?

+

+ The SailPoint Ambassador Program recognizes exceptional community members who go above + and beyond to share knowledge, answer questions, and help others build on the SailPoint platform. + Ambassadors are trusted voices in the community — developers, architects, and identity professionals + who lead by example. There are two tiers: Ambassadors, who are active contributors + making a consistent positive impact, and Expert Ambassadors, who represent the + highest level of community leadership and SailPoint expertise. +

+

A SailPoint Ambassador is someone who:

+
    + {[ + 'Actively contributes by answering questions and sharing knowledge with the community', + 'Is passionate about identity security and SailPoint technologies', + 'Leads by example and helps newcomers find their footing', + 'Brings a positive, collaborative attitude to every interaction', + 'Is eager to grow and share their expertise with others', + ].map((item) => ( +
  • {item}
  • + ))} +
+
+
+ + {/* Benefits */} +
+
+

Program benefits

+
+ {benefits.map((benefit) => ( +
+
{benefit.title}
+
{benefit.description}
+
+ ))} +
+
+
+ + {/* Path to Ambassador */} +
+
+

Your path to becoming an Ambassador

+
+ {howToJoinSteps.map((s) => ( +
+
{s.step}
+
+
{s.title}
+
{s.description}
+
+
+ ))} +
+
+ -
Become an Ambassador
+ Apply now
-
-
Expert Ambassadors
-
-
-
- Expert Ambassador Icon -
-
-
- -
-
-
Ambassadors
-
-
-
- Ambassador Icon -
+
+ + {/* Expert Ambassador Cards */} +
+
+
+ Expert Ambassador badge +
+
+
+
Expert Ambassadors
+
+
+
+ +
+
+
-
- + {/* Ambassador Cards */} +
+
+
+ Ambassador badge +
+
+
+
Ambassadors
+
+
+
+ +
+
-
- +
+ +
); }; +const Ambassador: React.FC = () => ( + + + +); + export default Ambassador; diff --git a/static/ambassador/codey-bust-dark.png b/static/ambassador/codey-bust-dark.png new file mode 100644 index 0000000000000..76ba15b498eea Binary files /dev/null and b/static/ambassador/codey-bust-dark.png differ diff --git a/static/ambassador/codey-bust-light.png b/static/ambassador/codey-bust-light.png new file mode 100644 index 0000000000000..3c86460f9a2eb Binary files /dev/null and b/static/ambassador/codey-bust-light.png differ diff --git a/static/ambassador/codey-bust.png b/static/ambassador/codey-bust.png new file mode 100644 index 0000000000000..1d4d3a151a9f5 Binary files /dev/null and b/static/ambassador/codey-bust.png differ diff --git a/static/icons/AmbBadge.png b/static/icons/AmbBadge.png new file mode 100644 index 0000000000000..59a84f75ba31f Binary files /dev/null and b/static/icons/AmbBadge.png differ diff --git a/static/icons/ExpBadge.png b/static/icons/ExpBadge.png new file mode 100644 index 0000000000000..976e07c3d3be6 Binary files /dev/null and b/static/icons/ExpBadge.png differ