felt/docs/felt_financials_v5.py

109 lines
3.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Felt Financial Model v5 — Bare bones reality
Only costs that are truly required. No fluff.
"""
EUR_TO_DKK = 7.45
print("=" * 75)
print("FELT FINANCIAL MODEL v5 — BARE BONES BOOTSTRAP")
print("=" * 75)
# Year 1-2: absolute minimum
# Year 3+: add things as revenue justifies them
phases = [
{
"label": "Year 1-2 (Bootstrap)",
"costs": [
("Hetzner dedicated (16c/32t, 64GB, 2×1TB)", 100),
("Domains (felt.io + a couple reserves)", 8),
("Transactional email (Mailgun free tier → $15)", 10),
],
},
{
"label": "Year 3+ (Revenue covers it)",
"costs": [
("Hetzner primary", 100),
("Hetzner backup/second server", 100),
("Domains", 8),
("Transactional email", 15),
("SMS (Twilio)", 10),
("Accounting (€1k/yr ÷ 12)", 83),
("Insurance (if casino clients require it)", 50),
],
},
]
for phase in phases:
total = sum(c for _, c in phase["costs"])
print(f"\n {phase['label']}:")
for name, cost in phase["costs"]:
print(f" {name:<55s}{cost:>5}/mo")
print(f" {'' * 60}")
print(f" {'TOTAL:':<55s}{total:>5}/mo = €{total*12:,}/yr")
bootstrap_monthly = sum(c for _, c in phases[0]["costs"])
print(f"\n Your actual burn in Year 1-2: €{bootstrap_monthly}/mo")
print(f" That's {bootstrap_monthly * EUR_TO_DKK:.0f} DKK/mo. Less than a tournament buy-in.")
# ================================================================
# 5-YEAR WITH REAL COSTS
# ================================================================
print(f"\n{'=' * 75}")
print("5-YEAR PROJECTION")
print(f"{'=' * 75}")
years = [
("Year 1 — Build + DK early adopters", 40, 3, 2, 0, 0, 118, 0),
("Year 2 — DK saturated, word of mouth", 120, 12, 6, 0, 0, 118, 1000),
("Year 3 — Nordics, first casino", 300, 30, 18, 2, 0, 366, 1000),
("Year 4 — N. Europe, casino growth", 550, 50, 35, 4, 3, 466, 1000),
("Year 5 — International, lifestyle", 800, 70, 50, 6, 8, 566, 1000),
]
# columns: label, free, offline, pro, casino_starter, casino_pro_properties, monthly_fixed, annual_accounting
cumulative = 0
for i, (label, free, off, pro, cs, cp, fixed, acct) in enumerate(years):
rev = off * 25 + pro * 100 + cs * 249 + cp * 499
annual_rev = rev * 12
var = free * 0.45 + off * 0.65 + pro * 1.15 + cs * 5.15 + cp * 10.15
annual_cost = (fixed + var) * 12 + acct
net = annual_rev - annual_cost
cumulative += net
net_mo = net / 12
paying = off + pro + cs + cp
total = free + paying
print(f"\n Year {i+1}: {label}")
print(f" {total} venues ({free} free, {paying} paying) | Fixed: €{fixed}/mo")
print(f" Revenue: €{rev:>7,}/mo = €{annual_rev:>8,}/yr")
print(f" Costs: €{fixed+var:>7,.0f}/mo = €{annual_cost:>8,.0f}/yr")
print(f" Net: €{net_mo:>7,.0f}/mo = €{net:>8,.0f}/yr (cum: €{cumulative:>8,.0f})")
if net > 0:
trips = int(net / 1500)
dkk = net_mo * EUR_TO_DKK
print(f"{dkk:,.0f} DKK/mo | ~{trips} poker weekends/yr funded")
print(f"\n{'=' * 75}")
print("THAT'S IT.")
print(f"{'=' * 75}")
print(f"""
{bootstrap_monthly}/mo gets you from zero to a proven product in Denmark.
By Year 2 the business pays for itself.
By Year 3 it funds your poker travel.
By Year 4 it's real income.
By Year 5 it's a lifestyle business doing €130k+/yr on 90% margins.
Total investment to get there: ~€{bootstrap_monthly * 18:,} over 18 months
before it's self-sustaining. That's the price of a used car.
""")