| 3 |
3 |
|
## Status
|
| 4 |
4 |
|
Done: All pre-beta phases. Active: Creator setup (Stripe), manual testing. Next: Soft launch.
|
| 5 |
5 |
|
|
| 6 |
|
- |
v0.4.1. Audit grade A. ~1,233 tests.
|
|
6 |
+ |
v0.4.3. Audit grade A. ~1,412 tests.
|
| 7 |
7 |
|
|
| 8 |
8 |
|
---
|
| 9 |
9 |
|
|
| 10 |
10 |
|
## Code Review Remediation — Deferred
|
| 11 |
|
- |
- [ ] Monitor scheduler.rs (635), git/mod.rs (613), license_keys.rs (684) for growth
|
|
11 |
+ |
- [ ] Monitor scheduler.rs (1184), git/mod.rs (224), license_keys.rs (684) for growth
|
| 12 |
12 |
|
- [ ] Consider splitting bin/mnw-admin.rs git-auth commands into separate module
|
| 13 |
13 |
|
|
| 14 |
14 |
|
---
|
| 54 |
54 |
|
- [ ] Test free download flow (GO), PWYW flow (BB), purchase flow (AF), subscription flow (GO)
|
| 55 |
55 |
|
- [ ] Test discount code on AF purchase
|
| 56 |
56 |
|
- [ ] Test license key delivery after AF purchase
|
| 57 |
|
- |
- [ ] Capture screenshots for docs (dashboard, audio player, discover, pricing, git browser)
|
|
57 |
+ |
- [ ] Capture screenshots for docs (dashboard, audio player, discover, pricing, git browser) — or replace with sandbox links
|
| 58 |
58 |
|
|
| 59 |
59 |
|
### Documentation — Remaining
|
| 60 |
|
- |
- [ ] Review new docs against live UI for accuracy (button labels, navigation paths)
|
| 61 |
|
- |
- [ ] liability.md legal review (has [PENDING LEGAL REVIEW] placeholders)
|
| 62 |
|
- |
- [ ] dmca-counter.md designated agent address (needs DMCA agent registration)
|
|
60 |
+ |
- [x] Review new docs against live UI for accuracy (button labels, navigation paths) — fixed in round 3 audit
|
|
61 |
+ |
- [ ] liability.md legal review (has [PENDING LEGAL REVIEW] placeholders) — rolled into legal review prep
|
|
62 |
+ |
- [ ] dmca-counter.md designated agent address (needs DMCA agent registration) — rolled into legal review prep
|
| 63 |
63 |
|
|
| 64 |
64 |
|
### Git Access Provisioning
|
| 65 |
|
- |
- [ ] Web UI for managing SSH keys per MNW account (residents/collaborators add keys in dashboard)
|
|
65 |
+ |
- [ ] Dashboard page for SSH key management (API + HTMX partials exist at `routes/api/ssh_keys.rs`, needs dashboard tab)
|
| 66 |
66 |
|
- [ ] Per-repo collaborator access (grant push by MNW username, stored in DB, wired to authorized_keys rebuild)
|
| 67 |
67 |
|
- [ ] Replace manual `setup-ssh-keys.sh` with account-driven key management
|
| 68 |
68 |
|
|
| 87 |
87 |
|
|
| 88 |
88 |
|
## Frontend Audit — Remaining
|
| 89 |
89 |
|
|
| 90 |
|
- |
- [ ] Add a visual to landing page (HTML/CSS ready, needs `static/images/landing-screenshot.png`)
|
|
90 |
+ |
- [x] Landing page visual — replaced screenshot with sandbox link ("Try the dashboard without signing up")
|
| 91 |
91 |
|
- [ ] Create og:image social card (1200x630, for landing page and fallback — distinct from logo.png)
|
| 92 |
92 |
|
|
| 93 |
93 |
|
---
|
| 111 |
111 |
|
- [ ] Allows horizontal scaling independently of request serving
|
| 112 |
112 |
|
- [ ] Consider GPU-accelerated analysis if volume warrants it
|
| 113 |
113 |
|
|
| 114 |
|
- |
### Other scanning hardening
|
| 115 |
|
- |
- [x] ~~Add timeout to YARA scanning. Fixed: `scanner.set_timeout(30s)` via yara-x native API.~~
|
| 116 |
|
- |
- [ ] Cap ClamAV response buffer size (currently unbounded `read_to_end`)
|
| 117 |
|
- |
- [x] ~~Nested archive detection: check magic bytes, not just file extensions. Fixed: magic bytes check for ZIP, gzip, 7z, RAR in archive.rs.~~
|
| 118 |
114 |
|
|
| 119 |
115 |
|
---
|
| 120 |
116 |
|
|
| 121 |
117 |
|
## Code Fuzz Findings (2026-04-25)
|
| 122 |
118 |
|
|
| 123 |
|
- |
Three rounds of adversarial code review. 51 findings total: 50 fixed, 1 accepted risk, 1 deferred.
|
|
119 |
+ |
Three rounds of adversarial code review. 51 findings total: 50 fixed, 1 accepted risk, 2 deferred. Fixed items moved to todo_done.md.
|
| 124 |
120 |
|
|
| 125 |
121 |
|
### Accepted Risk
|
| 126 |
122 |
|
- Idempotency check not atomic with operation — concurrent requests both execute (`db/idempotency.rs`). Safe because underlying ops are themselves idempotent.
|
|
123 |
+ |
- Revoked session usable for up to 30s -- session cache IS cleared by revoke_session and revoke_other_sessions handlers; window only applies to direct DB manipulation (admin)
|
| 127 |
124 |
|
|
| 128 |
125 |
|
### Deferred
|
| 129 |
126 |
|
- 7-day SyncKit JWT with no per-user revocation (`constants.rs:37`). Stolen token usable for full window. Requires key rotation infrastructure (SyncKit S4, post-beta).
|
| 130 |
|
- |
|
| 131 |
|
- |
### Resolved (28 findings)
|
| 132 |
|
- |
All critical, serious, and minor findings from rounds 1 and 2 are fixed. See git history for details.
|
| 133 |
|
- |
|
| 134 |
|
- |
## Code Fuzz Findings -- Round 3 (2026-04-25)
|
| 135 |
|
- |
|
| 136 |
|
- |
### Fixed
|
| 137 |
|
- |
- [x] SubscriptionStatus missing Trialing/Incomplete/IncompleteExpired variants (db/enums.rs)
|
| 138 |
|
- |
- [x] SyncKit auth does not block deactivated users (synckit_auth.rs)
|
| 139 |
|
- |
- [x] Build token comparison not constant-time (routes/builds.rs)
|
| 140 |
|
- |
- [x] Subscription access checks ignore paused_at (db/subscriptions.rs)
|
| 141 |
|
- |
- [x] Cover/MediaImage uploads bypass storage cap with i64::MAX (db/creator_tiers.rs)
|
| 142 |
|
- |
- [x] Promo code use_count consumed even when user already owns item (db/transactions.rs)
|
| 143 |
|
- |
- [x] Idempotency middleware caches empty string instead of real body (metrics.rs)
|
| 144 |
|
- |
- [x] OAuth: no dummy hash on user-not-found path (timing leak, routes/oauth.rs)
|
| 145 |
|
- |
- [x] OAuth: no password length cap (Argon2 DoS, routes/oauth.rs)
|
| 146 |
|
- |
- [x] OAuth: suspended/deactivated users can still authorize (routes/oauth.rs)
|
| 147 |
|
- |
- [x] OAuth session validation: result.valid not checked before suspension (routes/oauth.rs)
|
| 148 |
|
- |
- [x] OAuth legacy session path ignores deactivated flag (routes/oauth.rs)
|
| 149 |
|
- |
- [x] Subscription test fixture missing paused_at field (db/models/subscription.rs)
|
| 150 |
|
- |
- [x] Git routes have no rate limiting (routes/git/mod.rs)
|
| 151 |
|
- |
- [x] No Content-Security-Policy header (lib.rs)
|
| 152 |
|
- |
- [x] /metrics endpoint unprotected (lib.rs)
|
| 153 |
|
- |
- [x] Upload confirm: no idempotency, no S3 cleanup on storage error (routes/storage/uploads.rs)
|
| 154 |
|
- |
- [x] Version confirm: no idempotency, no S3 cleanup on storage error (routes/storage/versions.rs)
|
| 155 |
|
- |
- [x] Image confirm: storage increment after DB write, no idempotency (routes/storage/images.rs)
|
| 156 |
|
- |
- [x] Media confirm: no content_type/extension re-validation, no S3 cleanup (routes/storage/media.rs)
|
| 157 |
|
- |
|
| 158 |
|
- |
- [x] CSRF token not rotated after login -- now regenerated in login_user (auth.rs, csrf.rs)
|
| 159 |
|
- |
- [x] Read-modify-write race on sort_order/position -- atomic INSERT...SELECT (db/custom_links.rs, db/collections.rs)
|
| 160 |
|
- |
- [x] N+1 reorder loops without transactions -- wrapped in transactions (db/custom_links.rs, db/collections.rs)
|
| 161 |
|
- |
- [x] Race condition in custom domain creation -- SELECT FOR UPDATE in transaction (db/custom_domains.rs)
|
| 162 |
|
- |
|
| 163 |
|
- |
- [x] Double-purchase TOCTOU -- partial unique index on (buyer_id, item_id/project_id) WHERE status='pending' prevents concurrent checkouts (migration 073, checkout handlers)
|
| 164 |
|
- |
|
| 165 |
|
- |
- [x] Promo code max_uses bypassable on paid path -- use_count now reserved at checkout time, released by scheduler on stale cleanup (migration 074, checkout handlers, scheduler)
|
| 166 |
|
- |
|
| 167 |
|
- |
### Deferred
|
| 168 |
127 |
|
- Rate limit IP extraction trusts X-Forwarded-For when traffic bypasses Cloudflare (helpers.rs). Fix requires splitting rate limit extraction by path: CF-Connecting-IP for public web routes, peer socket for internal/CLI/git. Needs careful routing since CLI, git smart HTTP, and SyncKit all hit the same server but some bypass Cloudflare.
|
| 169 |
128 |
|
- S3 key/file size UPDATE queries lack ownership in SQL -- defense-in-depth; callers verify ownership (db/items.rs)
|
| 170 |
129 |
|
|
| 171 |
|
- |
### Accepted
|
| 172 |
|
- |
- Revoked session usable for up to 30s -- session cache IS cleared by revoke_session and revoke_other_sessions handlers; window only applies to direct DB manipulation (admin)
|
| 173 |
|
- |
|
| 174 |
130 |
|
---
|
| 175 |
131 |
|
|
| 176 |
|
- |
## Creator Trust Audit (2026-04-25)
|
|
132 |
+ |
## Creator Trust Audit (2026-04-25, round 2 2026-04-26)
|
| 177 |
133 |
|
|
| 178 |
|
- |
Systematic creator-perspective audit of docs, legal, code, and competitive positioning.
|
| 179 |
|
- |
|
| 180 |
|
- |
### Resolved (20+ findings)
|
| 181 |
|
- |
All doc/code fixes, trust gaps, security issues, and doc clarity items are complete. Key changes: subscription export endpoint, offsite backups with WAM alerting, API key hashing, security headers, fan subscription pause on suspension, account limbo state, support ticket portal, expanded tax/payout/discovery/storage docs, privacy policy updates. See git history.
|
| 182 |
|
- |
|
| 183 |
|
- |
### Doc/Code Contradictions (all resolved)
|
| 184 |
|
- |
- [x] Payout minimum: aligned payouts.md with Stripe reality ($1 minimum), named Stripe explicitly
|
| 185 |
|
- |
- [x] Content protection watermarking: scoped claim to "audio and image files delivered without watermarks", disclosed text fingerprinting
|
| 186 |
|
- |
- [x] Mailing list import: reworded as roadmap item, linked to migration guide
|
| 187 |
|
- |
- [x] IP retention: added daily scheduler job scrubbing IPs from user_sessions, download_fingerprints, streaming_sessions at 30 days
|
| 188 |
|
- |
|
| 189 |
|
- |
### Missing Creator-Facing Documentation
|
| 190 |
|
- |
- [x] Named Stripe explicitly in payouts.md and payments.md (replaced all "payment processor" references)
|
| 191 |
|
- |
- [x] Creator application criteria added to getting-started.md (what we look for, what gets rejected)
|
| 192 |
|
- |
- [x] Tips documented (new guide/tips.md)
|
| 193 |
|
- |
- [x] Bundles documented (new guide/bundles.md)
|
| 194 |
|
- |
- [x] Revenue splits documented (new guide/splits.md)
|
| 195 |
|
- |
- [x] Currencies/countries: linked to Stripe's own docs (46+ countries, 135+ currencies) rather than maintaining stale tables; fixed grammar from bulk find-replace
|
| 196 |
|
- |
|
| 197 |
|
- |
### Trust Gaps
|
| 198 |
|
- |
- [x] 30-day post-termination export window -- migration 076 adds terminated_at; admin terminate route (requires prior suspension); scheduler deletes after 30 days; Stripe subscriptions canceled; termination email sent with export instructions
|
| 199 |
|
- |
- [x] Per-item content removal admin action -- migration 075, admin routes (remove/restore), email notifications, publish guards prevent re-publishing removed items
|
| 200 |
|
- |
- ~~No incident post-mortems or public historical incident log~~ — will publish as posts in the MNW Changelog blog project
|
|
134 |
+ |
Two rounds of creator-perspective audit. 25+ findings resolved (moved to todo_done.md). Incident post-mortems will publish as posts in the MNW Changelog blog project.
|
| 201 |
135 |
|
|
| 202 |
136 |
|
### Competitive Positioning (acknowledged, not bugs)
|
| 203 |
137 |
|
- No free tier — deliberate tradeoff. Earn-back credit program planned.
|
| 204 |
138 |
|
- No mobile fan app — creator apps exist, no general fan app.
|
| 205 |
139 |
|
- No editorial discovery — search, tags, follows only. Interested in non-algorithmic discovery methods.
|
|
140 |
+ |
- $10/mo minimum is biggest competitive gap vs Bandcamp/Gumroad/itch.io (all have free tiers).
|
| 206 |
141 |
|
|
| 207 |
142 |
|
---
|
| 208 |
143 |
|
|
| 209 |
|
- |
## Content Fingerprinting — Remaining
|
| 210 |
|
- |
- [ ] Invisible image watermarks — LSB encoding (stub exists at `fingerprint/watermark_image.rs`)
|
| 211 |
|
- |
- [ ] Invisible audio watermarks — spread-spectrum (stub exists at `fingerprint/watermark_audio.rs`)
|
| 212 |
|
- |
- [ ] Wire visible stamps into download routes (stamp text files before serving)
|
| 213 |
|
- |
- [ ] Wire ZWC watermarks into download routes (watermark text files before serving)
|
| 214 |
|
- |
- [ ] ZIP/tar archive stamping (inject LICENSE.txt at archive root)
|
| 215 |
|
- |
- [ ] Dashboard UI for fingerprint tracing (lookup by fingerprint_id, view download history)
|
| 216 |
|
- |
- [ ] Anti-hotlink header checks in streaming routes (logic exists in `fingerprint/streaming.rs`)
|
|
144 |
+ |
## Creator Trust Audit (2026-04-27, round 3)
|
|
145 |
+ |
|
|
146 |
+ |
Resolved (moved to todo_done.md): download budget removal, grace period duration, tax disclaimer, unlimited downloads doc, Stripe suspension doc, "original creative work" definition, post-cancellation retention, analytics "we don't track" expansion, Streaming→Everything rename, video "coming soon" labels removed, HSTS verified, git repo disk cleanup, succession plan, pricing page tier consistency, free item purchase redirect, dashboard Everything tier label.
|
|
147 |
+ |
|
|
148 |
+ |
### Remaining
|
|
149 |
+ |
- [ ] **Legal/tax professional review** — prep doc at `docs/internal/legal_review_prep.md` with 41 specific questions across ToS, privacy, DMCA, payments, tax. Recommended: split engagement (internet attorney 3h + tax professional 1-2h)
|
|
150 |
+ |
|
|
151 |
+ |
## Creator Trust Audit (2026-04-27, round 4)
|
|
152 |
+ |
|
|
153 |
+ |
Resolved mechanically: fan-plus.md "not yet available" removed (feature is live). how-we-work.md video "not yet available" removed (video upload/playback works). roadmap.md embeds + video moved from Direction to What's Built. Vaporware table in todo-creator-trust-audit.md updated.
|
|
154 |
+ |
|
|
155 |
+ |
### Docs — needs content decisions
|
|
156 |
+ |
- [x] **Tax documentation**: Already covered in payouts.md (lines 33-53) — US 1099-K, non-US guidance, Stripe links, "not tax advice" disclaimer. Pattern: statements + links to Stripe, avoids hardcoded thresholds.
|
|
157 |
+ |
- [x] **Support contact info**: Already covered — support/contact.md has 6 email addresses + response SLAs, dashboard has ticket form (user_support.html → WAM), forums exist
|
|
158 |
+ |
- [x] **Stripe country limitations**: Added Stripe availability note with link to stripe.com/global in getting-started.md, before "What we look for"
|
|
159 |
+ |
- [x] **"Material changes" in ToS**: Replaced vague "material changes" with specific notice periods: 30 days general, 90 days privacy, 90 days + grandfathering pricing, immediate for legal/security emergencies
|
|
160 |
+ |
- [x] **Creator earnings data / social proof**: Too early — platform is new. Founder uses it for own creations. Revisit when real creators are onboarded.
|
|
161 |
+ |
- [x] **Team/band accounts**: Added "Teams & Bands" section to getting-started.md — shared account vs individual accounts with co-authors, migration path
|
|
162 |
+ |
|
|
163 |
+ |
### Security
|
|
164 |
+ |
- [x] **IP retention cleanup verification**: Added `scheduler_job_runs` table (migration 081), job run recording for all 6 privacy jobs, new `fingerprint_ip_scrub` + `streaming_session_cleanup` jobs, "Privacy & Compliance" section on `/health` page showing last-run time + rows affected + status indicator. Daily jobs now also run on first tick after restart.
|
|
165 |
+ |
|
|
166 |
+ |
### Competitive
|
|
167 |
+ |
- [x] **Free trial application**: Waitlist application now includes free trial request fields (tier preference, trial length, reason). Available in both the join wizard and API route. Admin reviews and grants trials manually.
|
|
168 |
+ |
- [x] **Mobile fan app**: Expanded FAQ entry with native iOS/Android plans (library, offline, push). Added "Mobile apps" section to roadmap Direction.
|
|
169 |
+ |
- [x] **Email automation**: Added FAQ entry clarifying broadcasts + auto-notifications only, no drip/segmentation, suggesting external email service for advanced needs
|
|
170 |
+ |
|
|
171 |
+ |
### Low priority
|
|
172 |
+ |
- [x] **Custom domains prominence**: Added link to custom-domains.md in getting-started "Share your link" step
|
|
173 |
+ |
- [x] **Creator storefront preview/demo**: Added storefront customization (3 tiers: theme basics, custom CSS, full template access, all tiers) to roadmap Direction. Preview/demo deferred to beta.
|
|
174 |
+ |
|
|
175 |
+ |
---
|
|
176 |
+ |
|
|
177 |
+ |
## Launch Readiness (2026-04-27)
|
|
178 |
+ |
|
|
179 |
+ |
### Fixed
|
|
180 |
+ |
- [x] Pricing page: Big Files and Everything enabled in calculator
|
|
181 |
+ |
- [x] Purchase page: free items redirect to item page instead of broken checkout form
|
|
182 |
+ |
- [x] Dashboard: Everything tier shows "Coming soon" instead of broken Subscribe button
|
|
183 |
+ |
- [x] Pricing calculator: flipped colors so competitors show red when MNW is cheaper
|
|
184 |
+ |
- [x] Removed demo data: migration 080 deletes Elena Vasquez seed content
|
|
185 |
+ |
- [x] Docs accuracy: fixed "Connect Payments" → "Connect with Stripe", publish flow, notification labels, added tips notification
|
|
186 |
+ |
- [x] Landing page: replaced screenshot placeholder with sandbox link
|
|
187 |
+ |
- [x] Human testing code review: all 99 checklist items verified in code (routes, handlers, templates all exist)
|
|
188 |
+ |
|
|
189 |
+ |
### Pre-Launch Remaining
|
|
190 |
+ |
- [ ] Stripe live mode: confirm creator Stripe Connect onboarding complete (not test mode)
|
|
191 |
+ |
- [ ] Human testing: complete sign-off table in `deploy/human_testing.md` (code verified, needs manual walkthrough)
|
|
192 |
+ |
- [ ] Content seeding: at least one real creator with published content on discover page
|
|
193 |
+ |
- [ ] Content seeding items from Pre-Beta section above (subscription tier, license keys, discount codes, purchase flow tests)
|
|
194 |
+ |
- [ ] Outreach: hand-write emails using tiered creator list at `docs/internal/outreach/tiers.md`. Per-creator talking points and pitch angles included. Start with Tier 1 (alpha testers), then Tier 2 (profitable switchers)
|
|
195 |
+ |
|
|
196 |
+ |
---
|
| 217 |
197 |
|
|
| 218 |
198 |
|
---
|
| 219 |
199 |
|
|
| 264 |
244 |
|
- [ ] Remux where possible (H.264 in MOV -> H.264 in MP4, zero quality loss)
|
| 265 |
245 |
|
- [ ] Auto-generated thumbnails (ffmpeg frame extraction at configurable timestamp)
|
| 266 |
246 |
|
|
| 267 |
|
- |
#### Phase 14E-5: Streaming Tier Features
|
|
247 |
+ |
#### Phase 14E-5: Everything Tier Features
|
| 268 |
248 |
|
- [ ] Adaptive bitrate streaming (HLS/DASH) — multiple quality levels per video
|
| 269 |
249 |
|
- [ ] Audio: FLAC + Opus 128 + Opus 64 quality ladder
|
| 270 |
250 |
|
- [ ] Video: original + 1080p + 720p + 480p quality ladder (VP9 or AV1)
|
| 318 |
298 |
|
Weak points identified vs Ko-fi. Ordered by effort/impact.
|
| 319 |
299 |
|
|
| 320 |
300 |
|
#### Easy Wins
|
| 321 |
|
- |
- [x] Tips/donations — accept one-time payments without a product attached
|
| 322 |
|
- |
- [x] Revenue splits — record split obligations on purchases/tips for multi-author projects
|
| 323 |
|
- |
- [ ] Embeddable widgets — buy button / audio preview / checkout popup for external sites (Ko-fi's embed model is how many creators discover the platform)
|
| 324 |
301 |
|
- [ ] Fundraising goals — display campaign target + progress bar on project page (simple DB field + UI, high engagement signal)
|
| 325 |
302 |
|
|
| 326 |
303 |
|
#### Medium Effort
|
| 327 |
304 |
|
- [ ] Commissions — listing with portfolio, slot limits, client messaging, upfront payment (Ko-fi has full workflow; artists expect this)
|
| 328 |
|
- |
- [ ] Physical product listings — already planned above in Phase 20C
|
| 329 |
305 |
|
|
| 330 |
306 |
|
#### Structural Gaps (acknowledged, not urgent)
|
| 331 |
307 |
|
- [ ] Zero-cost entry — Ko-fi free tier costs $0 and takes 0% on tips. MNW's minimum is $10/mo. Earn-back credit softens this but doesn't eliminate the barrier for artists earning nothing yet. No action needed — this is a deliberate model difference, not a bug.
|
| 343 |
319 |
|
### Phase 21: Scheduled Content — Remaining
|
| 344 |
320 |
|
- [ ] Pre-save + pre-order, countdown display, calendar view
|
| 345 |
321 |
|
|
| 346 |
|
- |
### Phase 22: Streaming
|
|
322 |
+ |
### Phase 22: Live Streaming (Everything tier)
|
| 347 |
323 |
|
- [ ] Trigger: >500 creators, stable 1yr
|
| 348 |
324 |
|
|
| 349 |
325 |
|
### Phase 23: DSP
|
| 399 |
375 |
|
- [ ] MNW: OG metadata for item/project pages (social sharing cards)
|
| 400 |
376 |
|
- [ ] MNW blog posts: auto-preview linked URLs (same as MT)
|
| 401 |
377 |
|
|
| 402 |
|
- |
### Type Safety — Remaining
|
| 403 |
|
- |
- [ ] `PriceCents(i32)` newtype
|
| 404 |
|
- |
|
| 405 |
|
- |
### Reconsider
|
| 406 |
|
- |
- [ ] Cloudflare Email Address Obfuscation (currently OFF — was mangling git clone URLs)
|
| 407 |
378 |
|
|
| 408 |
379 |
|
---
|
| 409 |
380 |
|
|
| 410 |
|
- |
## Audit Items
|
| 411 |
|
- |
- [ ] Verify Postmark DKIM selector `20170907043118pm` in Postmark dashboard (returned empty in Run 6 DNS check)
|
| 412 |
|
- |
|
| 413 |
381 |
|
## Dependencies (blocked on upstream)
|
| 414 |
382 |
|
- [ ] Monitor yara-x for wasmtime >=42.0.2 (11 CVEs including 2 critical — RUSTSEC-2026-0095, -0096)
|
| 415 |
383 |
|
- [ ] Monitor aws-sdk-s3 for lru fix (RUSTSEC-2026-0002)
|
| 419 |
387 |
|
## Deferred
|
| 420 |
388 |
|
- [ ] Corporate structure: holding company (Makecreative Holdings LLC) with subsidiary LLCs for liability isolation if itsall.work launches. Setup checklist, Stripe contingency plan, entity details documented.
|
| 421 |
389 |
|
- [ ] Revenue-share crowdfunding: enable creators to fund projects by selling future revenue shares. 5-phase plan (MVP, controlled rollout, platform features, Reg CF compliance, full launch). Requires securities attorney consultation (~$5K) as first step. Year 1 cost ~$80K, separate from core MNW ops. See financial_dashboard.md.
|
| 422 |
|
- |
- [ ] sqlx offline mode
|
| 423 |
390 |
|
- [ ] Team/organization accounts
|
| 424 |
391 |
|
- [ ] Creator @makenot.work email addresses (forwarding-only to creator's real email, vanity address as premium feature). Migadu Mini ($90/yr) for business email; creator addresses via forwarding aliases on Maxi plan or lightweight relay. No mailbox hosting for creators.
|
| 425 |
392 |
|
- [ ] Tax-year revenue summary, invoice generation, 1099 guidance
|
| 429 |
396 |
|
- [ ] Podcast private RSS feeds (per-subscriber unique RSS, Spotify integration — Patreon/Substack have this)
|
| 430 |
397 |
|
- [ ] OG image generation
|
| 431 |
398 |
|
- [ ] UTM parameter tracking
|
| 432 |
|
- |
- [ ] Notification digest preferences, in-app notification center
|
| 433 |
399 |
|
- [ ] Blog post revision history
|
| 434 |
400 |
|
- [ ] Series/serial ordering, reading progress
|
| 435 |
401 |
|
- [ ] Traffic/referrer tracking
|
| 444 |
410 |
|
lib.rs, main.rs, config.rs, error.rs, auth.rs, db/
|
| 445 |
411 |
|
storage.rs, payments/, templates/, routes/
|
| 446 |
412 |
|
git/, git_issues/, synckit_auth.rs, build_runner.rs, validation/
|
| 447 |
|
- |
fingerprint/ (registry, visible stamps, watermarks, streaming)
|
|
413 |
+ |
license_templates.rs (license presets for items)
|
| 448 |
414 |
|
import/ (CSV converter, pipeline, intermediate format)
|
| 449 |
415 |
|
MNW/server/tests/
|
| 450 |
416 |
|
integration.rs, harness/, workflows/*.rs
|
| 451 |
|
- |
MNW/server/migrations/ (001-070)
|
|
417 |
+ |
MNW/server/migrations/ (001-080)
|
| 452 |
418 |
|
MNW/server/templates/
|
| 453 |
419 |
|
MNW/server/deploy/
|
| 454 |
420 |
|
MNW/server/site-docs/public/, MNW/server/site-docs/unpublished/
|
| 459 |
425 |
|
```
|
| 460 |
426 |
|
|
| 461 |
427 |
|
## Deps
|
| 462 |
|
- |
sqlx 0.8, uuid 1, chrono 0.4, argon2 0.5, tower-sessions 0.15, docengine (path dep, replaces pulldown-cmark + ammonia), aws-sdk-s3 1, async-stripe 0.37, reqwest 0.12, postmark (live), webauthn-rs 0.5
|
|
428 |
+ |
sqlx 0.8, uuid 1, chrono 0.4, argon2 0.5, tower-sessions 0.14 (store 0.15), docengine (path dep), s3-storage (path dep, wraps aws-sdk-s3 1), async-stripe 0.37, reqwest 0.12, postmark (live), webauthn-rs 0.5
|