feat: reject with feedback, email alerts, SSE real-time updates

Reject modal now requires a reason — stored as an auto-comment on the
version so context stays in the thread. Email alert fires on first play
of a shared link (fire-and-forget, no-op without RESEND_API_KEY). SSE
endpoint per track broadcasts version:new, version:status and
comment:new events; track page subscribes and reloads data live.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Robin Choice
2026-04-23 10:28:58 +02:00
parent df571df567
commit 06f0a43532
10 changed files with 269 additions and 13 deletions

View File

@@ -53,6 +53,10 @@ export const updateVersionSchema = z.object({
branchLabel: z.string().max(100).nullable().optional(),
});
export const rejectVersionSchema = z.object({
reason: z.string().min(1, 'Begründung erforderlich').max(2000),
});
export const requestStemUploadUrlSchema = z.object({
fileName: z.string().min(1),
mimeType: z.string().min(1),