max / makenotwork
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> — 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> | |
| 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-<slug></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-<slug></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">—</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 →</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">—</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">—</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 %} |