Initial commit: Tonemark PWA
Build & Push Docker Image / build-and-push (push) Failing after 11s

Tonemark is a SvelteKit PWA for transcribing YouTube videos, audio
and video files, and microphone recordings using a local Whisper backend.

Features:
- Dark glassmorphic UI with electric-lime accent (5 switchable themes)
- Rail nav (desktop) / tab bar (mobile) layout
- Drop zone, YouTube URL input, and live audio recording inputs
- Audio mode waveform cards (none / standard / aggressive / auto)
- Real-time transcription progress with animated waveform
- Job queue with SSE streaming updates
- Push notifications on job completion
- PWA with native SvelteKit service worker
- SRT / TXT / MD / JSON transcript downloads

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Giancarmine Salucci
2026-05-06 16:41:25 +02:00
co-authored by Copilot
commit 13a96b6efa
68 changed files with 9712 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
export type AudioMode = 'auto' | 'standard' | 'aggressive' | 'none';
export type JobStatus = 'pending' | 'downloading' | 'preparing' | 'transcribing' | 'processing' | 'done' | 'failed' | 'cancelled';
export interface Segment {
index: number;
start: number;
end: number;
text: string;
words: Word[];
}
export interface Word {
start: number;
end: number;
word: string;
probability?: number;
}
export interface Job {
id: string;
status: JobStatus;
title: string;
source: string;
audioMode: AudioMode;
meanVolume: number | null;
whisperJobId: string | null;
progress: number;
outputDir: string | null;
segmentsJson: string | null;
error: string | null;
createdAt: string;
updatedAt: string;
}
export interface WhisperJob {
id: string;
status: 'queued' | 'running' | 'done' | 'failed' | 'cancelled';
language: string | null;
task: string;
duration_secs: number | null;
progress: number;
segments: Segment[];
error: string | null;
created_at: string;
completed_at: string | null;
}
export interface PushSubscription {
id: number;
endpoint: string;
p256dh: string;
auth: string;
createdAt: string;
}
export interface AudioAnalysis {
meanVolume: number;
maxVolume: number;
}