Skip to main content

max / makenotwork

13.3 KB · 242 lines History Blame Raw
1 {% extends "base.html" %}
2 {%- import "partials/carousel.html" as carousel -%}
3
4 {% block title %}Makenotwork{% endblock %}
5
6 {% block body_attrs %} class="{{ crate::shell::measure(crate::shell::Measure::Contained) }}"{% endblock %}
7
8 {% block head %}
9 <meta property="og:title" content="Makenotwork: Sell your work directly. Keep what you earn.">
10 <meta property="og:description" content="A platform for selling music, software, writing, and more. 0% platform fee, only Stripe's ~3% processing.">
11 <meta property="og:url" content="{{ host_url }}/">
12 <link rel="canonical" href="{{ host_url }}/">
13 <meta property="og:image" content="{{ host_url }}/static/images/og-card.png">
14 <meta name="twitter:image" content="{{ host_url }}/static/images/og-card.png">
15 {% endblock %}
16
17 {% block content %}
18 <div class="landing-hero">
19 {{ crate::shell::wordmark()|safe }}
20 <p class="landing-headline">Sell your work directly<span class="dot">.</span> Keep what you earn<span class="dot">.</span></p>
21 <p class="landing-sub">A flat monthly subscription. No investors, no ads, no cut on your sales. Source-available, exportable in one click.</p>
22
23 {% if founder_window_open %}
24 <p class="founder-tagline">
25 <span class="founder-tagline-mark">Founder pricing open</span>
26 <span class="founder-tagline-detail">Half off creator tiers, <strong>locked for life</strong>.</span>
27 </p>
28 {% endif %}
29
30 {% if let Some(shipped) = last_shipped %}
31 <p class="landing-velocity">Last shipped: <a href="{{ shipped.href }}">{{ shipped.title }}</a> &middot; {{ shipped.date }}</p>
32 {% endif %}
33
34 <ul class="do-rail" aria-label="What we offer">
35 <li class="do-card">
36 <h3 class="do-card-title">A complete storefront</h3>
37 <p class="do-card-lede">Sell anything digital. Bundles, splits, license keys, promo codes.</p>
38 <ul class="do-card-links">
39 <li><a href="/docs/items">Items</a></li>
40 <li><a href="/docs/bundles">Bundles</a></li>
41 <li><a href="/docs/projects">Projects</a></li>
42 <li><a href="/docs/splits">Splits</a></li>
43 <li><a href="/docs/license-keys">Keys</a></li>
44 </ul>
45 </li>
46 <li class="do-card">
47 <h3 class="do-card-title">Fan engagement, built in</h3>
48 <p class="do-card-lede">Profile, blog, mailing list, memberships, tips. No add-ons.</p>
49 <ul class="do-card-links">
50 <li><a href="/docs/profile">Profiles</a></li>
51 <li><a href="/docs/blog">Blogs</a></li>
52 <li><a href="/docs/mailing-lists">Mailing lists</a></li>
53 <li><a href="/docs/forums">Forums</a></li>
54 <li><a href="/docs/tips">Tips</a></li>
55 </ul>
56 </li>
57 <li class="do-card">
58 <h3 class="do-card-title">Hosting and distribution</h3>
59 <p class="do-card-lede">Audio and video streaming, file downloads, git repos, custom domains. Live streaming on the way.</p>
60 <ul class="do-card-links">
61 <li><a href="/docs/audio">Audio</a></li>
62 <li><a href="/docs/video">Video</a></li>
63 <li><a href="/docs/software">Downloads</a></li>
64 <li><a href="/docs/git">Git</a></li>
65 <li><a href="/docs/custom-domains">Custom domains</a></li>
66 </ul>
67 </li>
68 </ul>
69
70 {% if !landing_carousel.is_empty() %}
71 <section class="landing-showcase" aria-label="See the platform">
72 <h2 class="section-label">See the platform</h2>
73 {% call carousel::carousel("landing-shots", landing_carousel) %}{% endcall %}
74 </section>
75 {% endif %}
76
77 <div class="landing-fork">
78 <div class="card--bordered fork-card{% if founder_window_open %} fork-card--founder{% endif %}">
79 <h2 class="fork-heading">For creators</h2>
80
81 {% if founder_window_open %}
82 <div class="founder-tier-grid" aria-label="Founder tier pricing">
83 <div class="founder-tier">
84 <span class="founder-tier-name">Basic</span>
85 <span class="founder-tier-price"><del>${{ tier_prices.basic_std }}</del> <strong>${{ tier_prices.basic_founder }}</strong><span class="founder-tier-unit">/mo</span></span>
86 </div>
87 <div class="founder-tier">
88 <span class="founder-tier-name">Small Files</span>
89 <span class="founder-tier-price"><del>${{ tier_prices.small_files_std }}</del> <strong>${{ tier_prices.small_files_founder }}</strong><span class="founder-tier-unit">/mo</span></span>
90 </div>
91 <div class="founder-tier">
92 <span class="founder-tier-name">Big Files</span>
93 <span class="founder-tier-price"><del>${{ tier_prices.big_files_std }}</del> <strong>${{ tier_prices.big_files_founder }}</strong><span class="founder-tier-unit">/mo</span></span>
94 </div>
95 <div class="founder-tier">
96 <span class="founder-tier-name">Everything</span>
97 <span class="founder-tier-price"><del>${{ tier_prices.everything_std }}</del> <strong>${{ tier_prices.everything_founder }}</strong><span class="founder-tier-unit">/mo</span></span>
98 </div>
99 </div>
100 {% if let Some(remaining) = founder_slots_remaining %}
101 <p class="founder-slots">
102 <span class="founder-slots-number">{{ remaining }}</span>
103 founder slot{% if *remaining != 1u32 %}s{% endif %} left
104 <span class="founder-slots-cap">of 1,000</span>
105 </p>
106 {% else %}
107 <p class="founder-slots founder-slots--cap">
108 Window closes at 1,000 creators or when we exit beta, whichever first.
109 </p>
110 {% endif %}
111 {% endif %}
112
113 {% if !founder_window_open %}
114 <p class="fork-lede">Flat monthly pricing from ${{ tier_prices.basic_std }}/mo. 0% platform fee. Every tier is the complete platform.</p>
115 {% else %}
116 <p class="fork-lede">0% platform fee. Every tier is the complete platform.</p>
117 {% endif %}
118 <div class="fork-actions">
119 <a class="btn-primary btn--large" href="/join">{% if founder_window_open %}Claim founder pricing{% else %}Join as a creator{% endif %}</a>
120 <a class="fork-secondary-link" href="/sandbox">Try the dashboard first</a>
121 </div>
122 </div>
123
124 <div class="card--bordered fork-card">
125 <h2 class="fork-heading">Fan+</h2>
126 <p class="fork-lede">Support the platform directly and get something back every month.</p>
127 {# Keep this list and the one on /fan-plus identical, and keep
128 both to what the code grants. Audited 2026-08-05 against the
129 credit issuance path here and the perk checks in
130 multithreaded; see the Fan+ guide page for the detail. #}
131 <ul class="fork-list">
132 <li><strong>$5 monthly credit</strong>: a code each billing cycle, usable toward any purchase on the platform</li>
133 <li><strong>+ badge</strong>: shown next to your name on forum posts</li>
134 <li><strong>Forum signatures</strong>: a signature block under everything you post</li>
135 <li><strong>Image embeds</strong>: post images in forum threads</li>
136 </ul>
137 <div class="fork-actions">
138 <a class="btn-primary btn--large" href="/fan-plus">Sign up for Fan+</a>
139 <span class="fork-secondary-link">$8/month. Cancel anytime.</span>
140 </div>
141 </div>
142 </div>
143
144 <p class="landing-browse-cta">
145 <a class="fork-secondary-link" href="/discover">Browse creators &rarr;</a>
146 </p>
147 <p class="landing-mobile-note">Works in any browser, on any phone. No app to install.</p>
148
149 {% if total_creators > 0 || total_items > 0 %}
150 <p class="landing-stats-line">
151 <strong>{{ total_creators }}</strong> creator{% if total_creators != 1 %}s{% endif %} publishing <strong>{{ total_items }}</strong> item{% if total_items != 1 %}s{% endif %}.
152 </p>
153 {% endif %}
154
155 <div class="landing-principles">
156 <h2 class="section-label">What we do differently</h2>
157 <ul class="contrast-rail" aria-label="Common platform habits and how we differ">
158 <li class="contrast-card">
159 <h3 class="contrast-card-title">Track you</h3>
160 <ul class="contrast-card-links">
161 <li><a href="/docs/privacy-policy">No trackers</a></li>
162 <li><a href="/docs/privacy-policy">No ads</a></li>
163 <li><a href="/docs/privacy-policy">No data sales</a></li>
164 </ul>
165 </li>
166 <li class="contrast-card">
167 <h3 class="contrast-card-title">Lock you in</h3>
168 <ul class="contrast-card-links">
169 <li><a href="/docs/portability">Full export</a></li>
170 <li><a href="/docs/account-lifecycle">Cancel anytime</a></li>
171 <li><a href="/docs/export">Original files</a></li>
172 </ul>
173 </li>
174 <li class="contrast-card">
175 <h3 class="contrast-card-title">Take a cut</h3>
176 <ul class="contrast-card-links">
177 <li><a href="/docs/how-we-work">0% platform fee</a></li>
178 <li><a href="/docs/economics">No surge pricing</a></li>
179 <li><a href="/docs/economics">No paid acquisition</a></li>
180 </ul>
181 </li>
182 <li class="contrast-card">
183 <h3 class="contrast-card-title">Hide the code</h3>
184 <ul class="contrast-card-links">
185 <li><a href="/docs/open-source">Source available</a></li>
186 <li><a href="/git/max/makenotwork/commits/main">Read the commits</a></li>
187 <li><a href="/docs/open-source">PolyForm-NC license</a></li>
188 </ul>
189 </li>
190 </ul>
191 </div>
192
193 <div class="do-card do-card--wide">
194 <h3 class="do-card-title">Built for</h3>
195 <p class="do-card-lede">Every craft has its own setup. Pick yours for tier guidance and feature notes.</p>
196 <ul class="do-card-links">
197 <li><a href="/use-cases#musicians">Musicians</a></li>
198 <li><a href="/use-cases#writers">Writers</a></li>
199 <li><a href="/use-cases#podcasters">Podcasters</a></li>
200 <li><a href="/use-cases#developers">Developers</a></li>
201 <li><a href="/use-cases#game-devs">Game devs</a></li>
202 <li><a href="/use-cases#educators">Educators</a></li>
203 <li><a href="/use-cases#comic-creators">Comic creators</a></li>
204 <li><a href="/use-cases">Explore all</a></li>
205 </ul>
206 </div>
207
208 <div class="tier-section">
209 <h2 class="section-label">Stay in the loop</h2>
210 <p class="landing-prose mb-section">Get notified when something ships.</p>
211 {# Real action and method, so this works with JS off. page-index.js
212 intercepts the submit and posts the same encoding to the same
213 route, which makes the script an enhancement (async, inline
214 status, no reload) rather than the only path. It had neither
215 attribute before, so a no-JS submit did a GET to / and the
216 address went nowhere. #}
217 <form class="notify-form" id="notify-form" method="post" action="/notify" data-submit="onNotifySubmit">
218 {% if let Some(token) = csrf_token %}
219 <input type="hidden" name="_csrf" value="{{ token }}">
220 {% endif %}
221 <input type="email" name="email" placeholder="you@example.com" required class="notify-input" aria-label="Email address" autocomplete="email">
222 <button type="submit" class="btn-primary">Notify Me</button>
223 </form>
224 {# The no-JS outcome, carried back on the redirect. The script
225 writes its own text into this element instead. #}
226 <p class="notify-status{% if let Some(ok) = notify_ok %}{% if ok %} success{% else %} error{% endif %}{% endif %}" id="notify-status">{% if let Some(ok) = notify_ok %}{% if ok %}You're on the list.{% else %}That address didn't look right.{% endif %}{% endif %}</p>
227 </div>
228
229 <div class="secondary-links">
230 <a href="/login">Log in</a>
231 <a href="/docs">Docs</a>
232 <a href="/docs/roadmap">Roadmap</a>
233 <a href="/docs/story">About</a>
234 <a href="/team">Team</a>
235 </div>
236 </div>
237 {% endblock %}
238
239 {% block scripts %}
240 <script src="/static/page-index.js?v=0623" defer></script>
241 {% endblock %}
242