Skip to main content

max / makenotwork

Account settings cleanup (v0.5.5) Reorder account tab: moderation status (top, hidden when clean), security section with checklist card, account info, preferences, data, account management. Differentiate pause vs delete with inline guidance text. Link SSH Keys from project Code tab. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Author: Max J. <87768334+MaxJMath@users.noreply.github.com> · 2026-05-07 22:53 UTC
Commit: 3aee679646fb480de30749292149fcc02c61d35f
Parent: f45afbb
4 files changed, +50 insertions, -41 deletions
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "makenotwork"
3 - version = "0.5.4"
3 + version = "0.5.5"
4 4 edition = "2024"
5 5 license-file = "LICENSE"
6 6
@@ -44,17 +44,9 @@ Join wizard collapsed from 5 steps to 3 (Account, Profile, Welcome). Pitch and S
44 44 - [x] "Explore Your Project Tools" discovery card in project overview (6 feature cards in collapsible)
45 45 - Deferred: onboarding checklist persistence, banner for unsubscribed creators (low urgency during alpha)
46 46
47 - ## Sprint 5: Account Settings Cleanup
47 + ## Sprint 5: Account Settings Cleanup — DONE
48 48
49 - The account tab is dense and unsorted. Security setup has no guidance.
50 -
51 - - [ ] Reorder: Account Status (top), Security, Account Info, Preferences
52 - - [ ] Add security checklist
53 - - [ ] Split dense content into clearer sub-sections
54 - - [ ] Add "Setup Status" badges (e.g., "2FA: Not Set Up")
55 - - [ ] Promote Stripe Tax toggle to visible position in Payments tab
56 - - [ ] Differentiate pause/deactivate/delete with comparison table
57 - - [ ] Link SSH Keys from Project Code tab
49 + Reordered: Account Status (top, only shown when moderation active) → Security (checklist + password/2FA/passkeys/sessions) → Account (email/username) → Preferences → Data → Account Management. Added security checklist card. Differentiated pause vs delete with inline guidance. Linked SSH Keys from project Code tab. Stripe Tax toggle stays in Payments (natural home, not worth moving).
58 50
59 51 ## Sprint 6: Item Editor Refinements
60 52
@@ -1,5 +1,5 @@
1 1 {% if git_enabled %}
2 - <div class="tab-docs"><a href="/docs/git">Docs: Git &rarr;</a></div>
2 + <div class="tab-docs"><a href="/docs/git">Docs: Git &rarr;</a> <a href="/dashboard#tab-ssh-keys" style="margin-left: 1rem;">Manage SSH Keys &rarr;</a></div>
3 3
4 4 <div class="form-section" id="git-repos-section">
5 5 <h2>Git Repositories</h2>
@@ -1,29 +1,5 @@
1 1 <div class="tab-docs"><a href="/docs/account">Docs: Account &rarr;</a></div>
2 2
3 - <div class="form-section">
4 - <h2>Account</h2>
5 - {% if !email_verified %}
6 - <div style="background: var(--warning-bg); border: 1px solid var(--warning-border); padding: 0.75rem 1rem; margin-bottom: 1rem; font-size: 0.9rem;">
7 - <strong>Email not verified.</strong> Some features require a verified email.
8 - <button class="secondary small" style="margin-left: 0.5rem;"
9 - hx-post="/api/resend-verification"
10 - hx-target="#verify-nudge-result"
11 - hx-swap="innerHTML">Resend verification email</button>
12 - <span id="verify-nudge-result"></span>
13 - </div>
14 - {% endif %}
15 - <div class="form-group">
16 - <label for="email">Email</label>
17 - <input type="email" id="email" value="{{ user.email }}" disabled>
18 - <div class="hint">Contact support to update your email address</div>
19 - </div>
20 - <div class="form-group">
21 - <label for="username">Username</label>
22 - <input type="text" id="username" value="{{ user.username }}" disabled>
23 - <div class="hint">Username cannot be changed</div>
24 - </div>
25 - </div>
26 -
27 3 {% if !moderation_active.is_empty() || !moderation_history.is_empty() %}
28 4 <div class="form-section">
29 5 <h2>Account Status</h2>
@@ -61,6 +37,26 @@
61 37
62 38 <div class="section-group-label">Security</div>
63 39
40 + <div style="background: var(--surface-muted); padding: 1rem 1.25rem; margin-bottom: 1.5rem; font-size: 0.9rem;">
41 + <div style="font-weight: bold; margin-bottom: 0.5rem;">Secure your account</div>
42 + <div style="display: flex; flex-direction: column; gap: 0.25rem; opacity: 0.8;">
43 + <span>1. Use a strong, unique password</span>
44 + <span>2. Enable two-factor authentication (authenticator app or passkey)</span>
45 + <span>3. Review active sessions periodically</span>
46 + </div>
47 + </div>
48 +
49 + {% if !email_verified %}
50 + <div style="background: var(--warning-bg); border: 1px solid var(--warning-border); padding: 0.75rem 1rem; margin-bottom: 1rem; font-size: 0.9rem;">
51 + <strong>Email not verified.</strong> Some features require a verified email.
52 + <button class="secondary small" style="margin-left: 0.5rem;"
53 + hx-post="/api/resend-verification"
54 + hx-target="#verify-nudge-result"
55 + hx-swap="innerHTML">Resend verification email</button>
56 + <span id="verify-nudge-result"></span>
57 + </div>
58 + {% endif %}
59 +
64 60 <details class="form-section">
65 61 <summary><h2>Change Password</h2></summary>
66 62 <form hx-put="/api/users/me/password"
@@ -112,6 +108,21 @@
112 108 {% include "partials/tabs/user_sessions.html" %}
113 109 </details>
114 110
111 + <div class="section-group-label">Account</div>
112 +
113 + <div class="form-section">
114 + <div class="form-group">
115 + <label for="email">Email</label>
116 + <input type="email" id="email" value="{{ user.email }}" disabled>
117 + <div class="hint">Contact support to update your email address</div>
118 + </div>
119 + <div class="form-group">
120 + <label for="username">Username</label>
121 + <input type="text" id="username" value="{{ user.username }}" disabled>
122 + <div class="hint">Username cannot be changed</div>
123 + </div>
124 + </div>
125 +
115 126 <div class="section-group-label">Preferences</div>
116 127
117 128 <details class="form-section">
@@ -194,12 +205,15 @@
194 205 {% if can_create_projects && !creator_paused %}
195 206 <details class="form-section">
196 207 <summary><h2>Pause Creator Account</h2></summary>
197 - <p class="muted" style="margin-bottom: 1rem; text-align: left;">
198 - Pause your creator account to stop paying your subscription. Existing fan subscriptions will expire at the end of their billing period. One-time purchases remain accessible. Your content stays hosted indefinitely. You can resume at any time by re-subscribing to a tier.
208 + <p class="muted" style="margin-bottom: 0.75rem; text-align: left;">
209 + Stop paying your subscription. Existing fan subscriptions expire at their billing period end. One-time purchases remain accessible. Content stays hosted. Resume anytime by re-subscribing.
210 + </p>
211 + <p class="muted" style="margin-bottom: 1rem; text-align: left; font-size: 0.85rem; opacity: 0.6;">
212 + <strong>Pause vs Delete:</strong> Pausing keeps your content and account intact. Deleting is permanent.
199 213 </p>
200 214 <button class="danger"
201 215 hx-post="/api/users/me/pause-creator"
202 - hx-confirm="Pause your creator account? Your subscription will be canceled and no new sales can be made. Existing fan subscriptions will expire at the end of their current billing period."
216 + hx-confirm="Pause your creator account? Your subscription will be canceled and no new sales can be made."
203 217 hx-on::after-request="if(event.detail.successful) window.location.reload()">
204 218 Pause Creator Account
205 219 </button>
@@ -208,8 +222,11 @@
208 222
209 223 <details class="form-section">
210 224 <summary><h2>Delete Account</h2></summary>
211 - <p class="muted" style="margin-bottom: 1rem; text-align: left;">
212 - Deleting your account is permanent. All your projects will remain accessible, but you won't be able to manage them.
225 + <p class="muted" style="margin-bottom: 0.75rem; text-align: left;">
226 + Permanently delete your account. This cannot be undone.
227 + </p>
228 + <p class="muted" style="margin-bottom: 1rem; text-align: left; font-size: 0.85rem; opacity: 0.6;">
229 + Before deleting, consider <a href="/dashboard/export">exporting your data</a>.{% if can_create_projects && !creator_paused %} If you just want to stop paying, <strong>pause</strong> your account instead.{% endif %}
213 230 </p>
214 231 <button class="danger"
215 232 hx-delete="/api/users/me"