Skip to main content

max / makenotwork

v0.2.10: OTA updates (S6), CI/Build pipeline (S7), fan collections, doc audit SyncKit S6 — OTA Updates: - Migration 033: ota_releases, ota_artifacts tables, slug on sync_apps - 7 OTA endpoints (release CRUD, artifact upload, updater check, download redirect) - Presigned S3 artifact delivery, semver comparison, Tauri-compatible protocol - 13 integration tests, ota-publish.sh deploy script SyncKit S7 — CI/Build Pipeline: - Migration 034: ota_build_configs, ota_builds tables - Build runner: SSH-based remote execution, post-receive hooks, scheduler dispatch - 9 management endpoints (config CRUD, trigger, build list/detail/cancel) - Internal trigger endpoint (Bearer token auth for git hooks) - mnw-admin install-hooks subcommand, auto-install on repo creation - 10 integration tests Fan collections (Phase 13): - Migration 032: collections tables - CRUD + reorder + public sharing, dashboard tab, profile integration Git browser enhancements: - Split routes/git.rs into directory module (browsing.rs, raw.rs) - Blame view, commit detail, repos index page - Git nav partial, improved templates Fan+ accounts: - Migration 031: fan_plus tables - Stripe subscription integration, promo code generation Other: - Doc audit: 68 docs reviewed, consolidated duplicates, accuracy fixes - HTML build script for public docs (pandoc-generated) - Caddyfile updates for git.makenot.work browser redirect - Landing page: use cases page, collection showcase - Stripe checkout and webhook enhancements - Email notification improvements - Validation and type safety additions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Author: Max J. <87768334+MaxJMath@users.noreply.github.com> · 2026-03-16 05:15 UTC
Commit: 972afc7f2dd652a45b95fd7d95b0ac715a8dcb5f
Parent: 2536e58
182 files changed, +12836 insertions, -4576 deletions
@@ -1,6 +1,6 @@
1 1 # Service Level Agreement
2 2
3 - Binding commitments from Makenot.work to every creator on the platform. These are not aspirations — they are enforceable guarantees backed by public source code and published documentation.
3 + Binding commitments from Makenot.work to every creator on the platform. These are not aspirations — they are verifiable guarantees backed by public source code and versioned documentation. If we break them, you can see it in the code and export your data immediately.
4 4
5 5 ---
6 6
@@ -25,7 +25,6 @@ Exports include:
25 25 - Complete metadata and organization structure
26 26 - Fan/subscriber list (emails, contact info when fans consent to share)
27 27 - Complete transaction and payment history
28 - - Analytics and engagement data (anonymized for fan privacy)
29 28
30 29 **Format:** Original files, JSON metadata, CSV transactions.
31 30
@@ -41,24 +40,11 @@ Exports include:
41 40
42 41 ---
43 42
44 - ## Content Archive
45 -
46 - *This guarantee is not yet implemented. The 12-month clock will not start counting until after the alpha period ends.*
47 -
48 - **Guarantee:** Any content that has existed on the platform for 12 months or more (not including comped months from the earn-back credit program) will remain hosted and accessible to fans even if the creator stops paying for their account.
49 -
50 - - Archived content stays live at its original URLs.
51 - - Fans who purchased the content retain access.
52 - - The creator cannot upload new content without reactivating their subscription.
53 - - The creator can still export their data and delete their account at any time.
54 -
55 - ---
56 -
57 43 ## Audience Ownership
58 44
59 45 **Guarantee:** Creators own their fan relationships.
60 46
61 - When fans subscribe or follow you, they can share contact information directly with you. We facilitate the connection; you own it. Fan-shared contact info is end-to-end encrypted — we cannot read it.
47 + When fans subscribe or follow you, they can share contact information directly with you. We facilitate the connection; you own it.
62 48
63 49 If you leave, your fans come with you.
64 50
@@ -78,7 +64,7 @@ If you leave, your fans come with you.
78 64 **Guarantee:** If Makenot.work shuts down, the following process applies:
79 65
80 66 1. 90-day advance notice minimum before any service interruption.
81 - 2. Extended export window with full functionality maintained.
67 + 2. Full export access maintained for the entire 90-day notice period.
82 68 3. Data preservation — all content remains accessible for download.
83 69 4. Fan notification — we help communicate the transition to your audience.
84 70 5. Source code remains available for reference.
@@ -117,18 +103,6 @@ No browsing profiles. No behavioral tracking. No selling data. Verifiable in the
117 103
118 104 ---
119 105
120 - ## Moderation
121 -
122 - *This guarantee is not yet active. As a one-person operation, we cannot yet implement independent appeal review. Until we have the team to support it, moderation decisions are made directly and in good faith. This section describes the standard we are building toward.*
123 -
124 - **Guarantee:** If we moderate content or take action on an account:
125 -
126 - - Clear written explanation of the policy violated.
127 - - Opportunity to appeal, reviewed by someone other than the original decision-maker.
128 - - Data export access preserved even during suspension (excluding content we cannot legally host).
129 -
130 - ---
131 -
132 106 ## Enforcement
133 107
134 108 These guarantees are enforceable through three mechanisms:
@@ -139,6 +113,33 @@ These guarantees are enforceable through three mechanisms:
139 113
140 114 ---
141 115
116 + ## Planned Guarantees
117 +
118 + The following guarantees are commitments we are building toward. They are not yet active but will become enforceable SLA items once the alpha period ends.
119 +
120 + ### Content Archive
121 +
122 + *The 12-month clock will not start counting until after the alpha period ends.*
123 +
124 + Any content that has existed on the platform for 12 months or more (not including comped months from the earn-back credit program) will remain hosted and accessible to fans even if the creator stops paying for their account.
125 +
126 + - Archived content stays live at its original URLs.
127 + - Fans who purchased the content retain access.
128 + - The creator cannot upload new content without reactivating their subscription.
129 + - The creator can still export their data and delete their account at any time.
130 +
131 + ### Moderation Appeals
132 +
133 + *As a one-person operation, we cannot yet implement independent appeal review. Until we have the team to support it, moderation decisions are made directly and in good faith.*
134 +
135 + If we moderate content or take action on an account:
136 +
137 + - Clear written explanation of the policy violated.
138 + - Opportunity to appeal, reviewed by someone other than the original decision-maker.
139 + - Data export access preserved even during suspension (excluding content we cannot legally host).
140 +
141 + ---
142 +
142 143 ## See Also
143 144
144 145 - [How We Work](./how-we-work.md) — Business model and pricing
@@ -56,11 +56,7 @@ At $10,000/month:
56 56
57 57 The gap widens as you grow. A percentage-cut platform is most expensive exactly when you're doing the best.
58 58
59 - ### The Costco Model
60 -
61 - Costco sells memberships, not markups. They pass products through at minimal profit. Members trust the prices are fair because Costco's incentive is membership retention, not maximizing per-item profit.
62 -
63 - We work the same way. Your subscription funds the platform. We have no reason to take a cut of your revenue or introduce artificial limits.
59 + Your subscription funds the platform. We have no reason to take a cut of your revenue or introduce artificial limits.
64 60
65 61 ---
66 62
@@ -70,8 +66,8 @@ We work the same way. Your subscription funds the platform. We have no reason to
70 66 |------|---------|-----------------|
71 67 | **Basic** | $10 | Text, all base features |
72 68 | **Small Files** | $20 | Audio, software, plugins, sample packs, small downloads |
73 - | **Big Files** | $30 | Video, large downloads, course content |
74 - | **Streaming** | $40 | Live streaming + everything below |
69 + | **Big Files** | $30 | Video, large downloads, course content (coming soon) |
70 + | **Streaming** | $40 | Live streaming + everything below (coming soon) |
75 71
76 72 Video and streaming cost more than audio. Audio costs more than text. The prices reflect what it actually costs to store and deliver each type.
77 73
@@ -82,8 +78,8 @@ Video and streaming cost more than audio. Audio costs more than text. The prices
82 78 | Blog posts, articles, newsletters | Basic ($10) |
83 79 | Music, podcasts, audio | Small Files ($20) |
84 80 | Software, plugins, sample packs | Small Files ($20) |
85 - | Video content, courses | Big Files ($30) |
86 - | Live streams | Streaming ($40) |
81 + | Video content, courses | Big Files ($30, coming soon) |
82 + | Live streams | Streaming ($40, coming soon) |
87 83
88 84 *Big Files and Streaming tier features (video upload, live streaming) are on the roadmap but not yet available. Creators on those tiers today get all current platform features plus priority access when video and streaming launch.*
89 85
@@ -105,7 +101,9 @@ Video and streaming cost more than audio. Audio costs more than text. The prices
105 101
106 102 ### Earn-Back Credit Program
107 103
108 - If you earn less on the platform than you paid in subscription fees during a 12-month period, the difference is credited as free months for the following year (capped at 12 months). Credits are calculated annually on your account anniversary.
104 + *Not yet implemented. The 12-month clock will not start counting until after the alpha period ends.*
105 +
106 + If you earn less on the platform than you paid in subscription fees during a 12-month period, the difference will be credited as free months for the following year (capped at 12 months). Credits will be calculated annually on your account anniversary.
109 107
110 108 ### Add-Ons
111 109
@@ -151,16 +149,13 @@ Content that has been on the platform for 12 months or more (not including compe
151 149
152 150 We use search and hierarchical tags. Fans find content because they're looking for it.
153 151
154 - This means you need to bring an audience (or build one elsewhere). We're infrastructure for creator-fan relationships, not a discovery engine. We want to help creators attract audiences eventually, but not at the cost of our core business.
152 + This means you need to bring an audience (or build one elsewhere). We're infrastructure for creator-fan relationships, not a discovery engine.
155 153
156 154 ---
157 155
158 156 ## Source Available
159 157
160 - Source code is publicly available. Verify every claim by reading it.
161 -
162 - - **Trust requires transparency.** You can verify our claims about privacy and data handling.
163 - - **Accountability.** Public code means public scrutiny of our practices.
158 + Source code is publicly available. You can audit our privacy practices, data handling, and every claim on this site by reading the code.
164 159
165 160 ---
166 161
@@ -31,7 +31,7 @@ Everything listed here is live and working.
31 31
32 32 ### Discovery & Organization
33 33
34 - - **Discover page**: Browse items or projects with full-text search (fuzzy matching on titles, descriptions, usernames)
34 + - **Discover page**: Browse items or projects with search across titles, descriptions, and usernames
35 35 - **Filters**: Item type (Audio, Text, Digital, Physical), price range, tags, project category, sort by newest/price/popular
36 36 - **Hierarchical tags**: Multi-level tag tree with breadcrumb navigation, primary tag designation per item
37 37 - **Project categories**: 12 built-in categories (Music, Band, Podcast, Blog, Software, Art, etc.) plus user-created categories
@@ -62,40 +62,39 @@ Everything listed here is live and working.
62 62
63 63 - **0% platform fee**: Payments go directly to creator-controlled Stripe accounts
64 64 - **Stripe Connect onboarding**: Guided setup, connected account status tracking
65 - - **Webhook processing**: Checkout completion, refunds, subscription lifecycle (active, past due, canceled), renewal billing
66 - - **Atomic checkout**: Row-level locking prevents double-purchases and race conditions
65 + - **Automated payment handling**: Checkout completion, refunds, subscription updates (active, past due, canceled), renewal billing
66 + - **Reliable checkout**: Purchases are processed safely with no risk of double-charges
67 67
68 68 ### Security
69 69
70 - - **2FA/TOTP**: Time-based one-time passwords with QR code setup and 10 backup codes
70 + - **Two-factor authentication (2FA)**: One-time passwords with QR code setup and 10 backup codes
71 71 - **Session management**: View active sessions (device, IP, last active), revoke individual or all other sessions
72 72 - **Account lockout**: 5 failed login attempts triggers 15-minute lockout with email bypass
73 73 - **New device notifications**: Opt-in email when a new device logs into your account
74 - - **Password breach checking**: HIBP k-anonymity API check on signup and password change (advisory only)
75 - - **Passkeys/WebAuthn**: Passwordless, phishing-resistant login
76 - - **CSRF protection**: All mutations require valid tokens
77 - - **Rate limiting**: Per-endpoint limits across all public endpoints
74 + - **Password breach checking**: Warns you if your password has appeared in known data breaches (advisory only, your password is never shared)
75 + - **Passkeys**: Passwordless, phishing-resistant login (fingerprint, Face ID, hardware key)
76 + - **Request protection**: All actions are verified to prevent unauthorized access
77 + - **Rate limiting**: Protects against abuse across all public endpoints
78 78
79 79 ### Platform
80 80
81 81 - **Source-available codebase**: PolyForm Noncommercial 1.0.0
82 82 - **Creator waitlist**: Invite-only launch with lottery waves and hand-picked approvals
83 - - **Admin CLI** (`mnw-admin`): Command-line tool for waitlist management, creator approval, spam flagging, wave execution, stats, user suspension/unsuspension, appeal processing, revenue reports, transaction history, CSV data export, and S3 storage audits -- connects directly to the database, no web UI needed
84 - - **JSON-LD structured data**: Product, MusicRecording, BlogPosting, Article, ProfilePage, and CollectionPage schemas
85 - - **Documentation**: Server-rendered from markdown, auto-linked cross-references
86 - - **Transactional email**: Password reset, email verification, purchase receipts, subscription lifecycle, sale and follower notifications via Postmark with bounce/complaint suppression
87 - - **Git source browser**: Browse server-hosted bare repositories with syntax highlighting
83 + - **Admin tools**: Waitlist management, creator approval, suspension/appeal processing, revenue reports, data export
84 + - **Rich link previews**: Your content shows up properly when shared on social media, search engines, and podcast apps
85 + - **Documentation**: Creator guide covering the full platform
86 + - **Transactional email**: Password reset, email verification, purchase receipts, subscription updates, sale and follower notifications
87 + - **Git source browser**: Browse server-hosted repositories with syntax highlighting
88 88 - **SSH git access**: Clone and push to hosted repositories with SSH key authentication
89 - - **Health monitoring**: Real uptime tracking, database status, service connectivity checks
90 - - **Malware scanning**: ClamAV + YARA rules + MalwareBazaar hash lookup on file uploads
91 - - **Creator guide**: 12-page documentation covering the full UX surface area
92 - - **840+ automated tests**: Unit, integration, workflow, and health tests
89 + - **Health monitoring**: Uptime tracking, service connectivity checks
90 + - **Malware scanning**: Every uploaded file is scanned for malware before it's made available
91 + - **840+ automated tests**: Comprehensive test suite covering all platform features
93 92
94 93 ### Developer Infrastructure (SyncKit)
95 94
96 95 Cloud sync and OTA update infrastructure for indie app developers, hosted on Makenot.work.
97 96
98 - - **Cloud sync**: Push/pull changelog sync, cursor-based pagination, E2E encryption (ChaCha20-Poly1305 + Argon2)
97 + - **Cloud sync**: Push/pull changelog sync with end-to-end encryption (the server never sees your data)
99 98 - **Device management**: Register devices, track sync state per device, platform detection
100 99 - **API key system**: App registration, key generation and rotation
101 100 - **OAuth 2.0 + PKCE**: Browser-based authentication flow for desktop apps
@@ -17,3 +17,11 @@ So I built what I wanted to exist: infrastructure that charges a flat fee instea
17 17 ## Current Status
18 18
19 19 Private alpha. Self-funded, no investors, no exit strategy. See [Service Level Agreement](./guarantees.md) for commitments, [FAQ](../support/faq.md) for hard questions.
20 +
21 + ---
22 +
23 + ## See Also
24 +
25 + - [How We Work](./how-we-work.md) — Business model and pricing
26 + - [Roadmap](./roadmap.md) — What's built and what's next
27 + - [Getting Started](../guide/01-getting-started.md) — Create your account
@@ -30,7 +30,7 @@ Applications are reviewed in waves. You'll get an email when you're approved.
30 30
31 31 ## Connect Stripe
32 32
33 - Once approved as a creator, connect your Stripe account to receive payments:
33 + Stripe is the payment service that processes purchases from your fans and deposits money into your bank account. Once approved as a creator, connect your Stripe account to receive payments:
34 34
35 35 1. Go to your **Dashboard**
36 36 2. Click **Connect Stripe**
@@ -44,7 +44,7 @@ Payments go directly to your Stripe account. We never hold or touch your revenue
44 44 Projects are how you organize your work. Think of them like albums, podcast feeds, or product lines.
45 45
46 46 1. From your Dashboard, click **New Project**
47 - 2. Enter a **slug** (URL-safe name, e.g., `my-album`) and a **title**
47 + 2. Enter a **URL name** (e.g., `my-album` — this becomes `/p/my-album`) and a **title**
48 48 3. Choose a category (Music, Podcast, Software, Blog, Art, etc.)
49 49 4. Add a description
50 50
@@ -69,7 +69,7 @@ Items are individual pieces of content inside a project.
69 69
70 70 ## Publish
71 71
72 - 1. Make your item public: edit the item and toggle **is_public**
72 + 1. Make your item public: edit the item and switch on **Public**
73 73 2. Make your project public: edit the project and set **visibility** to public
74 74 3. Share your link: `/u/yourname`
75 75
@@ -8,7 +8,7 @@ Projects group your items under a single page with its own URL, settings, and fe
8 8
9 9 From your Dashboard, click **New Project**. You'll need:
10 10
11 - - **Slug**: URL-safe name (e.g., `my-album`). This becomes `/p/my-album`. Cannot be changed after creation.
11 + - **URL name**: A short name for your project's web address (e.g., `my-album` becomes `/p/my-album`). Cannot be changed after creation.
12 12 - **Title**: Display name shown on the project page.
13 13
14 14 ## Project Settings
@@ -30,15 +30,19 @@ Categories are used for discovery and filtering. Each project can have one categ
30 30 | Podcast | Podcast feeds |
31 31 | Blog | Writing and newsletters |
32 32 | Software | Apps, plugins, tools |
33 - | Art | Visual art, photography |
33 + | Art | Visual art, illustration |
34 + | Video | Video content, tutorials |
35 + | Writing | Long-form fiction, non-fiction |
36 + | Photography | Photo sets, stock photography |
34 37 | Education | Courses, tutorials |
35 - | Games | Game projects |
38 + | Games | Indie games, mods, TTRPG content |
39 + | Comics | Webcomics, graphic novels |
36 40
37 41 ## Visibility
38 42
39 43 Projects start as **drafts**. Draft projects and their items are invisible to everyone except you.
40 44
41 - To publish, set visibility to `public`. All published items within the project become discoverable.
45 + To publish, set visibility to **Public**. All published items within the project become discoverable.
42 46
43 47 ## Organizing Items
44 48
@@ -35,7 +35,7 @@ From the item settings, you can update:
35 35
36 36 Items start as drafts. To publish:
37 37
38 - 1. Edit the item and set **is_public** to true
38 + 1. Edit the item and switch on **Public**
39 39 2. Make sure the parent project is also public
40 40
41 41 Published items appear on your profile, in search results, and in RSS feeds.
@@ -17,14 +17,14 @@ Upload your audio file from the item's content tab. Large files are supported
17 17
18 18 ## Text
19 19
20 - Write directly in the markdown editor. Features include:
20 + Write directly in the editor using markdown (a simple formatting language — **bold**, *italic*, links, headers, and lists). Features include:
21 21
22 22 - **Live preview**: See rendered output as you type
23 23 - **Word count**: Automatically calculated
24 24 - **Reading time**: Estimated based on word count
25 25 - **Full markdown support**: Headers, lists, code blocks, links, images, tables
26 26
27 - Text content is stored and rendered on the platform. Fans read it in a clean, distraction-free view.
27 + Text content is stored and rendered on the platform. Fans read it without ads, recommendations, or sidebars.
28 28
29 29 ## Digital Downloads
30 30
@@ -12,16 +12,9 @@ From the item dashboard, add a new version:
12 12 - **Changelog** (optional): Up to 10,000 characters describing what changed
13 13 - **File**: Optionally attach a new file to this version
14 14
15 - ## How is_current Works
15 + ## Current Version
16 16
17 - Only one version per item can be marked as "current." When you create a new version:
18 -
19 - 1. All existing versions are marked `is_current = false`
20 - 2. The new version is marked `is_current = true`
21 -
22 - This happens atomically — there's no moment where zero or multiple versions are current.
23 -
24 - Fans downloading the item get the current version by default.
17 + Only one version per item is the "current" version — the one fans download by default. When you upload a new version, it automatically becomes current. The switch is instant; there's no gap where fans see the wrong version.
25 18
26 19 ## Changelogs
27 20
@@ -33,7 +26,7 @@ Each version tracks its download count independently. This helps you see which v
33 26
34 27 ## Listing Versions
35 28
36 - The public version list is ordered newest-first (by creation date). Only published items expose their version list — draft items return a 404.
29 + The public version list is ordered newest-first (by creation date). Only published items show their version list — draft items keep versions hidden.
37 30
38 31 ## Validation
39 32
@@ -10,7 +10,7 @@ From the item dashboard, add chapters to any audio item:
10 10
11 11 - **Title** (required): 1-200 characters
12 12 - **Start seconds** (required): Timestamp where the chapter begins (e.g., `0`, `30.5`, `125`)
13 - - **Sort order**: Integer controlling display order (default: 0)
13 + - **Sort order**: Number controlling display order (default: 0)
14 14
15 15 ## Editing and Deleting
16 16
@@ -18,13 +18,13 @@ Update any chapter's title, timestamp, or sort order. Delete chapters you no lon
18 18
19 19 ## Ordering
20 20
21 - Chapters are displayed sorted by `sort_order` first, then by `start_seconds`. If all chapters have the same sort order, they appear in timestamp order.
21 + Chapters are displayed sorted by sort order first, then by start time. If all chapters have the same sort order, they appear in timestamp order.
22 22
23 23 Create chapters in any order — the system sorts them for display.
24 24
25 25 ## Ownership
26 26
27 - Only the item's creator can add, edit, or delete chapters. Other creators receive a 403 if they try.
27 + Only the item's creator can add, edit, or delete chapters.
28 28
29 29 ## Validation
30 30
@@ -32,11 +32,11 @@ Only the item's creator can add, edit, or delete chapters. Other creators receiv
32 32 |-------|------|
33 33 | Title | 1-200 characters, required |
34 34 | Start seconds | Non-negative number, required |
35 - | Sort order | Integer, default 0 |
35 + | Sort order | Whole number, default 0 |
36 36
37 37 ## Draft Items
38 38
39 - Chapter lists are only visible for published items. If the item is still a draft, the chapters endpoint returns 404 for unauthenticated users. The creator can still manage chapters while the item is in draft.
39 + Chapter lists are only visible for published items. If the item is still a draft, chapters won't be shown to anyone except you. You can still manage chapters while the item is in draft.
40 40
41 41 ---
42 42
@@ -23,7 +23,7 @@ Offer recurring monthly subscriptions per project:
23 23 - Fans subscribe through Stripe Checkout
24 24 - Stripe handles billing, renewals, and cancellations
25 25
26 - Subscription lifecycle events (active, past due, canceled, renewed) are processed automatically via Stripe webhooks.
26 + Subscription status changes (active, past due, canceled, renewed) sync from Stripe via webhooks and update your dashboard automatically.
27 27
28 28 ## License Keys
29 29
@@ -21,8 +21,8 @@ When a fan purchases from you, they can opt in to share their email address. Thi
21 21
22 22 1. At checkout, the fan sees a "Share your email with this creator" option
23 23 2. If they opt in, their email appears in your contacts
24 - 3. Fans can revoke sharing at any time via `DELETE /api/contacts/{seller_id}`
25 - 4. Revocation is idempotent — revoking twice is fine
24 + 3. Fans can revoke sharing at any time from their account settings
25 + 4. Revocation takes effect immediately
26 26
27 27 ### For Fans
28 28
@@ -32,11 +32,11 @@ Export all your data at any time. Five export types are available:
32 32
33 33 | Export | Format | Contents |
34 34 |--------|--------|----------|
35 - | **Projects** | JSON | All project metadata, settings, categories |
36 - | **Items** | JSON | All items with metadata, pricing, tags |
37 - | **Blog posts** | JSON | All blog posts with content and publish status |
38 - | **Sales** | CSV | Complete sales transaction history |
39 - | **Purchases** | CSV | Your purchase history as a fan |
35 + | **Projects** | JSON (structured data file) | All project metadata, settings, categories |
36 + | **Items** | JSON (structured data file) | All items with metadata, pricing, tags |
37 + | **Blog posts** | JSON (structured data file) | All blog posts with content and publish status |
38 + | **Sales** | CSV (spreadsheet file — opens in Excel, Google Sheets, etc.) | Complete sales transaction history |
39 + | **Purchases** | CSV (spreadsheet file) | Your purchase history as a fan |
40 40
41 41 Exports are generated on demand and download as files. No limits on how often you export.
42 42
@@ -4,7 +4,7 @@ Protect your account with multiple layers of authentication.
4 4
5 5 ---
6 6
7 - ## Two-Factor Authentication (2FA/TOTP)
7 + ## Two-Factor Authentication (2FA)
8 8
9 9 Add time-based one-time passwords as a second factor:
10 10
@@ -19,7 +19,7 @@ When 2FA is enabled, you'll enter a code from your authenticator app after your
19 19
20 20 You get 10 single-use backup codes at setup. Each code works once. If you lose access to your authenticator app, use a backup code to log in, then reconfigure 2FA.
21 21
22 - ## Passkeys (WebAuthn)
22 + ## Passkeys
23 23
24 24 Passkeys offer passwordless, phishing-resistant login:
25 25
@@ -8,7 +8,7 @@ Everything you can do as a fan on Makenot.work — no creator subscription neede
8 8
9 9 Browse content on the Discover page:
10 10
11 - - **Search**: Full-text fuzzy search across titles, descriptions, and usernames
11 + - **Search**: Search across titles, descriptions, and usernames
12 12 - **Filters**: Filter by item type (Audio, Text, Digital), price range, tags, and project category
13 13 - **Sort**: Newest, price (low/high), or popularity
14 14
@@ -66,6 +66,7 @@ Fan accounts are free. You never pay the platform — only for content you choos
66 66
67 67 ## See Also
68 68
69 + - [Fan Guide](../../unpublished/fan/fan-guide.md) — Supporting creators and your library
69 70 - [Getting Started](./01-getting-started.md) — Creating your account
70 71 - [Audience & Communication](./08-audience.md) — How contact sharing works
71 72 - [FAQ](../support/faq.md) — Common questions
@@ -0,0 +1,135 @@
1 + <!DOCTYPE html>
2 + <html lang="en">
3 + <head>
4 + <meta charset="UTF-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 + <title>Getting Started — Makenot.work</title>
7 + <link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,700;1,400&amp;family=Lato:wght@400;700&amp;family=Young+Serif&amp;display=swap" rel="stylesheet">
8 + <link rel="stylesheet" href="docs.css">
9 + </head>
10 + <body class="padded-page">
11 + <header class="site-header"><a href="./index.html">makenot<span class="dot">.</span>work</a></header>
12 + <article class="doc-container">
13 + <nav class="doc-nav"><a href="./index.html">Docs</a> / Guide</nav>
14 + <h1>Getting Started <span class="dot">.</span></h1>
15 + <p>Your first 15 minutes on Makenot.work — from sign-up to your first
16 + published item.</p>
17 + <hr />
18 + <h2 id="create-your-account">Create Your Account</h2>
19 + <ol type="1">
20 + <li>Visit the homepage and click <strong>Join</strong></li>
21 + <li>Pick a username (this becomes your public URL:
22 + <code>/u/yourname</code>)</li>
23 + <li>Enter your email and a strong password</li>
24 + <li>Verify your email (check your inbox)</li>
25 + </ol>
26 + <p>Your fan account is ready immediately. You can browse, follow
27 + creators, and purchase content right away.</p>
28 + <h2 id="apply-for-creator-access">Apply for Creator Access</h2>
29 + <p>Creator access is currently invite-only via the waitlist. To
30 + apply:</p>
31 + <ol type="1">
32 + <li>Go to the waitlist page</li>
33 + <li>Write a short pitch (20-500 characters) about what you want to
34 + create</li>
35 + <li>Submit your application</li>
36 + </ol>
37 + <p>Applications are reviewed in waves. You’ll get an email when you’re
38 + approved.</p>
39 + <p><strong>Requirements:</strong></p>
40 + <ul>
41 + <li>Verified email address</li>
42 + <li>You haven’t already applied</li>
43 + <li>You don’t already have creator access</li>
44 + </ul>
45 + <h2 id="connect-stripe">Connect Stripe</h2>
46 + <p>Once approved as a creator, connect your Stripe account to receive
47 + payments:</p>
48 + <ol type="1">
49 + <li>Go to your <strong>Dashboard</strong></li>
50 + <li>Click <strong>Connect Stripe</strong></li>
51 + <li>Follow the Stripe Connect onboarding flow</li>
52 + <li>Complete identity verification (Stripe requirement)</li>
53 + </ol>
54 + <p>Payments go directly to your Stripe account. We never hold or touch
55 + your revenue.</p>
56 + <h2 id="create-your-first-project">Create Your First Project</h2>
57 + <p>Projects are how you organize your work. Think of them like albums,
58 + podcast feeds, or product lines.</p>
59 + <ol type="1">
60 + <li>From your Dashboard, click <strong>New Project</strong></li>
61 + <li>Enter a <strong>slug</strong> (URL-safe name, e.g.,
62 + <code>my-album</code>) and a <strong>title</strong></li>
63 + <li>Choose a category (Music, Podcast, Software, Blog, Art, etc.)</li>
64 + <li>Add a description</li>
65 + </ol>
66 + <p>Your project starts as a draft. You’ll make it public after adding
67 + items.</p>
68 + <h2 id="create-your-first-item">Create Your First Item</h2>
69 + <p>Items are individual pieces of content inside a project.</p>
70 + <ol type="1">
71 + <li>Navigate to your project</li>
72 + <li>Click <strong>New Item</strong></li>
73 + <li>Choose an item type:</li>
74 + </ol>
75 + <table>
76 + <thead>
77 + <tr>
78 + <th>Type</th>
79 + <th>Best For</th>
80 + </tr>
81 + </thead>
82 + <tbody>
83 + <tr>
84 + <td><strong>Audio</strong></td>
85 + <td>Songs, podcast episodes, sound effects</td>
86 + </tr>
87 + <tr>
88 + <td><strong>Text</strong></td>
89 + <td>Articles, stories, documentation</td>
90 + </tr>
91 + <tr>
92 + <td><strong>Digital</strong></td>
93 + <td>Software, plugins, files, images</td>
94 + </tr>
95 + </tbody>
96 + </table>
97 + <ol start="4" type="1">
98 + <li>Set a title and price (free, fixed, or pay-what-you-want)</li>
99 + <li>Upload your content or write your text</li>
100 + </ol>
101 + <h2 id="publish">Publish</h2>
102 + <ol type="1">
103 + <li>Make your item public: edit the item and toggle
104 + <strong>is_public</strong></li>
105 + <li>Make your project public: edit the project and set
106 + <strong>visibility</strong> to public</li>
107 + <li>Share your link: <code>/u/yourname</code></li>
108 + </ol>
109 + <h2 id="first-15-minutes-checklist">First 15 Minutes Checklist</h2>
110 + <ul class="task-list">
111 + <li><label><input type="checkbox" />Account created and email
112 + verified</label></li>
113 + <li><label><input type="checkbox" />Waitlist application submitted (or
114 + creator access granted)</label></li>
115 + <li><label><input type="checkbox" />Stripe connected</label></li>
116 + <li><label><input type="checkbox" />First project created with title,
117 + slug, and category</label></li>
118 + <li><label><input type="checkbox" />First item created with content
119 + uploaded</label></li>
120 + <li><label><input type="checkbox" />Item and project
121 + published</label></li>
122 + </ul>
123 + <hr />
124 + <h2 id="see-also">See Also</h2>
125 + <ul>
126 + <li><a href="./02-projects.html">Projects</a> — Organizing your
127 + work</li>
128 + <li><a href="./03-items.html">Items</a> — Content types and
129 + settings</li>
130 + <li><a href="./07-pricing.html">Pricing &amp; Monetization</a> — Setting
131 + prices and getting paid</li>
132 + </ul>
133 + </article>
134 + </body>
135 + </html>
@@ -0,0 +1,112 @@
1 + <!DOCTYPE html>
2 + <html lang="en">
3 + <head>
4 + <meta charset="UTF-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 + <title>Projects — Makenot.work</title>
7 + <link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,700;1,400&amp;family=Lato:wght@400;700&amp;family=Young+Serif&amp;display=swap" rel="stylesheet">
8 + <link rel="stylesheet" href="docs.css">
9 + </head>
10 + <body class="padded-page">
11 + <header class="site-header"><a href="./index.html">makenot<span class="dot">.</span>work</a></header>
12 + <article class="doc-container">
13 + <nav class="doc-nav"><a href="./index.html">Docs</a> / Guide</nav>
14 + <h1>Projects <span class="dot">.</span></h1>
15 + <p>Projects group your items under a single page with its own URL,
16 + settings, and feed.</p>
17 + <hr />
18 + <h2 id="creating-a-project">Creating a Project</h2>
19 + <p>From your Dashboard, click <strong>New Project</strong>. You’ll
20 + need:</p>
21 + <ul>
22 + <li><strong>Slug</strong>: URL-safe name (e.g., <code>my-album</code>).
23 + This becomes <code>/p/my-album</code>. Cannot be changed after
24 + creation.</li>
25 + <li><strong>Title</strong>: Display name shown on the project page.</li>
26 + </ul>
27 + <h2 id="project-settings">Project Settings</h2>
28 + <p>Edit your project to configure:</p>
29 + <ul>
30 + <li><strong>Description</strong>: Text shown on the project page</li>
31 + <li><strong>Category</strong>: Helps fans discover your work. Choose
32 + from 12 built-in categories (Music, Band, Podcast, Blog, Software, Art,
33 + etc.) or create your own</li>
34 + <li><strong>Visibility</strong>: Draft (only you can see it) or Public
35 + (visible to everyone)</li>
36 + </ul>
37 + <h2 id="categories">Categories</h2>
38 + <p>Categories are used for discovery and filtering. Each project can
39 + have one category. Built-in options include:</p>
40 + <table>
41 + <thead>
42 + <tr>
43 + <th>Category</th>
44 + <th>Typical Use</th>
45 + </tr>
46 + </thead>
47 + <tbody>
48 + <tr>
49 + <td>Music</td>
50 + <td>Albums, singles, EPs</td>
51 + </tr>
52 + <tr>
53 + <td>Band</td>
54 + <td>Band or artist pages</td>
55 + </tr>
56 + <tr>
57 + <td>Podcast</td>
58 + <td>Podcast feeds</td>
59 + </tr>
60 + <tr>
61 + <td>Blog</td>
62 + <td>Writing and newsletters</td>
63 + </tr>
64 + <tr>
65 + <td>Software</td>
66 + <td>Apps, plugins, tools</td>
67 + </tr>
68 + <tr>
69 + <td>Art</td>
70 + <td>Visual art, photography</td>
71 + </tr>
72 + <tr>
73 + <td>Education</td>
74 + <td>Courses, tutorials</td>
75 + </tr>
76 + <tr>
77 + <td>Games</td>
78 + <td>Game projects</td>
79 + </tr>
80 + </tbody>
81 + </table>
82 + <h2 id="visibility">Visibility</h2>
83 + <p>Projects start as <strong>drafts</strong>. Draft projects and their
84 + items are invisible to everyone except you.</p>
85 + <p>To publish, set visibility to <code>public</code>. All published
86 + items within the project become discoverable.</p>
87 + <h2 id="organizing-items">Organizing Items</h2>
88 + <p>Items are ordered within a project. You can reorder them from the
89 + project dashboard. Each item belongs to exactly one project.</p>
90 + <h2 id="blog">Blog</h2>
91 + <p>Every project gets a blog. Blog posts use markdown, support drafts,
92 + and are included in the project’s RSS feed. See <a
93 + href="./04-content.html">Content Types</a> for details.</p>
94 + <h2 id="rss-feeds">RSS Feeds</h2>
95 + <p>Each project automatically generates an RSS feed containing published
96 + items and blog posts. Fans can subscribe using any feed reader.</p>
97 + <h2 id="deleting-a-project">Deleting a Project</h2>
98 + <p>Deleting a project removes it and all its items permanently. This
99 + cannot be undone. Active subscriptions should be canceled first.</p>
100 + <hr />
101 + <h2 id="see-also">See Also</h2>
102 + <ul>
103 + <li><a href="./03-items.html">Items</a> — Creating content within
104 + projects</li>
105 + <li><a href="./04-content.html">Content Types</a> — Audio, text,
106 + digital, and blog</li>
107 + <li><a href="./09-analytics.html">Analytics &amp; Data</a> —
108 + Project-level stats</li>
109 + </ul>
110 + </article>
111 + </body>
112 + </html>
@@ -0,0 +1,108 @@
1 + <!DOCTYPE html>
2 + <html lang="en">
3 + <head>
4 + <meta charset="UTF-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 + <title>Items — Makenot.work</title>
7 + <link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,700;1,400&amp;family=Lato:wght@400;700&amp;family=Young+Serif&amp;display=swap" rel="stylesheet">
8 + <link rel="stylesheet" href="docs.css">
9 + </head>
10 + <body class="padded-page">
11 + <header class="site-header"><a href="./index.html">makenot<span class="dot">.</span>work</a></header>
12 + <article class="doc-container">
13 + <nav class="doc-nav"><a href="./index.html">Docs</a> / Guide</nav>
14 + <h1>Items <span class="dot">.</span></h1>
15 + <p>Items are individual pieces of content — a song, an article, a
16 + software release, a file download.</p>
17 + <hr />
18 + <h2 id="item-types">Item Types</h2>
19 + <table>
20 + <thead>
21 + <tr>
22 + <th>Type</th>
23 + <th>Content</th>
24 + <th>Player/Viewer</th>
25 + <th>Chapters</th>
26 + <th>Versions</th>
27 + </tr>
28 + </thead>
29 + <tbody>
30 + <tr>
31 + <td><strong>Audio</strong></td>
32 + <td>MP3, WAV, FLAC, OGG</td>
33 + <td>In-browser streaming player</td>
34 + <td>Yes</td>
35 + <td>Yes</td>
36 + </tr>
37 + <tr>
38 + <td><strong>Text</strong></td>
39 + <td>Markdown</td>
40 + <td>Clean reading view</td>
41 + <td>No</td>
42 + <td>No</td>
43 + </tr>
44 + <tr>
45 + <td><strong>Digital</strong></td>
46 + <td>Any file (ZIP, DMG, EXE, etc.)</td>
47 + <td>Download link</td>
48 + <td>No</td>
49 + <td>Yes</td>
50 + </tr>
51 + </tbody>
52 + </table>
53 + <p>Choose the type when creating the item. It cannot be changed
54 + afterward.</p>
55 + <h2 id="creating-an-item">Creating an Item</h2>
56 + <ol type="1">
57 + <li>Navigate to your project</li>
58 + <li>Click <strong>New Item</strong></li>
59 + <li>Set a <strong>title</strong> and <strong>item type</strong></li>
60 + <li>Optionally set a price (defaults to free)</li>
61 + </ol>
62 + <h2 id="editing-an-item">Editing an Item</h2>
63 + <p>From the item settings, you can update:</p>
64 + <ul>
65 + <li><strong>Title</strong>: Display name</li>
66 + <li><strong>Description</strong>: Shown on the item page</li>
67 + <li><strong>Price</strong>: Free, fixed amount, or pay-what-you-want
68 + (see <a href="./07-pricing.html">Pricing</a>)</li>
69 + <li><strong>Tags</strong>: Hierarchical tags for discovery</li>
70 + <li><strong>Cover image</strong>: Displayed on the item card</li>
71 + </ul>
72 + <h2 id="publishing">Publishing</h2>
73 + <p>Items start as drafts. To publish:</p>
74 + <ol type="1">
75 + <li>Edit the item and set <strong>is_public</strong> to true</li>
76 + <li>Make sure the parent project is also public</li>
77 + </ol>
78 + <p>Published items appear on your profile, in search results, and in RSS
79 + feeds.</p>
80 + <h2 id="scheduling">Scheduling</h2>
81 + <p>Set a future publish date to schedule content releases. The item
82 + becomes visible automatically at the scheduled time.</p>
83 + <h2 id="bulk-operations">Bulk Operations</h2>
84 + <p>From the project dashboard, you can perform bulk operations on items:
85 + publish, unpublish, or delete multiple items at once.</p>
86 + <h2 id="duplicating-an-item">Duplicating an Item</h2>
87 + <p>Duplicate an item to create a copy with the same settings and
88 + metadata. Useful for creating similar items quickly. Content (files,
89 + text) is not duplicated — only metadata.</p>
90 + <h2 id="deleting-an-item">Deleting an Item</h2>
91 + <p>Deleting an item removes it permanently. Fans who purchased it will
92 + lose access. Active download codes and license keys for the item are
93 + invalidated.</p>
94 + <hr />
95 + <h2 id="see-also">See Also</h2>
96 + <ul>
97 + <li><a href="./04-content.html">Content Types</a> — Uploading and
98 + managing content</li>
99 + <li><a href="./05-versions.html">Versions</a> — Release versioned
100 + files</li>
101 + <li><a href="./06-chapters.html">Chapters</a> — Audio chapter
102 + markers</li>
103 + <li><a href="./07-pricing.html">Pricing &amp; Monetization</a> — Free,
104 + fixed, and PWYW</li>
105 + </ul>
106 + </article>
107 + </body>
108 + </html>
@@ -0,0 +1,81 @@
1 + <!DOCTYPE html>
2 + <html lang="en">
3 + <head>
4 + <meta charset="UTF-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 + <title>Content Types — Makenot.work</title>
7 + <link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,700;1,400&amp;family=Lato:wght@400;700&amp;family=Young+Serif&amp;display=swap" rel="stylesheet">
8 + <link rel="stylesheet" href="docs.css">
9 + </head>
10 + <body class="padded-page">
11 + <header class="site-header"><a href="./index.html">makenot<span class="dot">.</span>work</a></header>
12 + <article class="doc-container">
13 + <nav class="doc-nav"><a href="./index.html">Docs</a> / Guide</nav>
14 + <h1>Content Types <span class="dot">.</span></h1>
15 + <p>What you can upload and how it’s delivered to fans.</p>
16 + <hr />
17 + <h2 id="audio">Audio</h2>
18 + <p>Upload audio files in MP3, WAV, FLAC, or OGG format. Each audio item
19 + gets:</p>
20 + <ul>
21 + <li><strong>In-browser player</strong>: Stream without downloading.
22 + Custom player with playback controls.</li>
23 + <li><strong>Cover image</strong>: Album art displayed in the player and
24 + on the item card.</li>
25 + <li><strong>Chapters</strong>: Timestamp markers for navigating within
26 + the track. See <a href="./06-chapters.html">Chapters</a>.</li>
27 + <li><strong>Downloads</strong>: Fans can download the original file
28 + after purchase.</li>
29 + </ul>
30 + <p>Upload your audio file from the item’s content tab. Large files are
31 + supported — there are no per-file size limits.</p>
32 + <h2 id="text">Text</h2>
33 + <p>Write directly in the markdown editor. Features include:</p>
34 + <ul>
35 + <li><strong>Live preview</strong>: See rendered output as you type</li>
36 + <li><strong>Word count</strong>: Automatically calculated</li>
37 + <li><strong>Reading time</strong>: Estimated based on word count</li>
38 + <li><strong>Full markdown support</strong>: Headers, lists, code blocks,
39 + links, images, tables</li>
40 + </ul>
41 + <p>Text content is stored and rendered on the platform. Fans read it in
42 + a clean, distraction-free view.</p>
43 + <h2 id="digital-downloads">Digital Downloads</h2>
44 + <p>Upload any file type. Digital items support:</p>
45 + <ul>
46 + <li><strong>Any format</strong>: ZIP, DMG, EXE, PDF, images, fonts —
47 + whatever you make</li>
48 + <li><strong>Versioned releases</strong>: Upload new versions with
49 + changelogs. See <a href="./05-versions.html">Versions</a>.</li>
50 + <li><strong>Download tracking</strong>: See how many times each version
51 + has been downloaded</li>
52 + <li><strong>License keys</strong>: Auto-generated keys for software
53 + products. See <a href="./07-pricing.html">Pricing</a>.</li>
54 + </ul>
55 + <h2 id="blog-posts">Blog Posts</h2>
56 + <p>Every project includes a blog. Blog posts use the same markdown
57 + editor as text items, plus:</p>
58 + <ul>
59 + <li><strong>Draft/publish workflow</strong>: Write drafts, publish when
60 + ready</li>
61 + <li><strong>Included in RSS</strong>: Published posts appear in the
62 + project’s RSS feed</li>
63 + <li><strong>Included in data exports</strong>: Blog posts export
64 + alongside all other project data</li>
65 + <li><strong>Separate from items</strong>: Blog posts don’t appear in
66 + your item list — they have their own tab</li>
67 + </ul>
68 + <p>Blog posts are always free. Use them for updates, announcements,
69 + liner notes, or changelogs.</p>
70 + <hr />
71 + <h2 id="see-also">See Also</h2>
72 + <ul>
73 + <li><a href="./06-chapters.html">Chapters</a> — Audio timestamp
74 + markers</li>
75 + <li><a href="./05-versions.html">Versions</a> — Versioned file
76 + releases</li>
77 + <li><a href="./03-items.html">Items</a> — Item types and settings</li>
78 + </ul>
79 + </article>
80 + </body>
81 + </html>
@@ -0,0 +1,80 @@
1 + <!DOCTYPE html>
2 + <html lang="en">
3 + <head>
4 + <meta charset="UTF-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 + <title>Versions — Makenot.work</title>
7 + <link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,700;1,400&amp;family=Lato:wght@400;700&amp;family=Young+Serif&amp;display=swap" rel="stylesheet">
8 + <link rel="stylesheet" href="docs.css">
9 + </head>
10 + <body class="padded-page">
11 + <header class="site-header"><a href="./index.html">makenot<span class="dot">.</span>work</a></header>
12 + <article class="doc-container">
13 + <nav class="doc-nav"><a href="./index.html">Docs</a> / Guide</nav>
14 + <h1>Versions <span class="dot">.</span></h1>
15 + <p>Track releases of digital and audio items with version numbers and
16 + changelogs.</p>
17 + <hr />
18 + <h2 id="creating-a-version">Creating a Version</h2>
19 + <p>From the item dashboard, add a new version:</p>
20 + <ul>
21 + <li><strong>Version number</strong> (required): Any string up to 50
22 + characters (e.g., <code>1.0.0</code>, <code>v2</code>,
23 + <code>2024-03-01</code>)</li>
24 + <li><strong>Changelog</strong> (optional): Up to 10,000 characters
25 + describing what changed</li>
26 + <li><strong>File</strong>: Optionally attach a new file to this
27 + version</li>
28 + </ul>
29 + <h2 id="how-is_current-works">How is_current Works</h2>
30 + <p>Only one version per item can be marked as “current.” When you create
31 + a new version:</p>
32 + <ol type="1">
33 + <li>All existing versions are marked
34 + <code>is_current = false</code></li>
35 + <li>The new version is marked <code>is_current = true</code></li>
36 + </ol>
37 + <p>This happens atomically — there’s no moment where zero or multiple
38 + versions are current.</p>
39 + <p>Fans downloading the item get the current version by default.</p>
40 + <h2 id="changelogs">Changelogs</h2>
41 + <p>Use changelogs to tell fans what changed. Changelogs are plain text,
42 + up to 10,000 characters. Keep them concise — fans want to know what’s
43 + new, not read a novel.</p>
44 + <h2 id="download-tracking">Download Tracking</h2>
45 + <p>Each version tracks its download count independently. This helps you
46 + see which versions fans are using.</p>
47 + <h2 id="listing-versions">Listing Versions</h2>
48 + <p>The public version list is ordered newest-first (by creation date).
49 + Only published items expose their version list — draft items return a
50 + 404.</p>
51 + <h2 id="validation">Validation</h2>
52 + <table>
53 + <thead>
54 + <tr>
55 + <th>Field</th>
56 + <th>Rule</th>
57 + </tr>
58 + </thead>
59 + <tbody>
60 + <tr>
61 + <td>Version number</td>
62 + <td>1-50 characters, required</td>
63 + </tr>
64 + <tr>
65 + <td>Changelog</td>
66 + <td>0-10,000 characters, optional</td>
67 + </tr>
68 + </tbody>
69 + </table>
70 + <hr />
71 + <h2 id="see-also">See Also</h2>
72 + <ul>
73 + <li><a href="./03-items.html">Items</a> — Item types and settings</li>
74 + <li><a href="./04-content.html">Content Types</a> — Upload formats</li>
75 + <li><a href="./09-analytics.html">Analytics &amp; Data</a> — Download
76 + tracking and exports</li>
77 + </ul>
78 + </article>
79 + </body>
80 + </html>