#!/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 = """ CCG 2026 Sponsorship Package

Crypto Commons
Gathering 2026

Sponsorship Package

"A recurring temporary refuge from late-capitalism"

August 16-22, 2026

Commons Hub, Austrian Alps

6th Annual Edition

Executive Summary

The Crypto Commons Gathering (CCG) is an annual week-long retreat where genuine desire for postcapitalist change meets blockchain innovation, commons building, and radical imagination.

Now in its 6th edition, CCG has established itself as the premier gathering for builders, researchers, and activists working at the intersection of crypto, regenerative finance, and cooperative economics.

100+
Participants
6
Years Running
20+
Countries

At a Glance

DatesAugust 16-22, 2026
LocationCommons Hub, Reichenau an der Rax, Austrian Alps
FormatWeek-long unconference retreat
OrganizersCrypto Commons Association & Commons Hub

Movements Born at CCG

Why Sponsor CCG 2026?

1. Reach Influential Builders & Thought Leaders

CCG attracts a unique, highly engaged audience:

2. Values-Aligned Audience

CCG attendees aren't casual observers—they're committed builders who:

3. Six Years of Trust & Credibility

Audience Profile

Who Attends CCG?

Segment % Description
Builders & Developers 35% Protocol engineers, smart contract devs, infrastructure builders
Researchers & Academics 25% PhD students, professors, think tank members
Artists & Designers 15% Game designers, solarpunk creators, UX/UI specialists
Activists & Organizers 15% Cooperative founders, community organizers, policy advocates
Investors & Funders 10% Impact investors, grant makers, ecosystem funders

Attendee Interests

Geographic Distribution

Europe60%
North America20%
Global South15%
Asia-Pacific5%

Sponsorship Tiers

MYCELIUM PARTNER

€10,000

Become part of the CCG ecosystem

Recognition & Visibility

Engagement

SPORE PARTNER

€5,000

Plant seeds for regenerative futures

SYMBIONT SUPPORTER

€2,500

Support commons-building infrastructure

FRIEND OF THE COMMONS

€1,000

Show solidarity with the movement

Alternative Partnership Opportunities

Beyond financial sponsorship, we welcome in-kind contributions and creative partnerships:

Track Sponsorship | Custom

Sponsor a specific theme track (e.g., "Regenerative Finance Day") with naming rights and session curation involvement.

Accommodation Sponsorship | ~€3,000-5,000

Cover accommodation costs for participants who need financial support, enabling broader access.

Meal Sponsorship | ~€2,000-4,000

Sponsor catered meals for a day or the entire event—your name becomes synonymous with nourishment and community care.

Documentation Sponsorship | ~€1,500

Support professional documentation (photography, videography, written summaries) with credit and content rights.

Travel Grants | Custom

Fund travel scholarships for participants from underrepresented regions or backgrounds.

Technology Partnership | In-Kind

Provide tools, platforms, or infrastructure (livestreaming, collaboration tools, etc.) in exchange for recognition.

Impact Metrics

Editions held5 (2020-2025)
Total attendees (all editions)400+
Countries represented25+
Projects incubated/catalyzed15+
Active community members500+
Movements spawned#CoFi, #MycoFi
Return attendee rate~40%

What Makes CCG Different?

It's Not a Conference—It's a Convivium

Unlike traditional crypto events with keynote speakers and expo floors, CCG is:

Attendees Contribute, Not Just Consume

Everyone who attends CCG joins a Commons Crew:

This creates a fundamentally different relationship between participants and the event—one of mutual care and shared responsibility.

Testimonials

"CCG is where I found my people—the ones who actually believe another world is possible and are building it together." — Returning participant, 2024
"The ideas I encountered at CCG completely changed how I think about protocol design. It's like nothing else in the crypto space." — ReFi builder, 2023
"I came for the unconference, I stayed for the community. Four years later, my closest collaborators are people I met at CCG." — Cooperative founder, 2022

Contact & Next Steps

We'd love to discuss how a partnership could work for your organization.

Primary Contact

Email: contact@cryptocommonsgather.ing

Event Website

https://cryptocommonsgather.ing

Community

Partner Organizations

Key Dates

NowSponsorship discussions open
March 31, 2026Early bird registration closes
June 30, 2026Regular registration closes
August 1, 2026Final sponsor deliverables due
August 16-22, 2026CCG 2026

Join us in the Austrian Alps for a week that might just change how you see what's possible.

""" # 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}")