#!/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.
At a Glance
| Dates | August 16-22, 2026 |
| Location | Commons Hub, Reichenau an der Rax, Austrian Alps |
| Format | Week-long unconference retreat |
| Organizers | Crypto Commons Association & Commons Hub |
Movements Born at CCG
- #CoFi (Cooperative Finance) — Redefining collaborative financial infrastructure
- #MycoFi (Mycelial Finance) — Biomimetic approaches to economic design
Why Sponsor CCG 2026?
1. Reach Influential Builders & Thought Leaders
CCG attracts a unique, highly engaged audience:
- ReFi & DeFi Builders — Teams from Regen Network, EthicHub, Circles UBI, ReFi DAO
- Governance Innovators — Contributors to Holochain, Economic Space Agency, DAOs
- Academic Researchers — PhD researchers, professors, and policy experts
- Artists & Game Designers — Solarpunk creators, economic worldbuilders
- Activists & Organizers — Cooperative founders, commons practitioners
2. Values-Aligned Audience
CCG attendees aren't casual observers—they're committed builders who:
- Lead projects with real traction in ReFi, DAOs, and cooperative economics
- Make purchasing decisions for their organizations
- Influence discourse in crypto-commons and regenerative communities
- Seek genuine partnerships over superficial marketing
3. Six Years of Trust & Credibility
- Complete financial transparency — Full budget breakdowns published publicly
- Non-extractive economics — Organizers cover their own expenses
- Participant-driven format — Authentic community co-creation
- Long-term relationships — ~40% of attendees return year after year
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
- Regenerative Finance (ReFi)
- Decentralized Governance & DAOs
- Cooperative Economics & Mutual Aid
- Commons Theory & Practice
- Degrowth & Post-capitalism
- Solarpunk & Speculative Worldbuilding
- Community Currencies & UBI
Geographic Distribution
| Europe | 60% |
| North America | 20% |
| Global South | 15% |
| Asia-Pacific | 5% |
Sponsorship Tiers
MYCELIUM PARTNER
€10,000
Become part of the CCG ecosystem
Recognition & Visibility
- Logo placement on website hero section and all pages
- Featured sponsor section on event materials
- Acknowledgment at opening and closing ceremonies
- Social media recognition across all CCG channels
Engagement
- 4 complimentary full-access passes (€600 value)
- Dedicated 60-minute sponsored session slot
- Private dinner with CCG organizers and community leaders
- First access to participant list for networking
SPORE PARTNER
€5,000
Plant seeds for regenerative futures
- 2 complimentary full-access passes
- 30-minute workshop or presentation slot
- Logo on website and event signage
- Social media recognition
SYMBIONT SUPPORTER
€2,500
Support commons-building infrastructure
- 1 complimentary full-access pass
- Logo on website and event signage
- Social media mention
FRIEND OF THE COMMONS
€1,000
Show solidarity with the movement
- Name/logo listed on website
- Social media thank-you
- 1 discounted pass (50% off)
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 held | 5 (2020-2025) |
| Total attendees (all editions) | 400+ |
| Countries represented | 25+ |
| Projects incubated/catalyzed | 15+ |
| Active community members | 500+ |
| 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:
- Fully participant-driven — No pre-set agenda; schedule co-created daily
- Deeply relational — Week-long format enables genuine connection
- Off-grid & intimate — Mountain retreat setting, away from distractions
- Non-extractive — Built on commons principles, not corporate incentives
Attendees Contribute, Not Just Consume
Everyone who attends CCG joins a Commons Crew:
- Kitchen crew
- Cleaning crew
- Documentation crew
- Fire/Water crew
- Atmosphere care 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
- Telegram (CCG26): https://t.me/+n5V_wDVKWrk1ZTBh
- Telegram (CCA): https://t.me/+gZjhNaDswIc0ZDg0
Partner Organizations
- Crypto Commons Association: https://crypto-commons.org
- Commons Hub: https://www.commons-hub.at
Key Dates
| Now | Sponsorship discussions open |
| April 30, 2026 | Early bird registration closes |
| June 30, 2026 | Regular registration closes |
| August 1, 2026 | Final sponsor deliverables due |
| August 16-22, 2026 | CCG 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}")