exorcise: template user-facing copy
Batch B12 (templates). Converted ~44 prose em-dashes and — 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>
26 files changed,
+45 insertions,
-45 deletions
| 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 |
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 |
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 |
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 |
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 — 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 |
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> — 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> — 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> — 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 |
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 — 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 |
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 |
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 — 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 |
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> — 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 & 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 & 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>
|
|
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 & 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 & 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 |
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 |
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 — 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 |
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 — 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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 — 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 — 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 — 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 |
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://<token>@makenot.work/{{ username }}/{repo}.git</code>
|
| 40 |
40 |
|
</p>
|
| 41 |
41 |
|
|