The SendouForm image field compresses the picked file client-side with
Compressor.js requesting "image/webp" output, which uses canvas.toBlob
under the hood. Per the HTML spec, browsers that can't encode the
requested type silently fall back to PNG instead of erroring (Safari /
all iOS browsers, Brave with fingerprint protection, older Android
WebViews). The resulting "data:image/png;base64," data URL rendered a
working preview but failed the zod schema's webp prefix check, showing
the user a bare "Invalid input" error with no way to upload.
Accept the png fallback in the schema and detect the actual format from
magic bytes on the server, storing the file with the matching extension
instead of always ".webp".
* Initial
* Progress
* Initial UI
* Can submit request
* Progress
* Show text if no scrims
* Can cancel request, tabs
* Delete post
* Popover if can't delete
* Request rows
* Progress
* Scrim page initial
* Fix migration order
* Progress
* Progress
* Works again
* Make it compile
* Make it compile again
* Work
* Progress
* Progress
* Progress
* Associations initial
* Association visibility work
* notFoundVisibility form fields initial
* Progress
* Association leave/join + reset invite code
* Progress
* Select test
* Merge branch 'rewrite' into scrims
* Remeda for groupBy
* Select with search
* Outline styling for select
* Select done?
* Fix prop names
* Paginated badges
* Less important
* Select no results
* Handle limiting select width
* UserSearch non-working
* Fix problem from merge
* Remove UserSearch for now
* Remove todo
* Flaggable
* Remove TODOs
* i18n start + styling
* Progress
* i18n done
* Add association e2e test
* E2E tests
* Done?
* Couple leftovers
* Initial
* Progress
* Recent winners
* Add button
* Progress
* Mobile nav initial
* UI tweaks
* Overflow
* AnythingAdder links to places
* Remove color for tournament showcase
* Adjust SQ top banner based on if season is on right or not
* Tournament participant count fixed
* Log out
* todo
* Progress
* Nav complete
* Done?
* Fix lint
* Translate settings
* Initial
* Faster user page
* Remove redundant function
* Favorite badge sorting
* Upgrade deps
* Simplify entry.server
* Bun tests initial
* Update package.json npm -> bun
* Update README
* Type safe translations again
* Don't load streams info for finalized tournaments
* Translations as an object
* More unit test work
* Convert match.server.test
* test
* test
* test
* test
* test
* test
* test
* test
* test
* test
* test
* test
* test
* test
* test
* test
* test
* Test & all done
* Working cf
* Bun GA try
* No cache
* spacing
* spacing 2
* Add SQL logging
* Remove NR
* Hmm
* Hmm 2
* Interesting
* SKALOP_SYSTEM_MESSAGE_URL
* .
* .
* ?
* .
* ?
* Server.ts adjust
* Downgrade Tldraw
* E2E test fix
* Fix lint