- Switch to shared build-and-push.sh; version read from docs/changelog.md - Add docs/changelog.md; remove version.txt, .last-branch, .gitignore - Stack: image tag via SLEEP_MEDITATION_IMAGE_TAG - Downloader: YouTube support (yt-dlp + ffmpeg), best audio to mp3 - Downloader: Content-Type validation for direct URLs - Downloader: auto-fetch YouTube title; title field optional - Downloader: progress bar with phase (downloading/converting) - Downloader: store source URL per file; show Source link in manage list Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.7 KiB
HTML
54 lines
1.7 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
<title>Sleep Meditation</title>
|
|
<link rel="manifest" href="/manifest.webmanifest">
|
|
<link rel="stylesheet" href="/styles.css">
|
|
</head>
|
|
<body>
|
|
|
|
<!-- Player page -->
|
|
<main class="app" id="page-player">
|
|
<header>
|
|
<div class="header-top">
|
|
<h1>Sleep Meditation</h1>
|
|
<button id="refresh-btn" type="button" class="btn-refresh" title="Refresh">↺</button>
|
|
</div>
|
|
<p>Play relaxing MP3 tracks, including iPhone lock-screen playback after manual start.</p>
|
|
</header>
|
|
|
|
<section class="card">
|
|
<label for="playlist-select">Playlist</label>
|
|
<select id="playlist-select" aria-label="Choose a track"></select>
|
|
|
|
<audio id="player" controls preload="metadata" playsinline>
|
|
Your browser does not support the audio element.
|
|
</audio>
|
|
|
|
<div class="buttons">
|
|
<button id="prev" type="button">Previous</button>
|
|
<button id="play" type="button">Play/Pause</button>
|
|
<button id="next" type="button">Next</button>
|
|
<button id="restart" type="button">Back to start</button>
|
|
</div>
|
|
|
|
<p class="hint">
|
|
iPhone tip: tap Play once first. After that, audio usually continues on the lock screen.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<label>Downloads</label>
|
|
<div id="download-list"><p class="hint">No tracks downloaded yet.</p></div>
|
|
</section>
|
|
|
|
</main>
|
|
|
|
<script src="/app.js" defer></script>
|
|
</body>
|
|
</html>
|