| 3 |
3 |
|
## Status
|
| 4 |
4 |
|
Done: All pre-beta phases, UX audit remediation, creator trust audit remediation. Active: Creator setup (Stripe), manual testing. Next: Soft launch.
|
| 5 |
5 |
|
|
| 6 |
|
- |
v0.4.10 deployed 2026-05-04. Audit grade A (Run 18, 2026-05-01). Code fuzz Run 19 complete (2026-05-03, 17 bugs fixed). ~1,220 unit + ~679 integration = ~1,930 tests (all passing). CI on astra operational. Mutation kill rate 99.4%. Property-based testing active (proptest). `cargo test --features fast-tests` for fast runs.
|
|
6 |
+ |
v0.4.10 deployed 2026-05-04. Audit grade A (Run 20, 2026-05-04). ~83K LOC, 1,214+ test annotations, 0 cargo warnings, 2 cold spots. CI on astra operational. Mutation kill rate 99.4%. Property-based testing active (proptest). `cargo test --features fast-tests` for fast runs.
|
| 7 |
7 |
|
|
| 8 |
8 |
|
Human tasks (manual testing, outreach, legal, infrastructure) moved to `human_todo.md`.
|
| 9 |
9 |
|
Completed items moved to `todo_done.md`.
|
| 12 |
12 |
|
|
| 13 |
13 |
|
## Remaining Audit Items
|
| 14 |
14 |
|
|
| 15 |
|
- |
### Code Fuzz (Run 19, 2026-05-03) — DONE
|
| 16 |
|
- |
All high/serious/minor items fixed. Migration 090 deployed. Test failures fixed. CI fixed.
|
|
15 |
+ |
### Run 20 (2026-05-04) — Medium priority — DONE
|
| 17 |
16 |
|
|
| 18 |
|
- |
#### Low (previous)
|
| 19 |
|
- |
- [ ] Add README.md to server/
|
|
17 |
+ |
### Run 20 — Low priority — DONE
|
|
18 |
+ |
Split checkout.rs (792 -> 434 + 308 helpers). yara-x bumped 1.14->1.15 (intaglio fix). aws-sdk-s3 bumped 1.119->1.131. rustls-webpki 0.101.7/0.103.10 remain upstream-blocked.
|
| 20 |
19 |
|
|
| 21 |
20 |
|
### Deferred Code Quality
|
| 22 |
|
- |
- [ ] Extract inline SQL from route handlers to db/ (4 locations)
|
| 23 |
|
- |
- [ ] Remove `async-trait` in favor of Rust 2024 native async traits
|
| 24 |
|
- |
- [ ] Migrate inline `onclick` handlers to `addEventListener` for strict CSP
|
| 25 |
|
- |
- [ ] Monitor scheduler.rs (1249), git/mod.rs (624), license_keys.rs (684) for growth
|
|
21 |
+ |
- [ ] Remove `async-trait` in favor of Rust 2024 native async traits (chronic)
|
|
22 |
+ |
- [ ] Add README.md to server/
|
|
23 |
+ |
- [ ] Split oversized route files: exports.rs (737), license_keys.rs (741), health.rs (844), tabs/user.rs (707)
|
|
24 |
+ |
- [ ] Monitor scheduler.rs (1249), git/mod.rs (624) for growth
|
|
25 |
+ |
- [x] [rust-fuzz] Replace `.unwrap()` with `.expect("tier passed is_none guard")` in db/creator_tiers.rs:607
|
|
26 |
+ |
- [x] [rust-fuzz] Change `Config.host_url` from `String` to `Arc<str>` — eliminates 30+ String clones across codebase
|
| 26 |
27 |
|
|
| 27 |
|
- |
### Dashboard Usability Audit (2026-05-03)
|
|
28 |
+ |
### Dashboard Restructure (2026-05-05)
|
| 28 |
29 |
|
|
| 29 |
|
- |
Grade: B-. Complexity B, Completeness B-, Learnability C+, Discoverability C.
|
|
30 |
+ |
Redesign user dashboard around user intent rather than role. Split the monolithic Account tab into three purpose-driven tabs. Gate content by account state (fan → new creator → active creator).
|
| 30 |
31 |
|
|
| 31 |
|
- |
#### Discoverability (Critical)
|
| 32 |
|
- |
- [x] Reorganize user dashboard tabs — Analytics and Creator moved to visible tab bar; Support moved to overflow. SyncKit, Media, SSH Keys, Forums remain in overflow
|
| 33 |
|
- |
- [ ] Add dashboard tab customization setting — let users choose which tabs are always visible in the tab bar and which go into the overflow menu. Store preference per user
|
| 34 |
|
- |
- [ ] Move SyncKit tab to project dashboard — SyncKit apps are tied to projects (Linked To column). Show as a project-level tab alongside Code, filtered to that project's apps. Keep a user-level summary view (or link) for creators managing apps across multiple projects
|
| 35 |
|
- |
- [x] Surface Stripe requirement on Project Overview — persistent banner with direct link, shown until Stripe is connected
|
| 36 |
|
- |
- [ ] Add Media Library access from content editors — "Insert Image" button in blog editor and item content editor that opens media library. Currently completely disconnected from where users need it
|
| 37 |
|
- |
- [x] Always show Blog tab with empty state — shows "Start writing to engage your audience" with context about RSS
|
| 38 |
|
- |
- [ ] Add content search/filter to project Content tab — search by title, filter by status (Draft/Published/Scheduled) and type. Table stakes for any content management interface
|
| 39 |
|
- |
- [ ] Add "Embed & Share" quick action on Item Overview — embed codes only discoverable by navigating to specific item's Embed tab
|
|
32 |
+ |
#### Tab Structure
|
| 40 |
33 |
|
|
| 41 |
|
- |
#### Learnability (High)
|
| 42 |
|
- |
- [x] Make breadcrumbs clickable navigation links — link to `#tab-projects` for correct tab navigation
|
| 43 |
|
- |
- [ ] Add explanatory text to jargon terms: SyncKit ("Cloud sync for indie apps" subtitle), Insertions (rename to "Dynamic Clips" in storage display), Labels ("Platform-curated tags describing your project's commitments"), Revenue Splits (add setup instructions linking to Project Members tab)
|
| 44 |
|
- |
- [x] Improve onboarding checklist context — each step now has a brief explanation
|
| 45 |
|
- |
- [ ] Add empty state context to analytics — change "No revenue data yet" to "Once you publish items and make sales, revenue data will appear here" with link to publish
|
| 46 |
|
- |
- [x] Add AI Classification option descriptions in item_details dropdown
|
|
34 |
+ |
New user-level tabs: **Projects, Payments, Analytics, Profile, Account, Plan** + overflow (Media, SSH Keys, Forums, Support).
|
| 47 |
35 |
|
|
| 48 |
|
- |
#### Complexity (Medium)
|
| 49 |
|
- |
- [ ] Split Account Details tab into sub-sections — currently 13 sections in one scroll. Group into: Profile (name, bio, links, domain), Security (password, 2FA, passkeys, sessions), Notifications, Data & Privacy (export, import, deletion)
|
| 50 |
|
- |
- [x] Hide UUID from item dashboard header — replaced with "Copy ID" button
|
| 51 |
|
- |
- [x] Hide Stripe account ID behind disclosure toggle — collapsed behind `<details>` "Show account ID"
|
| 52 |
|
- |
- [ ] Simplify Stripe status display — replace raw onboarding states with user-intent language: "Ready to receive payments" (green) or "Action required: [task]" (red)
|
|
36 |
+ |
Fan tab bar (no creator access): **Profile, Payments, Plan, Support** — 4 tabs, no overflow.
|
| 53 |
37 |
|
|
| 54 |
|
- |
#### Feature Completeness (Medium)
|
| 55 |
|
- |
- [ ] Add download count analytics per item — standard on Bandcamp, Gumroad; primary consumption metric for digital goods
|
| 56 |
|
- |
- [ ] Add cross-project item view — creator with 3 projects can't see all items in one place; no global search
|
| 57 |
|
- |
- [ ] Add refund initiation from dashboard — currently must go to Stripe dashboard to issue refunds
|
|
38 |
+ |
| Tab | Contents | Mental model |
|
|
39 |
+ |
|-----|----------|--------------|
|
|
40 |
+ |
| Projects | Project list, create project | "My work" |
|
|
41 |
+ |
| Payments | Purchases (fan), + sales/tips/splits (creator) | "My money" |
|
|
42 |
+ |
| Analytics | Views, revenue, fans | "My numbers" |
|
|
43 |
+ |
| Profile | Display name, bio, links, custom domain, personal feed | "How the world sees me" |
|
|
44 |
+ |
| Account | Email/username, password, 2FA, passkeys, sessions, notifications, data export/import, account status, pause, delete | "My account's mechanics" |
|
|
45 |
+ |
| Plan | Creator tier, storage, Stripe connect, invites, broadcast; or "Become a Creator" application for fans | "My relationship with the platform" |
|
|
46 |
+ |
|
|
47 |
+ |
Overflow (creator only): Media (after first project), SSH Keys (when git enabled), Forums (when MT memberships exist), Support (always).
|
|
48 |
+ |
|
|
49 |
+ |
#### Progressive Disclosure by Account State
|
|
50 |
+ |
|
|
51 |
+ |
**Fan (no creator access):**
|
|
52 |
+ |
- Profile: display name, bio, links, personal feed. No custom domain
|
|
53 |
+ |
- Payments: purchases only. No seller sections
|
|
54 |
+ |
- Plan: "Become a Creator" — explanation, tier comparison, application form
|
|
55 |
+ |
- Account: full security (password, 2FA, passkeys, sessions), fan notification prefs (release alerts, login alerts), data export, delete
|
|
56 |
+ |
- Hidden entirely: Projects, Analytics
|
|
57 |
+ |
|
|
58 |
+ |
**New creator (approved, no projects/sales yet):**
|
|
59 |
+ |
- All fan content, plus:
|
|
60 |
+ |
- Projects: empty state → "Create your first project"
|
|
61 |
+ |
- Analytics: empty state → "Publish an item to start tracking views and revenue"
|
|
62 |
+ |
- Profile: + custom domain
|
|
63 |
+ |
- Account: + pause creator, + creator notification prefs (sale, follower, issue alerts)
|
|
64 |
+ |
- Payments: + empty seller section ("Once you make sales, they appear here")
|
|
65 |
+ |
- Plan: current tier, storage, upgrade/downgrade, invites, broadcast
|
|
66 |
+ |
|
|
67 |
+ |
**Active creator:**
|
|
68 |
+ |
- Full content in all tabs
|
|
69 |
+ |
|
|
70 |
+ |
#### Implementation Steps
|
|
71 |
+ |
|
|
72 |
+ |
- [x] **Phase 1: Split templates** — Extract `user_details.html` into `user_profile.html`, `user_account.html`, `user_plan.html`
|
|
73 |
+ |
- [x] **Phase 2: Route handlers** — Add `dashboard_tab_profile`, `dashboard_tab_account`; keep `dashboard_tab_creator` (served as "Plan" tab)
|
|
74 |
+ |
- [x] **Phase 3: Tab bar** — Update `dashboard-user.html` with new tab layout. Fan vs creator logic for which tabs render
|
|
75 |
+ |
- [x] **Phase 4: Progressive disclosure** — Gate sections within each tab by account state. Custom domain behind creator access. Seller payments behind creator access. Creator notifications behind creator access. Analytics empty state improved
|
|
76 |
+ |
- [x] **Phase 5: Move SyncKit to project dashboard** — Project-level tab alongside Code, filtered to that project's apps. DB query `get_sync_apps_by_project` added. Removed from user-level overflow
|
|
77 |
+ |
- [x] **Phase 6: Simplify Stripe status** — Single intent-driven status: "Ready to receive payments" (green check) or "Action required: [task]" (warning). Replaces 3-column grid + multiple warning banners
|
|
78 |
+ |
- [ ] **Phase 7: Performance pass** — Deferred to a dedicated cross-site performance push. Pre-fetch tab data on hover, optimize perceived load times, aim for A+ responsiveness across every page
|
|
79 |
+ |
|
|
80 |
+ |
#### Remaining Items (from previous audit, unchanged)
|
|
81 |
+ |
|
|
82 |
+ |
Discoverability:
|
|
83 |
+ |
- [ ] Add Media Library access from content editors — "Insert Image" button in blog/item editors
|
|
84 |
+ |
- [ ] Add content search/filter to project Content tab — search by title, filter by status/type
|
|
85 |
+ |
- [ ] Add "Embed & Share" quick action on Item Overview
|
|
86 |
+ |
|
|
87 |
+ |
Learnability:
|
|
88 |
+ |
- [x] Rename jargon: Insertions → "Clips"/"Dynamic Clips", Revenue Splits → "Collaborator Payouts", SyncKit tab → "Cloud Sync"
|
|
89 |
+ |
- [x] Remove Labels feature — AI disclosure covers the trust signal use case. Deleted: db module, API routes, admin panel, discover filters, project settings, item publish confirmations, 12 tests. DB tables (labels, project_labels) still exist but are unused; drop in a future migration
|
|
90 |
+ |
- [x] Add empty state context to analytics (done in Phase 4)
|
|
91 |
+ |
|
|
92 |
+ |
Feature Completeness:
|
|
93 |
+ |
- [ ] Add download count analytics per item
|
|
94 |
+ |
- [ ] Add cross-project item view
|
|
95 |
+ |
- [ ] Add refund initiation from dashboard
|
| 58 |
96 |
|
- [ ] Add "Export as CSV" button on item sales tables
|
| 59 |
97 |
|
|
| 60 |
|
- |
#### Discoverability (Lower)
|
| 61 |
|
- |
- [ ] Add bulk operations hint on Content tab — show "Select items for bulk actions" tip; show action bar in disabled state so feature is discoverable
|
| 62 |
|
- |
- [ ] Add contextual next-step suggestions after key actions — "Next: Set pricing" after creating item; "Next: Create item" after creating project
|
| 63 |
|
- |
- [ ] Show all conditional tabs (SyncKit, SSH Keys, Forums) always with empty states explaining prerequisites — instead of hiding them entirely
|
|
98 |
+ |
Discoverability (Lower):
|
|
99 |
+ |
- [ ] Add bulk operations hint on Content tab
|
|
100 |
+ |
- [ ] Add contextual next-step suggestions after key actions
|
| 64 |
101 |
|
|
| 65 |
102 |
|
### UX — Deferred (post-beta table stakes)
|
| 66 |
103 |
|
- [ ] Reviews/ratings system for items
|