Initial commit: Tonemark PWA
Some checks failed
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>
19
static/favicon.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#ffb18a"></stop>
|
||||
<stop offset="55%" stop-color="#ff8a5c"></stop>
|
||||
<stop offset="100%" stop-color="#e8612d"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient id="sheen" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#fff" stop-opacity="0.35"></stop>
|
||||
<stop offset="55%" stop-color="#fff" stop-opacity="0"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="0" y="0" width="32" height="32" rx="7.2" ry="7.2" fill="url(#bg)"></rect>
|
||||
<rect x="0" y="0" width="32" height="19.2" rx="7.2" ry="7.2" fill="url(#sheen)"></rect>
|
||||
<rect x="8.8" y="8.64" width="3.52" height="14.72" rx="1.76" ry="1.76" fill="#0c0d10"></rect>
|
||||
<rect x="14.24" y="5.4399999999999995" width="3.52" height="21.12" rx="1.76" ry="1.76" fill="#0c0d10"></rect>
|
||||
<rect x="19.68" y="10.559999999999999" width="3.52" height="10.88" rx="1.76" ry="1.76" fill="#0c0d10"></rect>
|
||||
<circle cx="21.439999999999998" cy="28.96" r="1.12" fill="#0c0d10"></circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
static/icons/android-icon-192.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
static/icons/android-icon-512.png
Normal file
|
After Width: | Height: | Size: 213 KiB |
BIN
static/icons/apple-touch-icon-180.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
static/icons/favicon-16.png
Normal file
|
After Width: | Height: | Size: 720 B |
BIN
static/icons/favicon-32.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
static/icons/favicon-64.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
19
static/icons/tonemark-icon-1024.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#ffb18a"></stop>
|
||||
<stop offset="55%" stop-color="#ff8a5c"></stop>
|
||||
<stop offset="100%" stop-color="#e8612d"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient id="sheen" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#fff" stop-opacity="0.35"></stop>
|
||||
<stop offset="55%" stop-color="#fff" stop-opacity="0"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="0" y="0" width="1024" height="1024" rx="230.4" ry="230.4" fill="url(#bg)"></rect>
|
||||
<rect x="0" y="0" width="1024" height="614.4" rx="230.4" ry="230.4" fill="url(#sheen)"></rect>
|
||||
<rect x="281.6" y="276.48" width="112.64" height="471.04" rx="56.32" ry="56.32" fill="#0c0d10"></rect>
|
||||
<rect x="455.68" y="174.07999999999998" width="112.64" height="675.84" rx="56.32" ry="56.32" fill="#0c0d10"></rect>
|
||||
<rect x="629.76" y="337.91999999999996" width="112.64" height="348.16" rx="56.32" ry="56.32" fill="#0c0d10"></rect>
|
||||
<circle cx="686.0799999999999" cy="926.72" r="35.84" fill="#0c0d10"></circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
19
static/icons/tonemark-icon-180.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 180 180" width="180" height="180">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#ffb18a"></stop>
|
||||
<stop offset="55%" stop-color="#ff8a5c"></stop>
|
||||
<stop offset="100%" stop-color="#e8612d"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient id="sheen" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#fff" stop-opacity="0.35"></stop>
|
||||
<stop offset="55%" stop-color="#fff" stop-opacity="0"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="0" y="0" width="180" height="180" rx="40.5" ry="40.5" fill="url(#bg)"></rect>
|
||||
<rect x="0" y="0" width="180" height="108" rx="40.5" ry="40.5" fill="url(#sheen)"></rect>
|
||||
<rect x="49.5" y="48.6" width="19.8" height="82.8" rx="9.9" ry="9.9" fill="#0c0d10"></rect>
|
||||
<rect x="80.1" y="30.599999999999994" width="19.8" height="118.80000000000001" rx="9.9" ry="9.9" fill="#0c0d10"></rect>
|
||||
<rect x="110.7" y="59.4" width="19.8" height="61.2" rx="9.9" ry="9.9" fill="#0c0d10"></rect>
|
||||
<circle cx="120.6" cy="162.9" r="6.300000000000001" fill="#0c0d10"></circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
static/icons/tonemark-icon-32.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#ffb18a"></stop>
|
||||
<stop offset="55%" stop-color="#ff8a5c"></stop>
|
||||
<stop offset="100%" stop-color="#e8612d"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient id="sheen" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#fff" stop-opacity="0.35"></stop>
|
||||
<stop offset="55%" stop-color="#fff" stop-opacity="0"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="0" y="0" width="32" height="32" rx="7.2" ry="7.2" fill="url(#bg)"></rect>
|
||||
<rect x="0" y="0" width="32" height="19.2" rx="7.2" ry="7.2" fill="url(#sheen)"></rect>
|
||||
<rect x="8.8" y="8.64" width="3.52" height="14.72" rx="1.76" ry="1.76" fill="#0c0d10"></rect>
|
||||
<rect x="14.24" y="5.4399999999999995" width="3.52" height="21.12" rx="1.76" ry="1.76" fill="#0c0d10"></rect>
|
||||
<rect x="19.68" y="10.559999999999999" width="3.52" height="10.88" rx="1.76" ry="1.76" fill="#0c0d10"></rect>
|
||||
<circle cx="21.439999999999998" cy="28.96" r="1.12" fill="#0c0d10"></circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
19
static/icons/tonemark-icon-512.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#ffb18a"></stop>
|
||||
<stop offset="55%" stop-color="#ff8a5c"></stop>
|
||||
<stop offset="100%" stop-color="#e8612d"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient id="sheen" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#fff" stop-opacity="0.35"></stop>
|
||||
<stop offset="55%" stop-color="#fff" stop-opacity="0"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="0" y="0" width="512" height="512" rx="115.2" ry="115.2" fill="url(#bg)"></rect>
|
||||
<rect x="0" y="0" width="512" height="307.2" rx="115.2" ry="115.2" fill="url(#sheen)"></rect>
|
||||
<rect x="140.8" y="138.24" width="56.32" height="235.52" rx="28.16" ry="28.16" fill="#0c0d10"></rect>
|
||||
<rect x="227.84" y="87.03999999999999" width="56.32" height="337.92" rx="28.16" ry="28.16" fill="#0c0d10"></rect>
|
||||
<rect x="314.88" y="168.95999999999998" width="56.32" height="174.08" rx="28.16" ry="28.16" fill="#0c0d10"></rect>
|
||||
<circle cx="343.03999999999996" cy="463.36" r="17.92" fill="#0c0d10"></circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
19
static/icons/tonemark-icon-android-fg.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#ffb18a"></stop>
|
||||
<stop offset="55%" stop-color="#ff8a5c"></stop>
|
||||
<stop offset="100%" stop-color="#e8612d"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient id="sheen" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#fff" stop-opacity="0.35"></stop>
|
||||
<stop offset="55%" stop-color="#fff" stop-opacity="0"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="0" y="0" width="512" height="512" fill="#ff8a5c"></rect>
|
||||
|
||||
<rect x="140.8" y="138.24" width="56.32" height="235.52" rx="28.16" ry="28.16" fill="#0c0d10"></rect>
|
||||
<rect x="227.84" y="87.03999999999999" width="56.32" height="337.92" rx="28.16" ry="28.16" fill="#0c0d10"></rect>
|
||||
<rect x="314.88" y="168.95999999999998" width="56.32" height="174.08" rx="28.16" ry="28.16" fill="#0c0d10"></rect>
|
||||
<circle cx="343.03999999999996" cy="463.36" r="17.92" fill="#0c0d10"></circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
44
static/manifest.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "Tonemark",
|
||||
"short_name": "Tonemark",
|
||||
"description": "Fast audio and video transcription powered by Whisper",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"background_color": "#0c0d10",
|
||||
"theme_color": "#0c0d10",
|
||||
"orientation": "any",
|
||||
"share_target": {
|
||||
"action": "/share",
|
||||
"method": "POST",
|
||||
"enctype": "multipart/form-data",
|
||||
"params": {
|
||||
"title": "title",
|
||||
"text": "text",
|
||||
"url": "url",
|
||||
"files": [
|
||||
{
|
||||
"name": "file",
|
||||
"accept": ["audio/*", "video/*"]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"icons": [
|
||||
{
|
||||
"src": "/icons/android-icon-192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/icons/android-icon-512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/icons/tonemark-icon-android-fg.svg",
|
||||
"sizes": "any",
|
||||
"type": "image/svg+xml",
|
||||
"purpose": "maskable"
|
||||
}
|
||||
]
|
||||
}
|
||||
3
static/robots.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
# allow crawling everything by default
|
||||
User-agent: *
|
||||
Disallow:
|
||||