Skip to main content

max / makenotwork

exorcise: B12c prose-heavy templates (dashboard tabs + wizards) Sweep 20 prose-heavy templates under partials/tabs/ and wizards/steps/. Edits applied: - Em-dash and `&mdash;` in dropdown option labels and bullet lead-ins replaced with `:` ("Handmade: no AI tools used", "Fixed price: set in the Details tab", etc.) - Em-dash mid-sentence in setup checklist and intro paragraphs replaced with `;` - `--` ASCII separators in user_creator pitch/trial copy and tier dropdown options replaced with `:` - `Redirecting to Stripe…` / `Opening Stripe…` ellipses swapped for ASCII `...` in three button-loading attributes - Decorative `&mdash;` N/A placeholders in synckit `dimmed` spans replaced with ASCII `-` JS code-comment em-dashes in wizards/steps/item/content.html left untouched (skill skips code-block punctuation). Other in-scope files already clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author: Max J. <87768334+MaxJMath@users.noreply.github.com> · 2026-05-21 21:02 UTC
Commit: 231a59282ae88a2d6e718a61d72c9a9d958d289c
Parent: 608613c
10 files changed, +40 insertions, -40 deletions
@@ -93,9 +93,9 @@
93 93 <div class="form-group">
94 94 <label for="ai_tier">AI Classification <a href="/docs/ai" class="text-xs dimmed">What's this?</a></label>
95 95 <select id="ai_tier" name="ai_tier">
96 - <option value="handmade" {% if item.ai_tier == "handmade" %}selected{% endif %}>Handmade — no AI tools used</option>
97 - <option value="assisted" {% if item.ai_tier == "assisted" %}selected{% endif %}>AI-Assisted — AI tools with human creation</option>
98 - <option value="generated" {% if item.ai_tier == "generated" %}selected{% endif %}>AI-Generated — primarily created by AI</option>
96 + <option value="handmade" {% if item.ai_tier == "handmade" %}selected{% endif %}>Handmade: no AI tools used</option>
97 + <option value="assisted" {% if item.ai_tier == "assisted" %}selected{% endif %}>AI-Assisted: AI tools with human creation</option>
98 + <option value="generated" {% if item.ai_tier == "generated" %}selected{% endif %}>AI-Generated: primarily created by AI</option>
99 99 </select>
100 100 </div>
101 101 <div class="form-group{% if item.ai_tier != "assisted" %} hidden{% endif %}" id="ai-disclosure-row">
@@ -217,7 +217,7 @@
217 217 <summary class="cursor-pointer">
218 218 <h2 class="inline">Sections (<span id="section-count">{{ sections.len() }}</span>)</h2>
219 219 </summary>
220 - <p class="sections-intro">Add tabbed content blocks to your public item page — great for Features, Installation, Specs, or FAQ. Buyers see these as tabs below the description. Max 10.</p>
220 + <p class="sections-intro">Add tabbed content blocks to your public item page: great for Features, Installation, Specs, or FAQ. Buyers see these as tabs below the description. Max 10.</p>
221 221
222 222 <div id="sections-list">
223 223 {% if sections.is_empty() %}
@@ -1,10 +1,10 @@
1 1 <div class="pricing-strategies">
2 2 <div class="pricing-strategies-title">Pricing strategies</div>
3 3 <div class="pricing-strategies-grid">
4 - <div><strong>Fixed price</strong> &mdash; set in the Details tab. Good for finished products.</div>
5 - <div><strong>Pay What You Want</strong> &mdash; fans choose their price. Set a minimum below.</div>
6 - <div><strong>Free + promo codes</strong> &mdash; set price to $0, then generate codes for specific access.</div>
7 - <div><strong>License keys</strong> &mdash; per-seat licensing for software. Works with any pricing model.</div>
4 + <div><strong>Fixed price</strong>: set in the Details tab. Good for finished products.</div>
5 + <div><strong>Pay What You Want</strong>: fans choose their price. Set a minimum below.</div>
6 + <div><strong>Free + promo codes</strong>: set price to $0, then generate codes for specific access.</div>
7 + <div><strong>License keys</strong>: per-seat licensing for software. Works with any pricing model.</div>
8 8 </div>
9 9 </div>
10 10
@@ -4,30 +4,30 @@
4 4 <div class="proj-overview-setup-row">
5 5 {% if has_items %}
6 6 <span class="proj-overview-setup-check">Done</span>
7 - <span class="proj-overview-setup-label proj-overview-setup-label--done">Add your first item — upload files, set a price</span>
7 + <span class="proj-overview-setup-label proj-overview-setup-label--done">Add your first item: upload files, set a price</span>
8 8 {% else %}
9 9 <span class="proj-overview-setup-bullet"></span>
10 - <span class="proj-overview-setup-label">Add your first item — upload files, set a price</span>
10 + <span class="proj-overview-setup-label">Add your first item: upload files, set a price</span>
11 11 <a href="/dashboard/project/{{ project_slug }}/new-item" class="btn btn-small proj-overview-setup-btn">New Item</a>
12 12 {% endif %}
13 13 </div>
14 14 <div class="proj-overview-setup-row">
15 15 {% if stripe_connected %}
16 16 <span class="proj-overview-setup-check">Done</span>
17 - <span class="proj-overview-setup-label proj-overview-setup-label--done">Connect Stripe — required to receive payments (3% processing only)</span>
17 + <span class="proj-overview-setup-label proj-overview-setup-label--done">Connect Stripe: required to receive payments (3% processing only)</span>
18 18 {% else %}
19 19 <span class="proj-overview-setup-bullet"></span>
20 - <span class="proj-overview-setup-label">Connect Stripe — required to receive payments (3% processing only)</span>
20 + <span class="proj-overview-setup-label">Connect Stripe: required to receive payments (3% processing only)</span>
21 21 <a href="/dashboard#tab-payments" class="btn btn-small proj-overview-setup-btn">Go to Payments</a>
22 22 {% endif %}
23 23 </div>
24 24 <div class="proj-overview-setup-row">
25 25 {% if has_published_item %}
26 26 <span class="proj-overview-setup-check">Done</span>
27 - <span class="proj-overview-setup-label proj-overview-setup-label--done">Publish an item — make it visible on your public page</span>
27 + <span class="proj-overview-setup-label proj-overview-setup-label--done">Publish an item: make it visible on your public page</span>
28 28 {% else %}
29 29 <span class="proj-overview-setup-bullet"></span>
30 - <span class="proj-overview-setup-label">Publish an item — make it visible on your public page</span>
30 + <span class="proj-overview-setup-label">Publish an item: make it visible on your public page</span>
31 31 {% if has_items %}
32 32 <button class="btn btn-small proj-overview-setup-btn" onclick="document.getElementById('tab-content-btn').click()">Go to Content</button>
33 33 {% endif %}
@@ -100,7 +100,7 @@
100 100 <div class="form-section">
101 101 <h2 class="subsection-title">Monetization</h2>
102 102 <p class="section-lead">
103 - How visitors access this project. 0% platform fee — only ~3% payment processing.
103 + How visitors access this project. 0% platform fee: only ~3% payment processing.
104 104 Changing models is safe but does not refund or cancel existing purchases or subscriptions.
105 105 </p>
106 106
@@ -108,10 +108,10 @@
108 108 <div class="form-group">
109 109 <label for="settings-pricing-model">Pricing model</label>
110 110 <select id="settings-pricing-model" name="pricing_model" onchange="updateSettingsPricingUI()">
111 - <option value="free"{% if pricing_model == "free" %} selected{% endif %}>Free — anyone can access</option>
111 + <option value="free"{% if pricing_model == "free" %} selected{% endif %}>Free: anyone can access</option>
112 112 <option value="buy_once"{% if pricing_model == "buy_once" %} selected{% endif %}>One-time purchase</option>
113 113 <option value="pwyw"{% if pricing_model == "pwyw" %} selected{% endif %}>Pay what you want</option>
114 - <option value="subscription"{% if pricing_model == "subscription" %} selected{% endif %}>Membership — recurring monthly</option>
114 + <option value="subscription"{% if pricing_model == "subscription" %} selected{% endif %}>Membership: recurring monthly</option>
115 115 </select>
116 116 </div>
117 117
@@ -182,7 +182,7 @@
182 182 <summary>
183 183 <h2 class="subsection-title">Pages (<span id="psection-count">{{ sections.len() }}</span>)</h2>
184 184 </summary>
185 - <p class="pages-intro">Markdown pages that apply to your whole project — Privacy Policy, Terms, FAQ, etc. They appear as tabs on your public project page and are linkable via <code>#section-&lt;slug&gt;</code>. Max 10.</p>
185 + <p class="pages-intro">Markdown pages that apply to your whole project: Privacy Policy, Terms, FAQ, etc. They appear as tabs on your public project page and are linkable via <code>#section-&lt;slug&gt;</code>. Max 10.</p>
186 186
187 187 <div id="psections-list">
188 188 {% if sections.is_empty() %}
@@ -6,7 +6,7 @@
6 6 </div>
7 7
8 8 <p class="form-hint proj-synckit-intro">Cloud Sync lets your desktop or mobile apps sync data with Makenotwork using end-to-end encryption. If you're building an app that stores user data, create a sync app here to get an API key your app uses to connect. <a href="/docs/developer/synckit">Learn more</a></p>
9 - <p class="form-hint proj-synckit-intro-secondary">Most creators don't need this — it's for developers who ship their own software through Makenotwork.</p>
9 + <p class="form-hint proj-synckit-intro-secondary">Most creators don't need this: it's for developers who ship their own software through Makenotwork.</p>
10 10
11 11 <!-- Create new app form -->
12 12 <details class="form-section proj-synckit-create">
@@ -51,7 +51,7 @@
51 51 {% if let Some(s) = app.slug %}
52 52 <code class="proj-synckit-code">{{ s }}</code>
53 53 {% else %}
54 - <span class="dimmed">&mdash;</span>
54 + <span class="dimmed">-</span>
55 55 {% endif %}
56 56 <button class="btn-small btn-secondary proj-synckit-btn-tight"
57 57 onclick="syncKitShowSlugForm('{{ app.id }}', '{{ app.slug.as_deref().unwrap_or_default() }}')">Set</button>
@@ -101,9 +101,9 @@ function syncKitRegenKey(appId) {
101 101 '<code class="proj-synckit-code--wrap">' + data.api_key + '</code>' +
102 102 ' <button class="btn-small btn-secondary proj-synckit-btn-row" ' +
103 103 'onclick="navigator.clipboard.writeText(\'' + data.api_key + '\').then(function(){this.textContent=\'Copied\';var b=this;setTimeout(function(){b.textContent=\'Copy\'},1500)}.bind(this))">Copy</button>' +
104 - ' <span class="form-hint proj-synckit-hint-warn">Save this key now — it cannot be shown again.</span>';
104 + ' <span class="form-hint proj-synckit-hint-warn">Save this key now: it cannot be shown again.</span>';
105 105 }
106 - showToast('Key regenerated. Copy it now — it will not be shown again.');
106 + showToast('Key regenerated. Copy it now: it will not be shown again.');
107 107 });
108 108 } else {
109 109 showToast('Failed to regenerate key.');
@@ -194,7 +194,7 @@ function syncKitShowSlugForm(appId, currentSlug) {
194 194 statusEl.className = 'proj-synckit-create-status--reset';
195 195 statusEl.innerHTML =
196 196 '<div class="proj-synckit-new-key">' +
197 - '<p class="proj-synckit-new-key-heading">Save this API key now — it cannot be shown again.</p>' +
197 + '<p class="proj-synckit-new-key-heading">Save this API key now: it cannot be shown again.</p>' +
198 198 '<code class="proj-synckit-code--selectable">' + data.api_key + '</code>' +
199 199 ' <button class="btn-small btn-secondary proj-synckit-btn-row" ' +
200 200 'onclick="navigator.clipboard.writeText(\'' + data.api_key + '\').then(function(){this.textContent=\'Copied\';var b=this;setTimeout(function(){b.textContent=\'Copy\'},1500)}.bind(this))">Copy</button>' +
@@ -126,7 +126,7 @@
126 126 {% if let Some(fp) = fan_plus %}
127 127 <div class="hint mb-2">
128 128 {% if fp.cancel_at_period_end %}
129 - Active{% if let Some(end) = fp.period_end %} until {{ end }}{% endif %} — cancellation scheduled.
129 + Active{% if let Some(end) = fp.period_end %} until {{ end }}{% endif %}: cancellation scheduled.
130 130 {% else %}
131 131 Active{% if let Some(end) = fp.period_end %} until {{ end }}{% endif %}.
132 132 {% endif %}
@@ -146,7 +146,7 @@
146 146 {% endif %}
147 147 <form method="post" action="/stripe/billing-portal" class="inline-form">
148 148 {% if let Some(token) = csrf_token %}<input type="hidden" name="_csrf" value="{{ token }}">{% endif %}
149 - <button type="submit" class="btn-secondary small" data-loading-text="Opening Stripe…">Manage billing</button>
149 + <button type="submit" class="btn-secondary small" data-loading-text="Opening Stripe...">Manage billing</button>
150 150 </form>
151 151 </div>
152 152 {% else %}
@@ -44,7 +44,7 @@
44 44 {% if founder_window_open || is_founder_locked %}
45 45 <div class="founder-callout mb-4">
46 46 {% if is_founder_locked %}
47 - <p class="m-0 text-sm"><strong>Your founder pricing is locked in.</strong> The rates below show the founder rate for each tier — you can subscribe (or upgrade later) at this rate for the life of your account.</p>
47 + <p class="m-0 text-sm"><strong>Your founder pricing is locked in.</strong> The rates below show the founder rate for each tier: you can subscribe (or upgrade later) at this rate for the life of your account.</p>
48 48 {% else %}
49 49 <p class="m-0 text-sm"><strong>Founder pricing window is open.</strong> Subscribe now to lock in half-price creator memberships for life. Window closes at 1,000 creators or exit-beta, whichever first. <a href="/docs/about/pricing">How it works &rarr;</a></p>
50 50 {% endif %}
@@ -80,12 +80,12 @@
80 80 <form method="post" action="/stripe/creator-tier" class="m-0">
81 81 <input type="hidden" name="tier" value="{{ tier_key }}">
82 82 <input type="hidden" name="interval" value="monthly">
83 - <button type="submit" class="btn-primary creator-tier-btn" data-loading-text="Redirecting to Stripe…">Monthly</button>
83 + <button type="submit" class="btn-primary creator-tier-btn" data-loading-text="Redirecting to Stripe...">Monthly</button>
84 84 </form>
85 85 <form method="post" action="/stripe/creator-tier" class="m-0">
86 86 <input type="hidden" name="tier" value="{{ tier_key }}">
87 87 <input type="hidden" name="interval" value="annual">
88 - <button type="submit" class="btn-secondary creator-tier-btn" data-loading-text="Redirecting to Stripe…">Annual (save 10%)</button>
88 + <button type="submit" class="btn-secondary creator-tier-btn" data-loading-text="Redirecting to Stripe...">Annual (save 10%)</button>
89 89 </form>
90 90 </div>
91 91 </div>
@@ -228,7 +228,7 @@
228 228 </div>
229 229 {% else %}
230 230 <div class="creator-pitch-box mb-4">
231 - <p class="muted">You were invited -- no pitch required.</p>
231 + <p class="muted">You were invited: no pitch required.</p>
232 232 </div>
233 233 {% endif %}
234 234 <div class="muted text-sm">
@@ -251,7 +251,7 @@
251 251 <h2 class="creator-h2 mb-4">Apply for Creator Access</h2>
252 252 <p class="mb-5">
253 253 Tell us what you make and which tier you need. If you have existing work online,
254 - link to it -- a portfolio, channel, or profile elsewhere helps us review faster.
254 + link to it: a portfolio, channel, or profile elsewhere helps us review faster.
255 255 </p>
256 256 <form hx-post="/api/waitlist/apply"
257 257 hx-target="closest div"
@@ -268,10 +268,10 @@
268 268 <label for="preferred-tier">Which tier fits?</label>
269 269 <select id="preferred-tier" name="preferred_tier">
270 270 <option value="">Not sure yet</option>
271 - <option value="basic">Basic ($10/mo) -- text, blogs, newsletters</option>
272 - <option value="small_files">Small Files ($20/mo) -- audio, software, plugins</option>
273 - <option value="big_files">Big Files ($30/mo) -- video, games, large software</option>
274 - <option value="everything">Everything ($60/mo) -- all features, current and future</option>
271 + <option value="basic">Basic ($10/mo): text, blogs, newsletters</option>
272 + <option value="small_files">Small Files ($20/mo): audio, software, plugins</option>
273 + <option value="big_files">Big Files ($30/mo): video, games, large software</option>
274 + <option value="everything">Everything ($60/mo): all features, current and future</option>
275 275 </select>
276 276 </div>
277 277 <div class="form-group">
@@ -295,7 +295,7 @@
295 295 <label for="trial-reason">What do you want to test?</label>
296 296 <textarea id="trial-reason" name="trial_reason" rows="3" maxlength="500"
297 297 placeholder="What feature or workflow are you unsure about? What do you need to try before committing?"></textarea>
298 - <div class="hint">Longer trials should have a specific reason -- a feature you need to evaluate, a workflow you want to test with real content, etc.</div>
298 + <div class="hint">Longer trials should have a specific reason: a feature you need to evaluate, a workflow you want to test with real content, etc.</div>
299 299 </div>
300 300 </div>
301 301 <div id="apply-result"></div>
@@ -86,7 +86,7 @@
86 86 cancelLink(btn);
87 87 }).catch(function() {
88 88 var saveBtn = row.querySelector('.link-save-btn');
89 - if (saveBtn) saveBtn.textContent = 'Save failed — retry';
89 + if (saveBtn) saveBtn.textContent = 'Save failed: retry';
90 90 });
91 91 }
92 92 </script>
@@ -4,7 +4,7 @@
4 4 </div>
5 5
6 6 <p class="form-hint mb-3">Cloud Sync lets your desktop or mobile apps sync data with Makenotwork using end-to-end encryption. Each app gets an API key your app uses to connect. <a href="/docs/developer/synckit">Learn more</a></p>
7 - <p class="form-hint mb-5">Most creators don't need this — it's for developers who ship their own software through Makenotwork.</p>
7 + <p class="form-hint mb-5">Most creators don't need this: it's for developers who ship their own software through Makenotwork.</p>
8 8
9 9 <!-- Create new app form -->
10 10 <details class="form-section user-synckit-create">
@@ -58,7 +58,7 @@
58 58 {% if let Some(s) = app.slug %}
59 59 <code class="user-synckit-code">{{ s }}</code>
60 60 {% else %}
61 - <span class="dimmed">&mdash;</span>
61 + <span class="dimmed">-</span>
62 62 {% endif %}
63 63 <button class="btn-small btn-secondary user-synckit-inline-btn"
64 64 onclick="syncKitShowSlugForm('{{ app.id }}', '{{ app.slug.as_deref().unwrap_or_default() }}')">Set</button>
@@ -72,7 +72,7 @@
72 72 <span class="text-sm dimmed"> / {{ ititle }}</span>
73 73 {% endif %}
74 74 {% else %}
75 - <span class="dimmed">&mdash;</span>
75 + <span class="dimmed">-</span>
76 76 {% endif %}
77 77 <button class="btn-small btn-secondary user-synckit-inline-btn"
78 78 onclick="syncKitShowLinkForm('{{ app.id }}')">Link</button>
@@ -31,7 +31,7 @@
31 31 <a href="/dashboard#tab-plan" class="join-complete-choice">
32 32 <div class="join-complete-card">
33 33 <div class="join-complete-card-title">I want to sell</div>
34 - <p class="join-complete-card-desc">Apply for creator access. 0% platform fee — only Stripe's ~3% processing.</p>
34 + <p class="join-complete-card-desc">Apply for creator access. 0% platform fee: only Stripe's ~3% processing.</p>
35 35 </div>
36 36 </a>
37 37 {% endif %}