sendou.ink/app/features
Kalle f8319a2f96 Fix image form field rejecting uploads on browsers without canvas webp encoding
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".
2026-06-10 21:45:42 +03:00
..
admin Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
api Update Biome to 2.4.8 2026-03-21 15:19:32 +02:00
api-private Migrate various tournament queries to Kysely (#3135) 2026-06-03 21:05:42 +03:00
api-public Various small bug fixes 2026-06-08 22:04:43 +03:00
art Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
articles New hooks and components for localized date time (#3065) 2026-05-17 13:19:25 +03:00
associations Scrims random fixes 2026-04-09 20:03:50 +03:00
auth Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
badges Add Gridlock badges 2026-05-31 18:36:16 +03:00
ban New hooks and components for localized date time (#3065) 2026-05-17 13:19:25 +03:00
bracket-test Add test bracket route 2026-03-29 14:49:04 +03:00
build-analyzer Optimize builds loaders (#3076) 2026-05-17 16:21:13 +03:00
build-stats Optimize builds loaders (#3076) 2026-05-17 16:21:13 +03:00
builds Fix more various small bugs 2026-06-09 21:52:26 +03:00
calendar Remove dead code 2026-06-10 19:59:34 +03:00
chat Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
comp-analyzer Fix SecurityError from comp-analyzer slider replaceState spam 2026-05-13 21:24:02 +03:00
components-showcase Convert edit teams form to SendouForm (#3138) 2026-06-04 20:38:24 +03:00
core/streams Fix streamer not deduped when in tournament 2026-05-02 13:18:02 +03:00
friends Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
front-page /q/settings -> /settings (#3085) 2026-05-23 18:07:01 +03:00
img-upload Fix image form field rejecting uploads on browsers without canvas webp encoding 2026-06-10 21:45:42 +03:00
info/routes Add to contributions 2026-04-24 20:24:30 +03:00
layout Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
leaderboards Add staleWhileRevalidate to leaderboard caches 2026-06-08 17:31:52 +03:00
lfg 10 star weapon pool (#3108) 2026-06-01 18:20:47 +03:00
links Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
live-streams Save tournament streamers for future usage 2026-03-28 13:23:12 +02:00
map-list-generator Fix mode starvation when generating map list with a positional pattern 2026-06-10 21:11:39 +03:00
map-planner Map planner ranges (#2986) 2026-04-18 17:31:08 +03:00
match-page-test/routes Scrim map by map mode (#3104) 2026-05-25 17:35:44 +03:00
match-profile Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
mmr Fix more various small bugs 2026-06-09 21:52:26 +03:00
notifications Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
object-damage-calculator Migrate to nested CSS 2026-03-28 16:30:28 +02:00
plus-suggestions Fix Plus Server suggestion long text overflows 2026-06-04 21:12:41 +03:00
plus-voting New hooks and components for localized date time (#3065) 2026-05-17 13:19:25 +03:00
scrims Fix more various small bugs 2026-06-09 21:52:26 +03:00
search Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
sendouq Various small bug fixes 2026-06-08 22:04:43 +03:00
sendouq-match Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
sendouq-streams New match page (#3032) 2026-05-04 18:15:10 +03:00
session-id Add session ID to server logs for user reporting (#2720) 2026-01-13 21:02:16 +02:00
settings Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
sidebar/core Fix streamer not deduped when in tournament 2026-05-02 13:18:02 +03:00
splatoon-rotations Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
team Add aspect-ratio to team page avatar 2026-06-06 15:30:50 +03:00
theme Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
tier-list-maker Fix more various small bugs 2026-06-09 21:52:26 +03:00
top-search XSearch player page division/mode icons reserve space 2026-06-06 16:01:11 +03:00
tournament Various small bug fixes 2026-06-08 22:04:43 +03:00
tournament-bracket Fix shows teams as placed before SE 3rd place match is played 2026-06-10 19:59:27 +03:00
tournament-lfg Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
tournament-match Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
tournament-organization Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
tournament-subs Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
user-page Migrate repository functions to use user id via ALS 2026-06-06 14:56:43 +03:00
user-search/routes Design refresh + a bunch of stuff (#2864) 2026-03-19 17:51:42 +02:00
vods Fix more various small bugs 2026-06-09 21:52:26 +03:00