967 lines
32 KiB
Python
967 lines
32 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generate CCG26 Sponsorship Package in multiple formats:
|
|
- HTML (styled)
|
|
- PDF (via weasyprint)
|
|
- PPTX (PowerPoint)
|
|
"""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
# For PDF
|
|
from weasyprint import HTML, CSS
|
|
|
|
# For PowerPoint
|
|
from pptx import Presentation
|
|
from pptx.util import Inches, Pt
|
|
from pptx.dml.color import RGBColor
|
|
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
|
|
from pptx.enum.shapes import MSO_SHAPE
|
|
|
|
# Output directory
|
|
OUTPUT_DIR = Path("/home/jeffe/Github/crypto-commons-gather.ing-website")
|
|
|
|
# Brand colors
|
|
PRIMARY_COLOR = RGBColor(34, 139, 34) # Forest green
|
|
DARK_COLOR = RGBColor(30, 30, 30)
|
|
LIGHT_COLOR = RGBColor(250, 250, 250)
|
|
ACCENT_COLOR = RGBColor(139, 90, 43) # Earth brown
|
|
|
|
|
|
def create_html_and_pdf():
|
|
"""Create styled HTML and PDF versions of the sponsorship package."""
|
|
|
|
html_content = """
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>CCG 2026 Sponsorship Package</title>
|
|
<style>
|
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');
|
|
|
|
:root {
|
|
--primary: #228B22;
|
|
--primary-light: #32CD32;
|
|
--dark: #1e1e1e;
|
|
--light: #fafafa;
|
|
--accent: #8B5A2B;
|
|
--muted: #666;
|
|
}
|
|
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
line-height: 1.6;
|
|
color: var(--dark);
|
|
font-size: 11pt;
|
|
}
|
|
|
|
.page {
|
|
padding: 40px 50px;
|
|
max-width: 800px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.cover {
|
|
height: 100vh;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
text-align: center;
|
|
background: linear-gradient(135deg, var(--primary) 0%, #1a5f1a 100%);
|
|
color: white;
|
|
page-break-after: always;
|
|
padding: 60px;
|
|
}
|
|
|
|
.cover h1 {
|
|
font-size: 42pt;
|
|
font-weight: 800;
|
|
margin-bottom: 10px;
|
|
letter-spacing: -1px;
|
|
}
|
|
|
|
.cover h2 {
|
|
font-size: 24pt;
|
|
font-weight: 500;
|
|
margin-bottom: 40px;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
.cover .tagline {
|
|
font-size: 14pt;
|
|
font-style: italic;
|
|
opacity: 0.85;
|
|
max-width: 500px;
|
|
margin-bottom: 60px;
|
|
}
|
|
|
|
.cover .details {
|
|
font-size: 12pt;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
.cover .details p {
|
|
margin: 5px 0;
|
|
}
|
|
|
|
h1 {
|
|
font-size: 24pt;
|
|
font-weight: 700;
|
|
color: var(--primary);
|
|
margin-bottom: 20px;
|
|
padding-bottom: 10px;
|
|
border-bottom: 3px solid var(--primary);
|
|
}
|
|
|
|
h2 {
|
|
font-size: 16pt;
|
|
font-weight: 600;
|
|
color: var(--dark);
|
|
margin-top: 30px;
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
h3 {
|
|
font-size: 13pt;
|
|
font-weight: 600;
|
|
color: var(--accent);
|
|
margin-top: 20px;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
p {
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
ul, ol {
|
|
margin-left: 20px;
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
li {
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 20px 0;
|
|
font-size: 10pt;
|
|
}
|
|
|
|
th {
|
|
background: var(--primary);
|
|
color: white;
|
|
padding: 12px 15px;
|
|
text-align: left;
|
|
font-weight: 600;
|
|
}
|
|
|
|
td {
|
|
padding: 10px 15px;
|
|
border-bottom: 1px solid #ddd;
|
|
}
|
|
|
|
tr:nth-child(even) {
|
|
background: #f9f9f9;
|
|
}
|
|
|
|
.tier-box {
|
|
border: 2px solid var(--primary);
|
|
border-radius: 8px;
|
|
padding: 20px;
|
|
margin: 20px 0;
|
|
page-break-inside: avoid;
|
|
}
|
|
|
|
.tier-box h3 {
|
|
color: var(--primary);
|
|
margin-top: 0;
|
|
font-size: 14pt;
|
|
}
|
|
|
|
.tier-box .price {
|
|
font-size: 20pt;
|
|
font-weight: 700;
|
|
color: var(--dark);
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
.highlight-box {
|
|
background: #f0f9f0;
|
|
border-left: 4px solid var(--primary);
|
|
padding: 15px 20px;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.stat-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 15px;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.stat-box {
|
|
text-align: center;
|
|
padding: 20px;
|
|
background: var(--light);
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.stat-box .number {
|
|
font-size: 28pt;
|
|
font-weight: 700;
|
|
color: var(--primary);
|
|
}
|
|
|
|
.stat-box .label {
|
|
font-size: 10pt;
|
|
color: var(--muted);
|
|
}
|
|
|
|
.quote {
|
|
font-style: italic;
|
|
padding: 15px 25px;
|
|
border-left: 3px solid var(--accent);
|
|
margin: 20px 0;
|
|
color: var(--muted);
|
|
}
|
|
|
|
.quote cite {
|
|
display: block;
|
|
margin-top: 10px;
|
|
font-style: normal;
|
|
font-weight: 600;
|
|
color: var(--dark);
|
|
}
|
|
|
|
.page-break {
|
|
page-break-after: always;
|
|
}
|
|
|
|
.footer {
|
|
margin-top: 40px;
|
|
padding-top: 20px;
|
|
border-top: 1px solid #ddd;
|
|
text-align: center;
|
|
font-size: 9pt;
|
|
color: var(--muted);
|
|
}
|
|
|
|
@page {
|
|
size: A4;
|
|
margin: 0;
|
|
}
|
|
|
|
@page :not(:first) {
|
|
margin: 20mm 15mm;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<!-- Cover Page -->
|
|
<div class="cover">
|
|
<h1>Crypto Commons<br>Gathering 2026</h1>
|
|
<h2>Sponsorship Package</h2>
|
|
<p class="tagline">"A recurring temporary refuge from late-capitalism"</p>
|
|
<div class="details">
|
|
<p><strong>August 16-22, 2026</strong></p>
|
|
<p>Commons Hub, Austrian Alps</p>
|
|
<p>6th Annual Edition</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Executive Summary -->
|
|
<div class="page">
|
|
<h1>Executive Summary</h1>
|
|
|
|
<p>The <strong>Crypto Commons Gathering (CCG)</strong> is an annual week-long retreat where genuine desire for postcapitalist change meets blockchain innovation, commons building, and radical imagination.</p>
|
|
|
|
<p>Now in its <strong>6th edition</strong>, CCG has established itself as the premier gathering for builders, researchers, and activists working at the intersection of crypto, regenerative finance, and cooperative economics.</p>
|
|
|
|
<div class="stat-grid">
|
|
<div class="stat-box">
|
|
<div class="number">100+</div>
|
|
<div class="label">Participants</div>
|
|
</div>
|
|
<div class="stat-box">
|
|
<div class="number">6</div>
|
|
<div class="label">Years Running</div>
|
|
</div>
|
|
<div class="stat-box">
|
|
<div class="number">20+</div>
|
|
<div class="label">Countries</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h2>At a Glance</h2>
|
|
<table>
|
|
<tr><td><strong>Dates</strong></td><td>August 16-22, 2026</td></tr>
|
|
<tr><td><strong>Location</strong></td><td>Commons Hub, Reichenau an der Rax, Austrian Alps</td></tr>
|
|
<tr><td><strong>Format</strong></td><td>Week-long unconference retreat</td></tr>
|
|
<tr><td><strong>Organizers</strong></td><td>Crypto Commons Association & Commons Hub</td></tr>
|
|
</table>
|
|
|
|
<h2>Movements Born at CCG</h2>
|
|
<ul>
|
|
<li><strong>#CoFi (Cooperative Finance)</strong> — Redefining collaborative financial infrastructure</li>
|
|
<li><strong>#MycoFi (Mycelial Finance)</strong> — Biomimetic approaches to economic design</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="page-break"></div>
|
|
|
|
<!-- Why Sponsor -->
|
|
<div class="page">
|
|
<h1>Why Sponsor CCG 2026?</h1>
|
|
|
|
<h2>1. Reach Influential Builders & Thought Leaders</h2>
|
|
<p>CCG attracts a unique, highly engaged audience:</p>
|
|
<ul>
|
|
<li><strong>ReFi & DeFi Builders</strong> — Teams from Regen Network, EthicHub, Circles UBI, ReFi DAO</li>
|
|
<li><strong>Governance Innovators</strong> — Contributors to Holochain, Economic Space Agency, DAOs</li>
|
|
<li><strong>Academic Researchers</strong> — PhD researchers, professors, and policy experts</li>
|
|
<li><strong>Artists & Game Designers</strong> — Solarpunk creators, economic worldbuilders</li>
|
|
<li><strong>Activists & Organizers</strong> — Cooperative founders, commons practitioners</li>
|
|
</ul>
|
|
|
|
<h2>2. Values-Aligned Audience</h2>
|
|
<p>CCG attendees aren't casual observers—they're committed builders who:</p>
|
|
<ul>
|
|
<li>Lead projects with <strong>real traction</strong> in ReFi, DAOs, and cooperative economics</li>
|
|
<li>Make <strong>purchasing decisions</strong> for their organizations</li>
|
|
<li><strong>Influence discourse</strong> in crypto-commons and regenerative communities</li>
|
|
<li>Seek <strong>genuine partnerships</strong> over superficial marketing</li>
|
|
</ul>
|
|
|
|
<h2>3. Six Years of Trust & Credibility</h2>
|
|
<div class="highlight-box">
|
|
<ul>
|
|
<li><strong>Complete financial transparency</strong> — Full budget breakdowns published publicly</li>
|
|
<li><strong>Non-extractive economics</strong> — Organizers cover their own expenses</li>
|
|
<li><strong>Participant-driven format</strong> — Authentic community co-creation</li>
|
|
<li><strong>Long-term relationships</strong> — ~40% of attendees return year after year</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="page-break"></div>
|
|
|
|
<!-- Audience Profile -->
|
|
<div class="page">
|
|
<h1>Audience Profile</h1>
|
|
|
|
<h2>Who Attends CCG?</h2>
|
|
<table>
|
|
<tr>
|
|
<th>Segment</th>
|
|
<th>%</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Builders & Developers</td>
|
|
<td>35%</td>
|
|
<td>Protocol engineers, smart contract devs, infrastructure builders</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Researchers & Academics</td>
|
|
<td>25%</td>
|
|
<td>PhD students, professors, think tank members</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Artists & Designers</td>
|
|
<td>15%</td>
|
|
<td>Game designers, solarpunk creators, UX/UI specialists</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Activists & Organizers</td>
|
|
<td>15%</td>
|
|
<td>Cooperative founders, community organizers, policy advocates</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Investors & Funders</td>
|
|
<td>10%</td>
|
|
<td>Impact investors, grant makers, ecosystem funders</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h2>Attendee Interests</h2>
|
|
<ul>
|
|
<li>Regenerative Finance (ReFi)</li>
|
|
<li>Decentralized Governance & DAOs</li>
|
|
<li>Cooperative Economics & Mutual Aid</li>
|
|
<li>Commons Theory & Practice</li>
|
|
<li>Degrowth & Post-capitalism</li>
|
|
<li>Solarpunk & Speculative Worldbuilding</li>
|
|
<li>Community Currencies & UBI</li>
|
|
</ul>
|
|
|
|
<h2>Geographic Distribution</h2>
|
|
<table>
|
|
<tr><td>Europe</td><td>60%</td></tr>
|
|
<tr><td>North America</td><td>20%</td></tr>
|
|
<tr><td>Global South</td><td>15%</td></tr>
|
|
<tr><td>Asia-Pacific</td><td>5%</td></tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="page-break"></div>
|
|
|
|
<!-- Sponsorship Tiers -->
|
|
<div class="page">
|
|
<h1>Sponsorship Tiers</h1>
|
|
|
|
<div class="tier-box">
|
|
<h3>MYCELIUM PARTNER</h3>
|
|
<div class="price">€10,000</div>
|
|
<p><em>Become part of the CCG ecosystem</em></p>
|
|
|
|
<p><strong>Recognition & Visibility</strong></p>
|
|
<ul>
|
|
<li>Logo placement on website hero section and all pages</li>
|
|
<li>Featured sponsor section on event materials</li>
|
|
<li>Acknowledgment at opening and closing ceremonies</li>
|
|
<li>Social media recognition across all CCG channels</li>
|
|
</ul>
|
|
|
|
<p><strong>Engagement</strong></p>
|
|
<ul>
|
|
<li><strong>4 complimentary full-access passes</strong> (€600 value)</li>
|
|
<li>Dedicated 60-minute sponsored session slot</li>
|
|
<li>Private dinner with CCG organizers and community leaders</li>
|
|
<li>First access to participant list for networking</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="tier-box">
|
|
<h3>SPORE PARTNER</h3>
|
|
<div class="price">€5,000</div>
|
|
<p><em>Plant seeds for regenerative futures</em></p>
|
|
<ul>
|
|
<li><strong>2 complimentary full-access passes</strong></li>
|
|
<li>30-minute workshop or presentation slot</li>
|
|
<li>Logo on website and event signage</li>
|
|
<li>Social media recognition</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="tier-box">
|
|
<h3>SYMBIONT SUPPORTER</h3>
|
|
<div class="price">€2,500</div>
|
|
<p><em>Support commons-building infrastructure</em></p>
|
|
<ul>
|
|
<li><strong>1 complimentary full-access pass</strong></li>
|
|
<li>Logo on website and event signage</li>
|
|
<li>Social media mention</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="tier-box">
|
|
<h3>FRIEND OF THE COMMONS</h3>
|
|
<div class="price">€1,000</div>
|
|
<p><em>Show solidarity with the movement</em></p>
|
|
<ul>
|
|
<li>Name/logo listed on website</li>
|
|
<li>Social media thank-you</li>
|
|
<li>1 discounted pass (50% off)</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="page-break"></div>
|
|
|
|
<!-- Alternative Partnerships -->
|
|
<div class="page">
|
|
<h1>Alternative Partnership Opportunities</h1>
|
|
|
|
<p>Beyond financial sponsorship, we welcome in-kind contributions and creative partnerships:</p>
|
|
|
|
<h3>Track Sponsorship | Custom</h3>
|
|
<p>Sponsor a specific theme track (e.g., "Regenerative Finance Day") with naming rights and session curation involvement.</p>
|
|
|
|
<h3>Accommodation Sponsorship | ~€3,000-5,000</h3>
|
|
<p>Cover accommodation costs for participants who need financial support, enabling broader access.</p>
|
|
|
|
<h3>Meal Sponsorship | ~€2,000-4,000</h3>
|
|
<p>Sponsor catered meals for a day or the entire event—your name becomes synonymous with nourishment and community care.</p>
|
|
|
|
<h3>Documentation Sponsorship | ~€1,500</h3>
|
|
<p>Support professional documentation (photography, videography, written summaries) with credit and content rights.</p>
|
|
|
|
<h3>Travel Grants | Custom</h3>
|
|
<p>Fund travel scholarships for participants from underrepresented regions or backgrounds.</p>
|
|
|
|
<h3>Technology Partnership | In-Kind</h3>
|
|
<p>Provide tools, platforms, or infrastructure (livestreaming, collaboration tools, etc.) in exchange for recognition.</p>
|
|
|
|
<h2>Impact Metrics</h2>
|
|
<table>
|
|
<tr><td>Editions held</td><td>5 (2020-2025)</td></tr>
|
|
<tr><td>Total attendees (all editions)</td><td>400+</td></tr>
|
|
<tr><td>Countries represented</td><td>25+</td></tr>
|
|
<tr><td>Projects incubated/catalyzed</td><td>15+</td></tr>
|
|
<tr><td>Active community members</td><td>500+</td></tr>
|
|
<tr><td>Movements spawned</td><td>#CoFi, #MycoFi</td></tr>
|
|
<tr><td>Return attendee rate</td><td>~40%</td></tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="page-break"></div>
|
|
|
|
<!-- What Makes CCG Different -->
|
|
<div class="page">
|
|
<h1>What Makes CCG Different?</h1>
|
|
|
|
<h2>It's Not a Conference—It's a Convivium</h2>
|
|
<p>Unlike traditional crypto events with keynote speakers and expo floors, CCG is:</p>
|
|
<ul>
|
|
<li><strong>Fully participant-driven</strong> — No pre-set agenda; schedule co-created daily</li>
|
|
<li><strong>Deeply relational</strong> — Week-long format enables genuine connection</li>
|
|
<li><strong>Off-grid & intimate</strong> — Mountain retreat setting, away from distractions</li>
|
|
<li><strong>Non-extractive</strong> — Built on commons principles, not corporate incentives</li>
|
|
</ul>
|
|
|
|
<h2>Attendees Contribute, Not Just Consume</h2>
|
|
<p>Everyone who attends CCG joins a <strong>Commons Crew</strong>:</p>
|
|
<ul>
|
|
<li>Kitchen crew</li>
|
|
<li>Cleaning crew</li>
|
|
<li>Documentation crew</li>
|
|
<li>Fire/Water crew</li>
|
|
<li>Atmosphere care crew</li>
|
|
</ul>
|
|
<p>This creates a fundamentally different relationship between participants and the event—one of mutual care and shared responsibility.</p>
|
|
|
|
<h2>Testimonials</h2>
|
|
|
|
<div class="quote">
|
|
"CCG is where I found my people—the ones who actually believe another world is possible and are building it together."
|
|
<cite>— Returning participant, 2024</cite>
|
|
</div>
|
|
|
|
<div class="quote">
|
|
"The ideas I encountered at CCG completely changed how I think about protocol design. It's like nothing else in the crypto space."
|
|
<cite>— ReFi builder, 2023</cite>
|
|
</div>
|
|
|
|
<div class="quote">
|
|
"I came for the unconference, I stayed for the community. Four years later, my closest collaborators are people I met at CCG."
|
|
<cite>— Cooperative founder, 2022</cite>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="page-break"></div>
|
|
|
|
<!-- Contact -->
|
|
<div class="page">
|
|
<h1>Contact & Next Steps</h1>
|
|
|
|
<p>We'd love to discuss how a partnership could work for your organization.</p>
|
|
|
|
<h2>Primary Contact</h2>
|
|
<p><strong>Email:</strong> contact@cryptocommonsgather.ing</p>
|
|
|
|
<h2>Event Website</h2>
|
|
<p>https://cryptocommonsgather.ing</p>
|
|
|
|
<h2>Community</h2>
|
|
<ul>
|
|
<li>Telegram (CCG26): https://t.me/+n5V_wDVKWrk1ZTBh</li>
|
|
<li>Telegram (CCA): https://t.me/+gZjhNaDswIc0ZDg0</li>
|
|
</ul>
|
|
|
|
<h2>Partner Organizations</h2>
|
|
<ul>
|
|
<li>Crypto Commons Association: https://crypto-commons.org</li>
|
|
<li>Commons Hub: https://www.commons-hub.at</li>
|
|
</ul>
|
|
|
|
<h2>Key Dates</h2>
|
|
<table>
|
|
<tr><td><strong>Now</strong></td><td>Sponsorship discussions open</td></tr>
|
|
<tr><td><strong>March 31, 2026</strong></td><td>Early bird registration closes</td></tr>
|
|
<tr><td><strong>June 30, 2026</strong></td><td>Regular registration closes</td></tr>
|
|
<tr><td><strong>August 1, 2026</strong></td><td>Final sponsor deliverables due</td></tr>
|
|
<tr><td><strong>August 16-22, 2026</strong></td><td>CCG 2026</td></tr>
|
|
</table>
|
|
|
|
<div class="highlight-box" style="margin-top: 40px;">
|
|
<p><strong>Join us in the Austrian Alps for a week that might just change how you see what's possible.</strong></p>
|
|
</div>
|
|
|
|
<div class="footer">
|
|
<p>This sponsorship package was prepared by the Crypto Commons Association.</p>
|
|
<p>CCG operates under a Creative Commons ethos—feel free to share this document with aligned partners.</p>
|
|
<p><strong>Last updated: February 2026</strong></p>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
"""
|
|
|
|
# Save HTML
|
|
html_path = OUTPUT_DIR / "CCG26-Sponsorship-Package.html"
|
|
with open(html_path, "w") as f:
|
|
f.write(html_content)
|
|
print(f"Created: {html_path}")
|
|
|
|
# Generate PDF
|
|
pdf_path = OUTPUT_DIR / "CCG26-Sponsorship-Package.pdf"
|
|
HTML(string=html_content).write_pdf(pdf_path)
|
|
print(f"Created: {pdf_path}")
|
|
|
|
return html_path, pdf_path
|
|
|
|
|
|
def create_powerpoint():
|
|
"""Create a PowerPoint presentation for CCG 2026 sponsorship."""
|
|
|
|
prs = Presentation()
|
|
prs.slide_width = Inches(13.333) # 16:9 aspect ratio
|
|
prs.slide_height = Inches(7.5)
|
|
|
|
def add_title_slide(title, subtitle=""):
|
|
slide = prs.slides.add_slide(prs.slide_layouts[6]) # Blank layout
|
|
|
|
# Background
|
|
background = slide.shapes.add_shape(
|
|
MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, prs.slide_height
|
|
)
|
|
background.fill.solid()
|
|
background.fill.fore_color.rgb = PRIMARY_COLOR
|
|
background.line.fill.background()
|
|
|
|
# Title
|
|
title_box = slide.shapes.add_textbox(Inches(0.5), Inches(2.5), Inches(12.333), Inches(1.5))
|
|
tf = title_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = title
|
|
p.font.size = Pt(54)
|
|
p.font.bold = True
|
|
p.font.color.rgb = RGBColor(255, 255, 255)
|
|
p.alignment = PP_ALIGN.CENTER
|
|
|
|
# Subtitle
|
|
if subtitle:
|
|
sub_box = slide.shapes.add_textbox(Inches(0.5), Inches(4.2), Inches(12.333), Inches(1))
|
|
tf = sub_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = subtitle
|
|
p.font.size = Pt(28)
|
|
p.font.color.rgb = RGBColor(255, 255, 255)
|
|
p.alignment = PP_ALIGN.CENTER
|
|
|
|
return slide
|
|
|
|
def add_content_slide(title, content_items, two_column=False):
|
|
slide = prs.slides.add_slide(prs.slide_layouts[6])
|
|
|
|
# Title
|
|
title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(12.333), Inches(0.8))
|
|
tf = title_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = title
|
|
p.font.size = Pt(36)
|
|
p.font.bold = True
|
|
p.font.color.rgb = PRIMARY_COLOR
|
|
|
|
# Underline
|
|
line = slide.shapes.add_shape(
|
|
MSO_SHAPE.RECTANGLE, Inches(0.5), Inches(1.15), Inches(4), Inches(0.05)
|
|
)
|
|
line.fill.solid()
|
|
line.fill.fore_color.rgb = PRIMARY_COLOR
|
|
line.line.fill.background()
|
|
|
|
if two_column and len(content_items) > 1:
|
|
# Left column
|
|
left_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.5), Inches(6), Inches(5.5))
|
|
tf = left_box.text_frame
|
|
tf.word_wrap = True
|
|
for item in content_items[0]:
|
|
p = tf.add_paragraph()
|
|
p.text = f"• {item}"
|
|
p.font.size = Pt(18)
|
|
p.space_after = Pt(10)
|
|
p.font.color.rgb = DARK_COLOR
|
|
|
|
# Right column
|
|
right_box = slide.shapes.add_textbox(Inches(6.833), Inches(1.5), Inches(6), Inches(5.5))
|
|
tf = right_box.text_frame
|
|
tf.word_wrap = True
|
|
for item in content_items[1]:
|
|
p = tf.add_paragraph()
|
|
p.text = f"• {item}"
|
|
p.font.size = Pt(18)
|
|
p.space_after = Pt(10)
|
|
p.font.color.rgb = DARK_COLOR
|
|
else:
|
|
# Single column
|
|
content_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.5), Inches(12.333), Inches(5.5))
|
|
tf = content_box.text_frame
|
|
tf.word_wrap = True
|
|
for item in content_items:
|
|
p = tf.add_paragraph()
|
|
p.text = f"• {item}" if not item.startswith("•") else item
|
|
p.font.size = Pt(20)
|
|
p.space_after = Pt(12)
|
|
p.font.color.rgb = DARK_COLOR
|
|
|
|
return slide
|
|
|
|
def add_stats_slide(title, stats):
|
|
slide = prs.slides.add_slide(prs.slide_layouts[6])
|
|
|
|
# Title
|
|
title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(12.333), Inches(0.8))
|
|
tf = title_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = title
|
|
p.font.size = Pt(36)
|
|
p.font.bold = True
|
|
p.font.color.rgb = PRIMARY_COLOR
|
|
|
|
# Stats boxes
|
|
box_width = 3.5
|
|
start_x = (13.333 - (box_width * len(stats) + 0.5 * (len(stats) - 1))) / 2
|
|
|
|
for i, (number, label) in enumerate(stats):
|
|
x = start_x + i * (box_width + 0.5)
|
|
|
|
# Box background
|
|
box = slide.shapes.add_shape(
|
|
MSO_SHAPE.ROUNDED_RECTANGLE, Inches(x), Inches(2.5), Inches(box_width), Inches(3)
|
|
)
|
|
box.fill.solid()
|
|
box.fill.fore_color.rgb = RGBColor(240, 249, 240)
|
|
box.line.color.rgb = PRIMARY_COLOR
|
|
box.line.width = Pt(2)
|
|
|
|
# Number
|
|
num_box = slide.shapes.add_textbox(Inches(x), Inches(3), Inches(box_width), Inches(1.2))
|
|
tf = num_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = str(number)
|
|
p.font.size = Pt(60)
|
|
p.font.bold = True
|
|
p.font.color.rgb = PRIMARY_COLOR
|
|
p.alignment = PP_ALIGN.CENTER
|
|
|
|
# Label
|
|
label_box = slide.shapes.add_textbox(Inches(x), Inches(4.3), Inches(box_width), Inches(0.8))
|
|
tf = label_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = label
|
|
p.font.size = Pt(18)
|
|
p.font.color.rgb = DARK_COLOR
|
|
p.alignment = PP_ALIGN.CENTER
|
|
|
|
return slide
|
|
|
|
def add_tier_slide(tier_name, price, tagline, benefits):
|
|
slide = prs.slides.add_slide(prs.slide_layouts[6])
|
|
|
|
# Header stripe
|
|
stripe = slide.shapes.add_shape(
|
|
MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, Inches(1.8)
|
|
)
|
|
stripe.fill.solid()
|
|
stripe.fill.fore_color.rgb = PRIMARY_COLOR
|
|
stripe.line.fill.background()
|
|
|
|
# Tier name
|
|
title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.4), Inches(8), Inches(0.8))
|
|
tf = title_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = tier_name
|
|
p.font.size = Pt(36)
|
|
p.font.bold = True
|
|
p.font.color.rgb = RGBColor(255, 255, 255)
|
|
|
|
# Price
|
|
price_box = slide.shapes.add_textbox(Inches(9), Inches(0.4), Inches(4), Inches(0.8))
|
|
tf = price_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = price
|
|
p.font.size = Pt(42)
|
|
p.font.bold = True
|
|
p.font.color.rgb = RGBColor(255, 255, 255)
|
|
p.alignment = PP_ALIGN.RIGHT
|
|
|
|
# Tagline
|
|
tag_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.1), Inches(12), Inches(0.5))
|
|
tf = tag_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = tagline
|
|
p.font.size = Pt(18)
|
|
p.font.italic = True
|
|
p.font.color.rgb = RGBColor(255, 255, 255)
|
|
|
|
# Benefits
|
|
content_box = slide.shapes.add_textbox(Inches(0.5), Inches(2.2), Inches(12.333), Inches(5))
|
|
tf = content_box.text_frame
|
|
tf.word_wrap = True
|
|
for benefit in benefits:
|
|
p = tf.add_paragraph()
|
|
p.text = f"✓ {benefit}"
|
|
p.font.size = Pt(20)
|
|
p.space_after = Pt(14)
|
|
p.font.color.rgb = DARK_COLOR
|
|
|
|
return slide
|
|
|
|
# Slide 1: Title
|
|
add_title_slide(
|
|
"Crypto Commons\nGathering 2026",
|
|
"Sponsorship Package | August 16-22 | Austrian Alps"
|
|
)
|
|
|
|
# Slide 2: Key Stats
|
|
add_stats_slide("At a Glance", [
|
|
("100+", "Participants"),
|
|
("6", "Years Running"),
|
|
("20+", "Countries")
|
|
])
|
|
|
|
# Slide 3: What is CCG
|
|
add_content_slide("What is CCG?", [
|
|
"Week-long unconference at the intersection of crypto, regenerative finance, and commons",
|
|
"Fully participant-driven: no pre-set agenda, schedule co-created daily",
|
|
"Movements like #CoFi and #MycoFi were born here",
|
|
"Deeply relational: genuine connections formed over a week of co-living",
|
|
"Off-grid mountain retreat in the Austrian Alps"
|
|
])
|
|
|
|
# Slide 4: Why Sponsor
|
|
add_content_slide("Why Sponsor CCG 2026?", [
|
|
[
|
|
"Reach influential ReFi builders & researchers",
|
|
"Association with real impact movements",
|
|
"Values-aligned, committed audience",
|
|
"6 years of trust and credibility"
|
|
],
|
|
[
|
|
"Non-extractive economics",
|
|
"Complete financial transparency",
|
|
"~40% return attendee rate",
|
|
"Genuine partnerships over marketing"
|
|
]
|
|
], two_column=True)
|
|
|
|
# Slide 5: Audience Profile
|
|
add_content_slide("Who Attends CCG?", [
|
|
"35% Builders & Developers — Protocol engineers, smart contract devs",
|
|
"25% Researchers & Academics — PhD students, professors, think tanks",
|
|
"15% Artists & Designers — Solarpunk creators, game designers",
|
|
"15% Activists & Organizers — Cooperative founders, policy advocates",
|
|
"10% Investors & Funders — Impact investors, grant makers"
|
|
])
|
|
|
|
# Slide 6: Tier - Mycelium
|
|
add_tier_slide("MYCELIUM PARTNER", "€10,000", "Become part of the CCG ecosystem", [
|
|
"4 complimentary full-access passes (€600 value)",
|
|
"Dedicated 60-minute sponsored session slot",
|
|
"Private dinner with organizers and community leaders",
|
|
"Logo on website hero section and all event materials",
|
|
"Acknowledgment at opening and closing ceremonies",
|
|
"First access to participant list for networking"
|
|
])
|
|
|
|
# Slide 7: Tier - Spore
|
|
add_tier_slide("SPORE PARTNER", "€5,000", "Plant seeds for regenerative futures", [
|
|
"2 complimentary full-access passes (€300 value)",
|
|
"30-minute workshop or presentation slot",
|
|
"Logo on website sponsor section",
|
|
"Logo on event signage and materials",
|
|
"Social media recognition"
|
|
])
|
|
|
|
# Slide 8: Tier - Symbiont
|
|
add_tier_slide("SYMBIONT SUPPORTER", "€2,500", "Support commons-building infrastructure", [
|
|
"1 complimentary full-access pass (€150 value)",
|
|
"Logo on website sponsor section",
|
|
"Logo on event signage",
|
|
"Social media mention"
|
|
])
|
|
|
|
# Slide 9: Alternative Partnerships
|
|
add_content_slide("Alternative Partnerships", [
|
|
"Track Sponsorship — Name a theme track, curate sessions",
|
|
"Accommodation Sponsorship (~€3,000-5,000) — Enable access for those who need support",
|
|
"Meal Sponsorship (~€2,000-4,000) — Your name synonymous with nourishment",
|
|
"Documentation Sponsorship (~€1,500) — Photo, video, written summaries",
|
|
"Travel Grants — Fund scholarships for underrepresented regions",
|
|
"Technology Partnership — In-kind tools and infrastructure"
|
|
])
|
|
|
|
# Slide 10: Contact
|
|
slide = prs.slides.add_slide(prs.slide_layouts[6])
|
|
|
|
# Background
|
|
background = slide.shapes.add_shape(
|
|
MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, prs.slide_height
|
|
)
|
|
background.fill.solid()
|
|
background.fill.fore_color.rgb = PRIMARY_COLOR
|
|
background.line.fill.background()
|
|
|
|
# Title
|
|
title_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.5), Inches(12.333), Inches(1))
|
|
tf = title_box.text_frame
|
|
p = tf.paragraphs[0]
|
|
p.text = "Let's Talk"
|
|
p.font.size = Pt(48)
|
|
p.font.bold = True
|
|
p.font.color.rgb = RGBColor(255, 255, 255)
|
|
p.alignment = PP_ALIGN.CENTER
|
|
|
|
# Contact info
|
|
info_box = slide.shapes.add_textbox(Inches(0.5), Inches(3), Inches(12.333), Inches(3))
|
|
tf = info_box.text_frame
|
|
tf.word_wrap = True
|
|
|
|
contact_lines = [
|
|
"contact@cryptocommonsgather.ing",
|
|
"",
|
|
"cryptocommonsgather.ing",
|
|
"",
|
|
"August 16-22, 2026 | Austrian Alps"
|
|
]
|
|
|
|
for line in contact_lines:
|
|
p = tf.add_paragraph()
|
|
p.text = line
|
|
p.font.size = Pt(24)
|
|
p.font.color.rgb = RGBColor(255, 255, 255)
|
|
p.alignment = PP_ALIGN.CENTER
|
|
p.space_after = Pt(8)
|
|
|
|
# Save
|
|
pptx_path = OUTPUT_DIR / "CCG26-Sponsorship-Package.pptx"
|
|
prs.save(pptx_path)
|
|
print(f"Created: {pptx_path}")
|
|
|
|
return pptx_path
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("Generating CCG 2026 Sponsorship Package documents...\n")
|
|
|
|
html_path, pdf_path = create_html_and_pdf()
|
|
pptx_path = create_powerpoint()
|
|
|
|
print("\n✅ All documents generated successfully!")
|
|
print(f"\nFiles created:")
|
|
print(f" - HTML: {html_path}")
|
|
print(f" - PDF: {pdf_path}")
|
|
print(f" - PPTX: {pptx_path}")
|