Files
kidsbox/www/index.html
Claude bf9852c345 Implement full NFC-URL streaming architecture
- rc522: add NDEF URL reading via WUPA+cascade anticoll+SELECT+TLV parse
- AudioPlayer: route http:// URIs to esp_player_http_music_play()
- CacheManager: download URLs async to /sdcard/cache/{hash}.{ext}
- TagPlayerControl: NDEF URL → cache-or-stream; fallback to UID local mapping
- RFIDInterface: wire ndef_callback, expose combined uid+url callback
- WebInterface: add /api/info, /api/storage, /api/playback, /api/bluetooth
- BluetoothInterface: stub for A2DP speaker mode
- Networking: WiFi connect with 30s timeout instead of blocking forever
- main.cpp: re-enable WiFi + web server, fix init order, add CacheManager
- www/: full SPA — playback controls, device info, storage, BT pairing
- .gitmodules: switch rc522 submodule URL to HTTPS

https://claude.ai/code/session_01MhAnh68DPNnTjcKqjNYDmk
2026-06-12 19:44:54 +00:00

60 lines
2.0 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Kidsbox</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header>
<h1>&#127911; Kidsbox</h1>
</header>
<main>
<section class="card" id="section-playback">
<h2>Now Playing</h2>
<div class="track-uri" id="track-uri">—</div>
<div class="playback-controls">
<button class="btn btn-primary" id="btn-pause" disabled>Pause</button>
<button class="btn btn-secondary" id="btn-stop" disabled>Stop</button>
</div>
<div class="volume-row">
<label for="volume-slider">Volume</label>
<input type="range" id="volume-slider" min="0" max="100" value="50">
<span id="volume-label">50</span>
</div>
</section>
<section class="card" id="section-info">
<h2>Device Info</h2>
<table class="info-table">
<tr><th>IP Address</th><td id="info-ip">—</td></tr>
<tr><th>Status</th><td id="info-playing">—</td></tr>
<tr><th>Cache Used</th><td id="info-cache">—</td></tr>
<tr><th>Free Heap</th><td id="info-heap">—</td></tr>
</table>
<button class="btn btn-secondary" id="btn-refresh-info">Refresh</button>
</section>
<section class="card" id="section-storage">
<h2>Storage</h2>
<div class="storage-header">
<span id="storage-summary">Loading…</span>
<button class="btn btn-danger" id="btn-clear-cache">Clear All</button>
</div>
<ul class="cache-list" id="cache-list"></ul>
</section>
<section class="card" id="section-bluetooth">
<h2>Bluetooth Speaker</h2>
<p class="bt-status" id="bt-status">Disabled</p>
<button class="btn btn-secondary" id="btn-bt-toggle">Enable</button>
<p class="note">Pair your phone to play music through the Kidsbox speaker.</p>
</section>
</main>
<script src="main.js"></script>
</body>
</html>