max / makenotwork
- Co-Authored-By
- Claude Opus 4.8 (1M context) <noreply@anthropic.com>
22 files changed,
+189 insertions,
-73 deletions
| @@ -61,6 +61,51 @@ | |||
| 61 | 61 | per_payout = 0.25 | |
| 62 | 62 | payout_volume_pct = 0.0025 | |
| 63 | 63 | ||
| 64 | + | [stripe.instant_payout] | |
| 65 | + | # Nested form of the flat instant_payout_* keys above; substituted into | |
| 66 | + | # legal/payments.md and guide/stripe.md as {{ stripe.instant_payout.* }}. | |
| 67 | + | # Kept alongside the flat form for backward compatibility. | |
| 68 | + | us_pct = 0.015 | |
| 69 | + | intl_pct = 0.010 | |
| 70 | + | min_usd = 0.50 | |
| 71 | + | ||
| 72 | + | ||
| 73 | + | # ─── Policy commitments (canonical: guarantees.md) ─────────────────────── | |
| 74 | + | # Time-based commitments that appear verbatim across guarantees.md, pricing.md, | |
| 75 | + | # tiers.md, faq.md, fan-guide.md, account-lifecycle.md, generative-ai.md, and | |
| 76 | + | # how-we-work.md. Semantically distinct even where the number matches today. | |
| 77 | + | [policy] | |
| 78 | + | buyer_access_days = 90 # guarantees §Buyer Access — post-close fan download window | |
| 79 | + | shutdown_notice_days = 90 # guarantees §Shutdown, §Continuity | |
| 80 | + | price_change_notice_days = 90 # guarantees §Price Stability, pricing.md | |
| 81 | + | grandfather_months = 12 # guarantees §Price Stability | |
| 82 | + | cancellation_grace_days = 30 # tiers.md §Cancellation, getting-started.md | |
| 83 | + | content_archive_months = 12 # guarantees §Content Archive (planned) | |
| 84 | + | generative_ai_notice_days = 30 # generative-ai.md §Governance | |
| 85 | + | ||
| 86 | + | ||
| 87 | + | # ─── Uptime (canonical: guarantees.md §Availability) ───────────────────── | |
| 88 | + | [uptime] | |
| 89 | + | target_pct = 0.995 | |
| 90 | + | target_downtime_hours_year = 44 # (1 - 0.995) × 8760 ≈ 43.8, rounded up | |
| 91 | + | ||
| 92 | + | ||
| 93 | + | # ─── Broadcasts (canonical: tiers.md, mailing-lists.md) ────────────────── | |
| 94 | + | [broadcasts] | |
| 95 | + | per_day = 1 | |
| 96 | + | recipients_per_send = 10000 | |
| 97 | + | # Display string with thousands separator; docengine has no thousands filter | |
| 98 | + | # so the display form lives here (same pattern as `cohort.cap_display`). | |
| 99 | + | recipients_per_send_display = "10,000" | |
| 100 | + | ||
| 101 | + | ||
| 102 | + | # ─── Fan+ (canonical: fan-plus.md) ─────────────────────────────────────── | |
| 103 | + | [fan_plus] | |
| 104 | + | monthly_price_usd = 8 | |
| 105 | + | # Per-fan monthly credit allowance; funded by Fan+ subscription revenue, | |
| 106 | + | # not per-account overhead. Fan-only — creators don't receive it. | |
| 107 | + | monthly_credit_usd = 5 | |
| 108 | + | ||
| 64 | 109 | ||
| 65 | 110 | # ─── Hetzner prices (canonical: hetzner_prices.md) ──────────────────────── | |
| 66 | 111 | [hetzner] |
| @@ -548,6 +548,34 @@ | |||
| 548 | 548 | put("stripe_fee_big_std", stripe_fee(t.tiers.standard.big_files)); | |
| 549 | 549 | put("stripe_fee_ev_std", stripe_fee(t.tiers.standard.everything)); | |
| 550 | 550 | ||
| 551 | + | // Stripe fee + take-home on illustrative sale prices ($1, $2, $5, $10, $25, | |
| 552 | + | // $50). Pin the "sale price → fee → you keep" tables in guide/tiers.md and | |
| 553 | + | // guide/stripe.md. Values are pre-rounded to whole cents so the `money` | |
| 554 | + | // filter's `:.2` format won't drift from float imprecision (e.g. $25 × 2.9% | |
| 555 | + | // + $0.30 = 1.02499999… under f64, which naive :.2 would print as "$1.02"). | |
| 556 | + | // "you keep" is `sale − round(fee)` — arithmetically consistent with what a | |
| 557 | + | // reader would compute from the fee column, at the cost of one-cent drift on | |
| 558 | + | // $25 relative to the original hand-written doc ($23.97, not $23.98). | |
| 559 | + | let round_cents = |x: f64| (x * 100.0).round() / 100.0; | |
| 560 | + | for &n in &[1.0_f64, 2.0, 5.0, 10.0, 25.0, 50.0] { | |
| 561 | + | let key = n as i64; | |
| 562 | + | let fee = round_cents(stripe_fee(n)); | |
| 563 | + | put(&format!("stripe_fee_on_{key}"), fee); | |
| 564 | + | put(&format!("stripe_keep_on_{key}"), n - fee); | |
| 565 | + | } | |
| 566 | + | ||
| 567 | + | // Discount percentages as decimals. Render with `| percent(0)` for whole | |
| 568 | + | // numbers (e.g. `10%`, `50%`). `annual_discount_pct` kills the hardcoded | |
| 569 | + | // "10% off" in pricing.md and tiers.md; `founder_discount_pct` kills the | |
| 570 | + | // "50%-off" in guarantees.md. Founder discount uses the Basic tier as the | |
| 571 | + | // canonical ratio; all four tiers currently give the same discount and | |
| 572 | + | // that invariant is enforced elsewhere by the founding ≤ standard check. | |
| 573 | + | put("annual_discount_pct", 1.0 - t.annual_discount.multiplier); | |
| 574 | + | put( | |
| 575 | + | "founder_discount_pct", | |
| 576 | + | 1.0 - t.tiers.founding.basic / t.tiers.standard.basic, | |
| 577 | + | ); | |
| 578 | + | ||
| 551 | 579 | // Annual prices per tier (monthly × 12 × annual_discount.multiplier, rounded | |
| 552 | 580 | // to nearest dollar). Substituted into docs as `${{ derived.annual_*_* }}` | |
| 553 | 581 | // so a price change auto-propagates. | |
| @@ -788,6 +816,49 @@ | |||
| 788 | 816 | ); | |
| 789 | 817 | } | |
| 790 | 818 | ||
| 819 | + | #[test] | |
| 820 | + | fn derived_stripe_fee_on_n_matches_published_table() { | |
| 821 | + | let a = loaded(); | |
| 822 | + | let get_money = |k: &str| a | |
| 823 | + | .substitute(&format!("{{{{ derived.{k} | money }}}}")) | |
| 824 | + | .unwrap(); | |
| 825 | + | ||
| 826 | + | // These strings must match the "Stripe fee → You keep" table in | |
| 827 | + | // guide/tiers.md line 138-143 and guide/stripe.md exactly, or docs drift. | |
| 828 | + | // Sale-price-based (not tier-price-based), so stable under Refined-A. | |
| 829 | + | assert_eq!(get_money("stripe_fee_on_1"), "$0.33"); | |
| 830 | + | assert_eq!(get_money("stripe_fee_on_2"), "$0.36"); | |
| 831 | + | assert_eq!(get_money("stripe_fee_on_5"), "$0.45"); | |
| 832 | + | assert_eq!(get_money("stripe_fee_on_10"), "$0.59"); | |
| 833 | + | assert_eq!(get_money("stripe_fee_on_25"), "$1.03"); | |
| 834 | + | assert_eq!(get_money("stripe_fee_on_50"), "$1.75"); | |
| 835 | + | ||
| 836 | + | assert_eq!(get_money("stripe_keep_on_1"), "$0.67"); | |
| 837 | + | assert_eq!(get_money("stripe_keep_on_2"), "$1.64"); | |
| 838 | + | assert_eq!(get_money("stripe_keep_on_5"), "$4.55"); | |
| 839 | + | assert_eq!(get_money("stripe_keep_on_10"), "$9.41"); | |
| 840 | + | // Note: source doc previously had $23.98, computed as | |
| 841 | + | // round($25 - $1.025) rather than $25 - round($1.025); we standardize | |
| 842 | + | // on the latter for consistency with the fee column. | |
| 843 | + | assert_eq!(get_money("stripe_keep_on_25"), "$23.97"); | |
| 844 | + | assert_eq!(get_money("stripe_keep_on_50"), "$48.25"); | |
| 845 | + | } | |
| 846 | + | ||
| 847 | + | #[test] | |
| 848 | + | fn derived_discount_pcts_render_as_whole_percent() { | |
| 849 | + | let a = loaded(); | |
| 850 | + | // percent(0) renders the whole-percent form used in the docs. Both are | |
| 851 | + | // stable under Refined-A: annual discount is 10%, founder is 50% of std. | |
| 852 | + | assert_eq!( | |
| 853 | + | a.substitute("{{ derived.annual_discount_pct | percent(0) }}").unwrap(), | |
| 854 | + | "10%" | |
| 855 | + | ); | |
| 856 | + | assert_eq!( | |
| 857 | + | a.substitute("{{ derived.founder_discount_pct | percent(0) }}").unwrap(), | |
| 858 | + | "50%" | |
| 859 | + | ); | |
| 860 | + | } | |
| 861 | + | ||
| 791 | 862 | #[test] | |
| 792 | 863 | fn derived_annual_prices_match_monthly_times_discount() { | |
| 793 | 864 | // Formula: monthly × 12 × annual_discount.multiplier, rounded to |
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | 7 | ## Fee Comparison | |
| 8 | 8 | ||
| 9 | - | All numbers assume US Stripe rates (2.9% + $0.30) and an **average fan transaction of $10**. Per-transaction cost depends on sale count, not just gross revenue; see [How We Work § The Math](./how-we-work.md#the-math) for the full breakdown. Patreon's row uses their "Pro" tier (8%); their Lite (5%) and Premium (12%) tiers shift the column up and down respectively. | |
| 9 | + | All numbers assume US Stripe rates ({{ stripe.percent | percent }} + {{ stripe.fixed | money }}) and an **average fan transaction of $10**. Per-transaction cost depends on sale count, not just gross revenue; see [How We Work § The Math](./how-we-work.md#the-math) for the full breakdown. Patreon's row uses their "Pro" tier (8%); their Lite (5%) and Premium (12%) tiers shift the column up and down respectively. | |
| 10 | 10 | ||
| 11 | 11 | The Makenot.work range reflects the lowest tier (${{ tiers.standard.basic }}, Basic) at the high end and the highest tier (${{ tiers.standard.everything }}, Everything) at the low end. | |
| 12 | 12 | ||
| @@ -18,7 +18,7 @@ | |||
| 18 | 18 | | Bandcamp | 15% = $75 | ~$29.50 | $395 | | |
| 19 | 19 | | Gumroad | 10% = $50 | included | $450 | | |
| 20 | 20 | | itch.io (default) | 10% = $50 | ~$29.50 | $420 | | |
| 21 | - | | Patreon (Pro) | 8% = $40 | 2.9%+$0.30 = ~$29.50 | $430 | | |
| 21 | + | | Patreon (Pro) | 8% = $40 | {{ stripe.percent | percent }}+{{ stripe.fixed | money }} = ~$29.50 | $430 | | |
| 22 | 22 | ||
| 23 | 23 | ### At $2,000/month revenue (200 sales × $10) | |
| 24 | 24 | ||
| @@ -85,7 +85,7 @@ | |||
| 85 | 85 | |---|---|---|---|---|---| | |
| 86 | 86 | | **Model** | Flat monthly (${{ tiers.standard.basic }}-${{ tiers.standard.everything }}) | % of revenue | % of revenue | % of revenue (optional) | % of revenue | | |
| 87 | 87 | | **Platform cut** | 0% | 15% | 10% | 0-10% (creator sets) | 5-12% | | |
| 88 | - | | **Processing** | ~3% (Stripe) | ~3% (Stripe) | included in 10% | ~3% | ~3% | | |
| 88 | + | | **Processing** | ~{{ stripe.percent | percent }} (Stripe) | ~{{ stripe.percent | percent }} (Stripe) | included in 10% | ~{{ stripe.percent | percent }} | ~{{ stripe.percent | percent }} | | |
| 89 | 89 | | **Break-even vs 15%** | ~$107-400/mo revenue | N/A | N/A | N/A | N/A | | |
| 90 | 90 | | **Break-even vs 10%** | ~$160-600/mo revenue | N/A | N/A | N/A | N/A | | |
| 91 | 91 | | **Break-even vs 8%** | ~$200-750/mo revenue | N/A | N/A | N/A | N/A | |
| @@ -123,7 +123,7 @@ | |||
| 123 | 123 | ||
| 124 | 124 | - Publish the change with a version date | |
| 125 | 125 | - Explain what changed and why | |
| 126 | - | - Give creators at least 30 days to update their tier classifications if the definitions shift | |
| 126 | + | - Give creators at least {{ policy.generative_ai_notice_days }} days to update their tier classifications if the definitions shift | |
| 127 | 127 | ||
| 128 | 128 | If a currently-covered model demonstrates verifiable, fully compensated training data, it may be reclassified. The principle stays the same: we follow the ethics of the training data, not the capabilities of the tool. | |
| 129 | 129 |
| @@ -6,7 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | 7 | ## Revenue | |
| 8 | 8 | ||
| 9 | - | **Guarantee:** 0% platform fee on fan payments. The only deduction is the payment processor's fee (~3%). | |
| 9 | + | **Guarantee:** 0% platform fee on fan payments. The only deduction is the payment processor's fee (~{{ stripe.percent | percent }}). | |
| 10 | 10 | ||
| 11 | 11 | - No platform percentage cut, ever. | |
| 12 | 12 | - No transaction fees, payout fees, or skimming. | |
| @@ -38,7 +38,7 @@ | |||
| 38 | 38 | - Cancellation is a single button ("Pause Creator Account") in your account settings. | |
| 39 | 39 | - No exit fees, no retention flows, no dark patterns. | |
| 40 | 40 | - Export and download remain available through the end of your billing period. | |
| 41 | - | - After cancellation, your existing content stays published for 30 days. After that, items are hidden (not deleted). Resubscribing to any tier automatically restores all hidden items. | |
| 41 | + | - After cancellation, your existing content stays published for {{ policy.cancellation_grace_days }} days. After that, items are hidden (not deleted). Resubscribing to any tier automatically restores all hidden items. | |
| 42 | 42 | ||
| 43 | 43 | --- | |
| 44 | 44 | ||
| @@ -54,11 +54,11 @@ | |||
| 54 | 54 | ||
| 55 | 55 | ## Buyer Access | |
| 56 | 56 | ||
| 57 | - | **Guarantee:** If a creator deletes their account, fans retain access to content for 90 days. | |
| 57 | + | **Guarantee:** If a creator deletes their account, fans retain access to content for {{ policy.buyer_access_days }} days. | |
| 58 | 58 | ||
| 59 | - | - **One-time purchases:** Items remain downloadable for 90 days after the creator leaves. | |
| 60 | - | - **Membership content:** Fans with active memberships retain access during the same 90-day grace period. Memberships are not billed during this period. | |
| 61 | - | - After 90 days, content is removed from our servers. | |
| 59 | + | - **One-time purchases:** Items remain downloadable for {{ policy.buyer_access_days }} days after the creator leaves. | |
| 60 | + | - **Membership content:** Fans with active memberships retain access during the same {{ policy.buyer_access_days }}-day grace period. Memberships are not billed during this period. | |
| 61 | + | - After {{ policy.buyer_access_days }} days, content is removed from our servers. | |
| 62 | 62 | - Buyers are notified by email when the grace period begins so they can download their files. | |
| 63 | 63 | - Transaction records are preserved indefinitely (receipts remain valid). | |
| 64 | 64 | ||
| @@ -80,13 +80,13 @@ | |||
| 80 | 80 | **Guarantee:** If Makenot.work shuts down, the following process applies: | |
| 81 | 81 | <!-- SOP: internal/business/sops/shutdown-notice.md --> | |
| 82 | 82 | ||
| 83 | - | 1. 90-day advance notice minimum before any service interruption. | |
| 84 | - | 2. Full export access maintained for the entire 90-day notice period. | |
| 83 | + | 1. {{ policy.shutdown_notice_days }}-day advance notice minimum before any service interruption. | |
| 84 | + | 2. Full export access maintained for the entire {{ policy.shutdown_notice_days }}-day notice period. | |
| 85 | 85 | 3. Data preservation: all content remains accessible for download. | |
| 86 | 86 | 4. Fan notification: we help communicate the transition to your audience. | |
| 87 | 87 | 5. Source code remains available for reference. | |
| 88 | 88 | ||
| 89 | - | **What it costs to keep the lights on during shutdown:** Fixed costs are ~${{ expenses.F_monthly }}/month; a full 90-day wind-down costs under $2,000 in hosting. Fan payments go directly to creator-controlled Stripe accounts, so there are no pending payouts to settle on our side. We don't depend on external funding to keep operating, and there are no investors or creditors who could force an early shutdown. | |
| 89 | + | **What it costs to keep the lights on during shutdown:** Fixed costs are ~${{ expenses.F_monthly }}/month; a full {{ policy.shutdown_notice_days }}-day wind-down costs under $2,000 in hosting. Fan payments go directly to creator-controlled Stripe accounts, so there are no pending payouts to settle on our side. We don't depend on external funding to keep operating, and there are no investors or creditors who could force an early shutdown. | |
| 90 | 90 | ||
| 91 | 91 | --- | |
| 92 | 92 | ||
| @@ -115,11 +115,11 @@ | |||
| 115 | 115 | **Guarantee:** No price increases without: | |
| 116 | 116 | <!-- SOP: internal/business/sops/price-change-notice.md --> | |
| 117 | 117 | ||
| 118 | - | - 90 days advance notice. | |
| 118 | + | - {{ policy.price_change_notice_days }} days advance notice. | |
| 119 | 119 | - Published explanation of the change. | |
| 120 | - | - Grandfathering of existing creators at their current rate for at least 12 months. | |
| 120 | + | - Grandfathering of existing creators at their current rate for at least {{ policy.grandfather_months }} months. | |
| 121 | 121 | ||
| 122 | - | Founder-tier pricing is locked for the life of the account: founders keep their 50%-off rate and are never moved to standard pricing. | |
| 122 | + | Founder-tier pricing is locked for the life of the account: founders keep their {{ derived.founder_discount_pct | percent(0) }}-off rate and are never moved to standard pricing. | |
| 123 | 123 | ||
| 124 | 124 | No investor pressure demanding revenue growth. Price changes would only happen if infrastructure costs change dramatically. | |
| 125 | 125 | ||
| @@ -147,7 +147,7 @@ | |||
| 147 | 147 | ||
| 148 | 148 | ## Availability | |
| 149 | 149 | ||
| 150 | - | **Guarantee:** We target 99.5% uptime (roughly 44 hours of downtime per year or less). | |
| 150 | + | **Guarantee:** We target {{ uptime.target_pct | percent }} uptime (roughly {{ uptime.target_downtime_hours_year }} hours of downtime per year or less). | |
| 151 | 151 | ||
| 152 | 152 | - Current uptime published live at [makenot.work/health](https://makenot.work/health), including 24-hour and 7-day percentages. | |
| 153 | 153 | - Monitored by two independent systems: an internal background monitor with email alerts, and an external monitor (PoM) on separate infrastructure. | |
| @@ -178,7 +178,7 @@ | |||
| 178 | 178 | ||
| 179 | 179 | *Planned, not yet implemented. We intend to build this before leaving beta.* | |
| 180 | 180 | ||
| 181 | - | Any content that has existed on the platform for 12 months or more would remain hosted and accessible to fans even if the creator stops paying for their account. | |
| 181 | + | Any content that has existed on the platform for {{ policy.content_archive_months }} months or more would remain hosted and accessible to fans even if the creator stops paying for their account. | |
| 182 | 182 | ||
| 183 | 183 | - Archived content stays live at its original URLs. | |
| 184 | 184 | - Fans who purchased the content retain access. |
| @@ -40,7 +40,7 @@ | |||
| 40 | 40 | ||
| 41 | 41 | ## The Model | |
| 42 | 42 | ||
| 43 | - | You pay a monthly tier fee based on content type (${{ tiers.standard.basic }}-${{ tiers.standard.everything }}). We take 0% of your fan revenue. The only deduction is the payment processing fee (~3%). No ads, no percentage cuts, no hidden fees. | |
| 43 | + | You pay a monthly tier fee based on content type (${{ tiers.standard.basic }}-${{ tiers.standard.everything }}). We take 0% of your fan revenue. The only deduction is the payment processing fee (~{{ stripe.percent | percent }}). No ads, no percentage cuts, no hidden fees. | |
| 44 | 44 | ||
| 45 | 45 | ### The Math | |
| 46 | 46 | ||
| @@ -58,7 +58,7 @@ | |||
| 58 | 58 | - 10% platform cut = $5,000 to the platform | |
| 59 | 59 | - Flat fee model = same ${{ tiers.standard.basic }}-${{ tiers.standard.everything }} tier fee, plus Stripe: `5,000 × $0.30 + 2.9% × $50,000 = $1,500 + $1,450 = $2,950` processing | |
| 60 | 60 | ||
| 61 | - | The gap widens as you grow. A percentage-cut platform is most expensive exactly when you're doing the best. Higher average transaction sizes shift more of Stripe's cost into the 2.9% line and away from the per-transaction $0.30; lower average sizes do the opposite. | |
| 61 | + | The gap widens as you grow. A percentage-cut platform is most expensive exactly when you're doing the best. Higher average transaction sizes shift more of Stripe's cost into the {{ stripe.percent | percent }} line and away from the per-transaction {{ stripe.fixed | money }}; lower average sizes do the opposite. | |
| 62 | 62 | ||
| 63 | 63 | --- | |
| 64 | 64 | ||
| @@ -97,7 +97,7 @@ | |||
| 97 | 97 | ||
| 98 | 98 | *Planned, not yet implemented. We intend to build this before leaving beta.* | |
| 99 | 99 | ||
| 100 | - | Content that has been on the platform for 12 months or more would stay hosted even if you cancel. Your fans keep access. You just can't upload new content without reactivating. See our [written guarantees](./guarantees.md) for the full commitment. | |
| 100 | + | Content that has been on the platform for {{ policy.content_archive_months }} months or more would stay hosted even if you cancel. Your fans keep access. You just can't upload new content without reactivating. See our [written guarantees](./guarantees.md) for the full commitment. | |
| 101 | 101 | ||
| 102 | 102 | --- | |
| 103 | 103 | ||
| @@ -129,7 +129,7 @@ | |||
| 129 | 129 | ||
| 130 | 130 | No outside investors. No debt. Nobody can make us raise prices, add ads, or sell the company. If we can't sustain this on creator tier fees, we'll wind down honestly, not pivot into something exploitative. | |
| 131 | 131 | ||
| 132 | - | Prices won't go up unless infrastructure costs force it. If they ever do, we'll say exactly what changed, give 90 days notice, and grandfather everyone at their current rate. | |
| 132 | + | Prices won't go up unless infrastructure costs force it. If they ever do, we'll say exactly what changed, give {{ policy.price_change_notice_days }} days notice, and grandfather everyone at their current rate. | |
| 133 | 133 | <!-- SOP: internal/business/sops/price-change-notice.md --> | |
| 134 | 134 | ||
| 135 | 135 | ### Where Your Money Goes |
| @@ -22,14 +22,14 @@ | |||
| 22 | 22 | ||
| 23 | 23 | Every tier is the complete platform: profile page at `/u/username`, project and item pages, a per-project forum, [Discover](/discover) listing, memberships, pay-what-you-want, promo codes, RSS, analytics, full data export. The tier picks the file-size envelope, not the feature set. | |
| 24 | 24 | ||
| 25 | - | | Tier | Monthly | Annual (10% off) | File-size envelope | | |
| 25 | + | | Tier | Monthly | Annual ({{ derived.annual_discount_pct | percent(0) }} off) | File-size envelope | | |
| 26 | 26 | |---|---|---|---| | |
| 27 | 27 | | **Basic** | ${{ tiers.founding.basic }}/mo | ${{ derived.annual_founding_basic }}/yr | Up to {{ tier_limits.basic_per_file }} per file, {{ tier_limits.basic_total }} total. Fits text, blogs, newsletters, posts. | | |
| 28 | 28 | | **Small Files** | ${{ tiers.founding.small_files }}/mo | ${{ derived.annual_founding_small_files }}/yr | Up to {{ tier_limits.small_files_per_file }} per file, {{ tier_limits.small_files_total }} total. Fits audio, plugins, binaries, sample packs. | | |
| 29 | 29 | | **Big Files** | ${{ tiers.founding.big_files }}/mo | ${{ derived.annual_founding_big_files }}/yr | Up to {{ tier_limits.big_files_per_file }} per file, {{ tier_limits.big_files_total }} total. Fits video, games, large software. | | |
| 30 | 30 | | **Everything** | ${{ tiers.founding.everything }}/mo | ${{ derived.annual_founding_everything }}/yr | Big Files envelope plus first access to high-cost capabilities as they ship (streaming infrastructure, etc.). | | |
| 31 | 31 | ||
| 32 | - | Annual is 10% off the monthly total. Most of that is the Stripe per-transaction fee we don't pay when we charge once a year instead of twelve times. We pass it back rather than keep it. | |
| 32 | + | Annual is {{ derived.annual_discount_pct | percent(0) }} off the monthly total. Most of that is the Stripe per-transaction fee we don't pay when we charge once a year instead of twelve times. We pass it back rather than keep it. | |
| 33 | 33 | ||
| 34 | 34 | See [tiers](../guide/tiers.md) for the full feature breakdown and storage limits. | |
| 35 | 35 | ||
| @@ -39,7 +39,7 @@ | |||
| 39 | 39 | ||
| 40 | 40 | The standard rate applies to new signups after the founder window closes. The values below are **provisional targets, not committed prices**. We deliberately put founder pricing in front of standard pricing because we want real signup data, real tier-mix data, and real support-load data to set the post-founder number rather than guessing. The standard rate may end up lower than the targets below, the same, or higher. If it rises, the change comes with the notice and grandfathering described in [Guarantees](./guarantees.md), and our founders are below it either way. | |
| 41 | 41 | ||
| 42 | - | | Tier | Monthly | Annual (10% off) | | |
| 42 | + | | Tier | Monthly | Annual ({{ derived.annual_discount_pct | percent(0) }} off) | | |
| 43 | 43 | |---|---|---| | |
| 44 | 44 | | **Basic** | ${{ tiers.standard.basic }}/mo | ${{ derived.annual_standard_basic }}/yr | | |
| 45 | 45 | | **Small Files** | ${{ tiers.standard.small_files }}/mo | ${{ derived.annual_standard_small_files }}/yr | | |
| @@ -68,7 +68,7 @@ | |||
| 68 | 68 | ||
| 69 | 69 | Prices may **fall** if our cost structure allows, for example if infrastructure or processing costs come down at our scale. Cost-favorable changes apply retroactively to active subscriptions. | |
| 70 | 70 | ||
| 71 | - | Prices will only **rise** under the conditions described in [Guarantees](./guarantees.md). If that ever happens, we'll give at least 90 days notice, explain the reasoning in writing, and grandfather existing subscribers at their current rate for at least 12 months. | |
| 71 | + | Prices will only **rise** under the conditions described in [Guarantees](./guarantees.md). If that ever happens, we'll give at least {{ policy.price_change_notice_days }} days notice, explain the reasoning in writing, and grandfather existing subscribers at their current rate for at least {{ policy.grandfather_months }} months. | |
| 72 | 72 | ||
| 73 | 73 | --- | |
| 74 | 74 |
| @@ -14,7 +14,7 @@ | |||
| 14 | 14 | ||
| 15 | 15 | ## The Alternative | |
| 16 | 16 | ||
| 17 | - | We charge a flat monthly fee based on what you need to host: ${{ tiers.standard.basic }} for text, ${{ tiers.standard.small_files }} for audio and software, ${{ tiers.standard.big_files }} for video and large files, ${{ tiers.standard.everything }} for all features, current and future. We take 0% of your revenue. The only deduction from fan payments is the payment processor's fee (~3%), which goes to the processor, not us. | |
| 17 | + | We charge a flat monthly fee based on what you need to host: ${{ tiers.standard.basic }} for text, ${{ tiers.standard.small_files }} for audio and software, ${{ tiers.standard.big_files }} for video and large files, ${{ tiers.standard.everything }} for all features, current and future. We take 0% of your revenue. The only deduction from fan payments is the payment processor's fee (~{{ stripe.percent | percent }}), which goes to the processor, not us. | |
| 18 | 18 | ||
| 19 | 19 | Your tier fee funds the platform. No incentive to take a cut of your sales, show ads to your fans, or lock you in. | |
| 20 | 20 |