Uploads, moderation and payments are separable to build but not separable to design: what you accept on day one determines whether you can ever sell it. This issue is for settling that, then splitting into implementation issues.
No implementation should start from this issue directly.
Phase A - uploads, free and open
- Sign-in, upload to R2 through a Worker that validates type and size, with the uploader asserting a licence.
- Everything lands in a queue, never straight into the catalogue.
- Rate limits and a maximum file size from the first commit.
Phase B - curation
- An approval queue. An open bucket attracts junk and worse; assume it will be abused and design for takedown from the start.
- Automated checks first: file type sniffing, dimension and size limits, SVG sanitisation.
- SVG is an XSS vector. Never render an uploaded SVG on the site without stripping scripts and external references.
- A reporting route and a documented takedown process.
Phase C - paid assets, only if the free tier gets traction
- Payments, payouts to creators, refunds, and the tax treatment of selling on someone else's behalf. This is the part that turns a side project into an obligation.
- Licence enforcement in an MIT-licensed, offline-capable app is weak by construction - anyone can build from source. Price accordingly, or sell convenience rather than access.
Open questions to answer before any code
- Who is legally publishing user uploads, and under whose terms?
- What is the takedown SLA, and who is on the hook for it?
- Does a paid tier fit a project whose pitch is "free, open source, no account"?
Depends on
#25 and #26 - the R2 catalogue and the in-app asset browser.
Uploads, moderation and payments are separable to build but not separable to design: what you accept on day one determines whether you can ever sell it. This issue is for settling that, then splitting into implementation issues.
No implementation should start from this issue directly.
Phase A - uploads, free and open
Phase B - curation
Phase C - paid assets, only if the free tier gets traction
Open questions to answer before any code
Depends on
#25 and #26 - the R2 catalogue and the in-app asset browser.