Skip to main content

max / makenotwork

exorcise: template user-facing copy Batch B12 (templates). Converted ~44 prose em-dashes and &mdash; entities in rendered text (sentences, list lead-ins, form hints, option labels) to colons/commas/periods across 26 templates. Verified: punctuation + capitalization + entity-removal only (no words changed); cargo check clean (all Askama templates compile). Deliberately left as intentional UI, not AI tells: <title>X — Makenot.work separators (6), 'Buy Now — {price}' / 'Get — Free' button labels, the {% else %}—{% endif %} empty-value placeholder glyph, Askama {# #} comments, and admin tooltip/dimmed separators. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-12 17:25 UTC
Commit: 985532846bf4b6caf652416de224acf71345610b
Parent: b0a0b36
26 files changed, +45 insertions, -45 deletions
@@ -5,7 +5,7 @@
5 5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 6 {% if let Some(token) = csrf_token %}<meta name="csrf-token" content="{{ token }}">{% endif %}
7 7 <title>{% block title %}Makenotwork{% endblock %}</title>
8 - <meta name="description" content="{% block meta_description %}Sell your work directly. 0% platform fee — only Stripe's ~3% processing. Music, software, writing, and more.{% endblock %}">
8 + <meta name="description" content="{% block meta_description %}Sell your work directly. 0% platform fee, only Stripe's ~3% processing. Music, software, writing, and more.{% endblock %}">
9 9
10 10 {# Global OG / Twitter card metadata. Per-page templates emit their own
11 11 og:title / og:description / og:image / og:url / twitter:* tags from
@@ -20,10 +20,10 @@
20 20 recipient opts in. Two patterns:
21 21 </p>
22 22 <ul class="text-sm dimmed">
23 - <li><strong>Unique code per creator</strong> — name it after the recipient (for
23 + <li><strong>Unique code per creator</strong>: name it after the recipient (for
24 24 example ALPHA-JAMIE) and set Max uses to 1. The status shows Unused until
25 25 they redeem, then Redeemed.</li>
26 - <li><strong>Reusable code to share</strong> — leave Max uses blank. Anyone can
26 + <li><strong>Reusable code to share</strong>: leave Max uses blank. Anyone can
27 27 redeem it, but each individual only once; the Uses count is the number of
28 28 distinct people who have redeemed.</li>
29 29 </ul>
@@ -11,7 +11,7 @@
11 11
12 12 {% if let Some(su) = session_user %}{% if su.is_sandbox %}
13 13 <div class="banner banner--info" role="status">
14 - Sandbox mode — your data will be deleted when the session expires.
14 + Sandbox mode: your data will be deleted when the session expires.
15 15 <a href="/join">Create an account</a> to keep your work.
16 16 </div>
17 17 {% endif %}{% endif %}
@@ -11,7 +11,7 @@
11 11
12 12 {% if let Some(su) = session_user %}{% if su.is_sandbox %}
13 13 <div class="banner banner--info" role="status">
14 - Sandbox mode — your data will be deleted when the session expires.
14 + Sandbox mode: your data will be deleted when the session expires.
15 15 <a href="/join">Create an account</a> to keep your work.
16 16 </div>
17 17 {% endif %}{% endif %}
@@ -113,7 +113,7 @@
113 113 {% else %}
114 114 <a href="/login?redirect=/i/{{ item.id }}" class="btn-primary">Log in to purchase</a>
115 115 {% endif %}
116 - <p class="audio-fee-note">Support {{ creator_username }} directly &mdash; 0% platform fee.</p>
116 + <p class="audio-fee-note">Support {{ creator_username }} directly, 0% platform fee.</p>
117 117 {% endif %}
118 118 </div>
119 119
@@ -37,15 +37,15 @@
37 37 <div class="radio-group">
38 38 <label class="radio-label">
39 39 <input type="radio" name="visibility" value="public" {% if repo.visibility == "public" %}checked{% endif %}>
40 - <strong>Public</strong> &mdash; Anyone can see this repository
40 + <strong>Public</strong>: Anyone can see this repository
41 41 </label>
42 42 <label class="radio-label">
43 43 <input type="radio" name="visibility" value="unlisted" {% if repo.visibility == "unlisted" %}checked{% endif %}>
44 - <strong>Unlisted</strong> &mdash; Accessible via direct URL only
44 + <strong>Unlisted</strong>: Accessible via direct URL only
45 45 </label>
46 46 <label class="radio-label">
47 47 <input type="radio" name="visibility" value="private" {% if repo.visibility == "private" %}checked{% endif %}>
48 - <strong>Private</strong> &mdash; Only you can see this repository
48 + <strong>Private</strong>: Only you can see this repository
49 49 </label>
50 50 </div>
51 51 </div>
@@ -47,7 +47,7 @@
47 47 </li>
48 48 <li class="do-card">
49 49 <h3 class="do-card-title">Fan engagement, built in</h3>
50 - <p class="do-card-lede">Profile, blog, mailing list, memberships, tips &mdash; no add-ons.</p>
50 + <p class="do-card-lede">Profile, blog, mailing list, memberships, tips. No add-ons.</p>
51 51 <ul class="do-card-links">
52 52 <li><a href="/docs/profile">Profiles</a></li>
53 53 <li><a href="/docs/blog">Blogs</a></li>
@@ -60,7 +60,7 @@
60 60 run through our
61 61 <a href="/docs/content-scanning">six-layer scanning pipeline</a>
62 62 (content-type, structural, archive, YARA, ClamAV, MalwareBazaar) before
63 - it's released, but scanning can't prove a file is safe — use antivirus
63 + it's released, but scanning can't prove a file is safe. Use antivirus
64 64 software and download at your own risk. Report concerns to
65 65 <a href="mailto:reports@makenot.work">reports@makenot.work</a>.
66 66 </div>
@@ -15,7 +15,7 @@
15 15 {% if sso_enabled %}
16 16 <div class="sso-login">
17 17 <h2 class="subtitle-h2">Log in</h2>
18 - <p class="login-prose">testnot.work is a preview of makenot.work. Sign in with your makenot.work account to continue &mdash; your password is only ever entered on makenot.work.</p>
18 + <p class="login-prose">testnot.work is a preview of makenot.work. Sign in with your makenot.work account to continue. Your password is only ever entered on makenot.work.</p>
19 19 <a class="btn-primary btn--large" href="/sso/login">Sign in with Makenot<span class="dot">.</span>work</a>
20 20 </div>
21 21 {% else %}
@@ -80,12 +80,12 @@
80 80 <div class="policy-section">
81 81 <h2 class="section-header">Other Policies</h2>
82 82 <ul>
83 - <li><a href="/docs/legal/terms-of-service">Terms of Service</a> &mdash; what you agree to by using Makenot.work</li>
84 - <li><a href="/docs/legal/privacy-policy">Privacy Policy</a> &mdash; what we collect, why, and how to exercise your rights</li>
85 - <li><a href="/docs/legal/payments">Payments &amp; Refunds</a> &mdash; merchant-of-record model, refunds, chargebacks</li>
86 - <li><a href="/docs/legal/acceptable-use">Acceptable Use</a> &mdash; specific behaviour that gets accounts suspended</li>
87 - <li><a href="/docs/legal/copyright">Copyright &amp; DMCA</a> &mdash; how takedowns and counter-notifications work</li>
88 - <li><a href="/docs/legal/appeals">Appeals</a> &mdash; how to challenge a moderation decision</li>
83 + <li><a href="/docs/legal/terms-of-service">Terms of Service</a>: what you agree to by using Makenot.work</li>
84 + <li><a href="/docs/legal/privacy-policy">Privacy Policy</a>: what we collect, why, and how to exercise your rights</li>
85 + <li><a href="/docs/legal/payments">Payments &amp; Refunds</a>: merchant-of-record model, refunds, chargebacks</li>
86 + <li><a href="/docs/legal/acceptable-use">Acceptable Use</a>: specific behaviour that gets accounts suspended</li>
87 + <li><a href="/docs/legal/copyright">Copyright &amp; DMCA</a>: how takedowns and counter-notifications work</li>
88 + <li><a href="/docs/legal/appeals">Appeals</a>: how to challenge a moderation decision</li>
89 89 </ul>
90 90 </div>
91 91
@@ -10,8 +10,8 @@
10 10 <h2 class="subtitle-h2">Creator Sandbox</h2>
11 11 <p class="sandbox-description">
12 12 Explore the full creator dashboard without signing up.
13 - Create projects, manage items, set pricing, write blog posts
14 - — everything works just like a real account.
13 + Create projects, manage items, set pricing, write blog posts.
14 + Everything works just like a real account.
15 15 </p>
16 16 <ul class="sandbox-details">
17 17 <li>Your sandbox lasts <strong>1 hour</strong></li>
@@ -88,7 +88,7 @@
88 88 {% else %}
89 89 <a href="/login?redirect=/i/{{ item.id }}" class="btn-primary">Log in to purchase</a>
90 90 {% endif %}
91 - <p class="store-cta-note">Support {{ creator_username }} directly &mdash; 0% platform fee.</p>
91 + <p class="store-cta-note">Support {{ creator_username }} directly, 0% platform fee.</p>
92 92 {% endif %}
93 93 </div>
94 94
@@ -107,7 +107,7 @@
107 107 {% else %}
108 108 <a href="/login?redirect=/i/{{ item.id }}" class="btn-primary">Log in to purchase</a>
109 109 {% endif %}
110 - <p class="video-cta-fineprint">Support {{ creator_username }} directly &mdash; 0% platform fee.</p>
110 + <p class="video-cta-fineprint">Support {{ creator_username }} directly, 0% platform fee.</p>
111 111 {% endif %}
112 112 </div>
113 113
@@ -77,7 +77,7 @@
77 77 hx-post="/api/admin/uploads/versions/{{ vid }}/quarantine"
78 78 hx-target="#uploads-table"
79 79 hx-swap="innerHTML"
80 - hx-confirm="Quarantine this upload? Quarantine is sticky — the file stays in DB for audit but is unavailable to fans.">Quarantine</button>
80 + hx-confirm="Quarantine this upload? Quarantine is sticky: the file stays in DB for audit but is unavailable to fans.">Quarantine</button>
81 81 {% else %}
82 82 <button class="btn-primary small"
83 83 hx-post="/api/admin/uploads/items/{{ upload.item_id }}/promote"
@@ -1,6 +1,6 @@
1 1 {% if let Some(token) = new_token %}
2 2 <div class="git-token-new">
3 - <p class="git-token-new-label">Copy this token now — it will not be shown again:</p>
3 + <p class="git-token-new-label">Copy this token now. It will not be shown again:</p>
4 4 <code class="git-token-value">{{ token }}</code>
5 5 <p class="hint">Use it as the password (or in the URL) for
6 6 <code>git clone https://{{ token }}@makenot.work/owner/repo.git</code></p>
@@ -34,7 +34,7 @@
34 34 <div class="synckit-billing-body">
35 35
36 36 {% if b.is_internal %}
37 - <p class="form-hint">First-party app — billing is not collected.</p>
37 + <p class="form-hint">First-party app: billing is not collected.</p>
38 38
39 39 {% else %}
40 40 {# Setup step: no Stripe customer yet → show "Set up billing" button. #}
@@ -92,7 +92,7 @@
92 92
93 93 <div class="synckit-billing-summary-line">
94 94 <span class="synckit-price-preview">{{ b.floor_display }}</span>
95 - <span class="form-hint">/ month — {{ b.rate_per_gb_display }}/GB, floored at {{ b.floor_display }} (Stripe fee)</span>
95 + <span class="form-hint">/ month: {{ b.rate_per_gb_display }}/GB, floored at {{ b.floor_display }} (Stripe fee)</span>
96 96 </div>
97 97
98 98 <div class="synckit-billing-actions">
@@ -1,5 +1,5 @@
1 1 <div class="content-section">
2 - <p class="form-hint mb-5">Curate lists of items — playlists, reading lists, bundles. Public collections appear on your profile.</p>
2 + <p class="form-hint mb-5">Curate lists of items: playlists, reading lists, bundles. Public collections appear on your profile.</p>
3 3
4 4 {% if collections.is_empty() %}
5 5 <p class="muted">No collections yet. Use the form below to create your first one, then add items from any item page.</p>
@@ -211,5 +211,5 @@
211 211 <button class="btn-secondary nowrap" type="button"
212 212 hx-post="/dashboard/feed/regenerate" hx-target="#feed-url-row" hx-swap="outerHTML">Regenerate</button>
213 213 </div>
214 - <p class="muted profile-feed-lead">Regenerating issues a new URL and immediately stops the old one from working — use it if your feed link leaks.</p>
214 + <p class="muted profile-feed-lead">Regenerating issues a new URL and immediately stops the old one from working. Use it if your feed link leaks.</p>
215 215 </details>
@@ -40,12 +40,12 @@
40 40 {% if projects.is_empty() %}
41 41 <div class="info-box user-projects-getting-started">
42 42 <h3>Getting Started</h3>
43 - <p>Welcome to Makenotwork. A <strong>project</strong> groups your work &mdash; think of it as an album, podcast feed, or product line. Each project contains <strong>items</strong>: individual tracks, episodes, downloads, or posts.</p>
43 + <p>Welcome to Makenotwork. A <strong>project</strong> groups your work. Think of it as an album, podcast feed, or product line. Each project contains <strong>items</strong>: individual tracks, episodes, downloads, or posts.</p>
44 44 <ol class="user-projects-steps">
45 45 <li>Create a project</li>
46 - <li>Add items &mdash; audio, video, text, or software</li>
46 + <li>Add items: audio, video, text, or software</li>
47 47 <li>Set prices (or keep them free) and publish</li>
48 - <li>Connect your payment account &mdash; 0% platform fee</li>
48 + <li>Connect your payment account, 0% platform fee</li>
49 49 </ol>
50 50 {% if can_create_projects %}
51 51 <a href="/dashboard/new-project" class="btn-primary user-projects-cta">Create Your First Project</a>
@@ -35,7 +35,7 @@
35 35 <div class="form-section">
36 36 <h2 class="subsection-title">Access Tokens (HTTPS)</h2>
37 37 <p class="credentials-lead">
38 - Personal access tokens for git over HTTPS — use a token as the password.
38 + Personal access tokens for git over HTTPS. Use a token as the password.
39 39 Clone URL: <code>https://&lt;token&gt;@makenot.work/{{ username }}/{repo}.git</code>
40 40 </p>
41 41