Skip to main content

max / makenotwork

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