Skip to main content

max / makenotwork

Item editor refinements (v0.5.6) Sections management moved to collapsible details element (auto-open when sections exist). Suggested section names in empty state. Pricing strategy guide added to top of pricing tab explaining fixed, PWYW, free+codes, and license key approaches. Clarified PWYW + license key compatibility. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Author: Max J. <87768334+MaxJMath@users.noreply.github.com> · 2026-05-07 23:08 UTC
Commit: 67b770c3e4bfc44acd124de89786251fe6d14494
Parent: 3aee679
4 files changed, +29 insertions, -22 deletions
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "makenotwork"
3 - version = "0.5.5"
3 + version = "0.5.6"
4 4 edition = "2024"
5 5 license-file = "LICENSE"
6 6
@@ -48,19 +48,16 @@ Join wizard collapsed from 5 steps to 3 (Account, Profile, Welcome). Pitch and S
48 48
49 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).
50 50
51 - ## Sprint 6: Item Editor Refinements
52 -
53 - Small improvements to the item editing experience.
54 -
55 - - [ ] Move Sections management to its own collapsible area
56 - - [ ] Add tip/callout about Sections feature
57 - - [ ] Suggest default sections on first item creation based on type
58 - - [ ] Add section at top of pricing tab explaining strategies with examples
59 - - [ ] Clarify whether PWYW + license keys can combine
60 - - [ ] Add real-time validation to pricing fields with format examples
61 - - [ ] Ensure item type descriptions always render in wizard
62 - - [ ] Show allowed file types before upload attempt
63 - - [ ] Show tier-specific file size limit with upgrade link
51 + ## Sprint 6: Item Editor Refinements — DONE
52 +
53 + - [x] Move Sections management to collapsible details (auto-open when sections exist)
54 + - [x] Add tip/callout about Sections (explanation + suggested section names in empty state)
55 + - [x] Pricing strategy guide at top of pricing tab (fixed, PWYW, free+codes, license keys)
56 + - [x] Clarified PWYW + license keys compatibility in license key description
57 + - [x] Item type descriptions already render (audit false negative — type_card_desc in wizard)
58 + - [x] File type hints already shown (MP3/WAV/FLAC/OGG/AAC for audio, MP4/WebM/MOV for video)
59 + - [x] Tier-specific file size limit already validated client-side with upgrade message
60 + - Deferred: real-time pricing validation (low value — server validates on save)
64 61
65 62 ## Sprint 7: Collections Everywhere
66 63
@@ -173,15 +173,15 @@
173 173 {% endif %}
174 174
175 175 <!-- Sections Management -->
176 - <div class="content-section" id="sections-management">
177 - <div class="section-header">
178 - <h2>Sections (<span id="section-count">{{ sections.len() }}</span>)</h2>
179 - </div>
180 - <p style="font-size: 0.85rem; opacity: 0.7; margin-bottom: 1rem;">Tabbed content blocks shown on the public item page (e.g. Features, Installation, Specs). Max 10.</p>
176 + <details class="content-section" id="sections-management"{% if !sections.is_empty() %} open{% endif %}>
177 + <summary style="cursor: pointer;">
178 + <h2 style="display: inline;">Sections (<span id="section-count">{{ sections.len() }}</span>)</h2>
179 + </summary>
180 + <p style="font-size: 0.85rem; opacity: 0.7; margin: 0.75rem 0 1rem;">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>
181 181
182 182 <div id="sections-list">
183 183 {% if sections.is_empty() %}
184 - <p id="sections-empty" style="opacity: 0.7;">No sections yet.</p>
184 + <p id="sections-empty" style="opacity: 0.7;">No sections yet. Common sections: Features, Installation, Specs, FAQ, Changelog.</p>
185 185 {% else %}
186 186 {% for section in sections %}
187 187 <div class="section-mgmt-row" data-id="{{ section.id }}" style="display: flex; align-items: center; gap: 0.75rem; padding: 0.6rem 0; border-bottom: 1px solid var(--border);">
@@ -231,7 +231,7 @@
231 231 </div>
232 232 <span id="sec-edit-status" style="margin-left: 0.5rem; font-size: 0.85rem;"></span>
233 233 </div>
234 - </div>
234 + </details>
235 235 <!-- Publishing (merged from Settings) -->
236 236 <div class="content-section">
237 237 <div class="section-header">
@@ -1,3 +1,13 @@
1 + <div style="background: var(--surface-muted); padding: 1rem 1.25rem; margin-bottom: 1.5rem; font-size: 0.9rem;">
2 + <div style="font-weight: bold; margin-bottom: 0.5rem;">Pricing strategies</div>
3 + <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 0.75rem; opacity: 0.8;">
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 + </div>
9 + </div>
10 +
1 11 <!-- Pay What You Want -->
2 12 <div class="content-section">
3 13 <div class="section-header">
@@ -84,7 +94,7 @@
84 94 onchange="document.getElementById('license-keys-section').style.display = this.checked ? 'block' : 'none'">
85 95 Enable license keys for this item
86 96 </label>
87 - <p class="form-hint">Buyers receive a unique license key with their purchase. Each key can be activated on a limited number of devices (you choose). Useful for software with per-seat licensing.</p>
97 + <p class="form-hint">Buyers receive a unique license key with their purchase. Each key can be activated on a limited number of devices (you choose). Useful for software with per-seat licensing. Works with any pricing model including Pay What You Want.</p>
88 98 </div>
89 99
90 100 <div class="form-group">