rtc_prd/story-loading.html
seaislee1209 066eb8f820 feat: music-creation page + MiniMax API integration + Flutter dev setup
Music Creation Page:
- Vinyl 3D flip to view lyrics, tonearm animation, glow rotation effect
- Circular SVG progress ring, speech bubble feedback, confirm dialog
- Playlist modal, free creation input, lyrics formatting optimization
- MiniMax API real music generation with SSE streaming progress

Backend:
- FastAPI proxy server.py for MiniMax API calls
- Music + lyrics file persistence to Capybara music/ directory
- GET /api/playlist endpoint for auto-building playlist from files

UI/UX Refinements:
- frontend-design skill compliance across all pages
- Glassmorphism effects, modal interactions, scroll tap prevention
- iPhone 12 Pro responsive layout (390x844)

Flutter Development Preparation:
- Installed flutter-expert skill with 6 reference docs
- Added 5 Cursor Rules: official Flutter, clean architecture, UI performance, testing, Dart standards

Assets:
- 9 Capybara music MP3 files + lyrics TXT files
- MiniMax API documentation

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 18:23:19 +08:00

73 lines
2.2 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
<title>Airhub - 故事生成中</title>
<link rel="stylesheet" href="styles.css">
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&family=DM+Sans:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
body {
background: #FDF9F3;
}
/* Force Warm Sand */
</style>
</head>
<body>
<div class="loading-container">
<!-- Center Image -->
<img src="kapi写作中.png" alt="Writing Capybara" class="kapi-writing-img">
<!-- Dynamic Text -->
<div class="loading-text" id="loading-text">构思故事中...</div>
<!-- Progress Bar -->
<div class="progress-track">
<div class="progress-fill" id="progress-fill"></div>
</div>
</div>
<script>
// Progress Logic
const texts = [
{ pct: 20, text: "正在收集灵感碎片..." },
{ pct: 50, text: "正在往故事里撒魔法粉..." },
{ pct: 80, text: "正在编制最后的魔法..." },
{ pct: 98, text: "大功告成!" }
];
let progress = 0;
const fill = document.getElementById('progress-fill');
const textEl = document.getElementById('loading-text');
const interval = setInterval(() => {
progress += 1; // 0 to 100
// Visual Updates
fill.style.width = `${progress}%`;
// Text Updates
const target = texts.find(t => t.pct === progress);
if (target) {
textEl.innerText = target.text;
textEl.style.opacity = 0;
setTimeout(() => textEl.style.opacity = 1, 100); // Fade effect
}
if (progress >= 100) {
clearInterval(interval);
// Redirect
setTimeout(() => {
window.location.href = 'story-detail.html';
}, 500);
}
}, 35); // Total time ~3.5s
</script>
</body>
</html>