Lilt · Product design blueprint v1 · 2026-09-03 · 中英对照 Bilingual

Lilt 产品设计蓝图 v1Lilt product blueprint — functions, data capture, library, journey, and how the research method becomes interaction

一个 App、两种模式:Settle(安定)用无旋律的自适应中性声音接住急性焦虑;Unwind(舒缓)用真歌的舒缓版陪你从一天里退出来。手表/戒指给出心率,App 静默地调整声音,结束后才把"比你平时更平静了多少"告诉你。每一次聆听同时是一次被测量的实验。

One app, two modes: Settle catches acute anxiety with melody-free adaptive neutral sound; Unwind eases you out of the day with calm arrangements of real songs. The watch or ring supplies heart rate, the app adapts the sound silently, and only afterwards tells you how much calmer you were than your usual. Every listen is also a measured experiment.

依据 Sources: research/ML_RESEARCH_DESIGN.md(信号、E0–E4、架构)· research/METHODOLOGY_DESIGN.md §4(试点识别)· research/DECISION_MODEL.md(A1a…A6 · 门槛 · 内容转向)· surveys/questionnaire-v2.md(B3 / C3 / D / E2 Kano)· research/FOCUS_GROUP_KIT.md(刺激规格 · "实时数字 vs 事后结果")· interviews/user-interviews.md("软墙")· 现有 5 屏点击原型 site/demo/。
交付 Delivery: 网页 http://38.180.150.12/pages/product-design.html · 应用 App https://38.180.150.12.sslip.io/app/ · Artifact 链接见 TODO。

0. 一页总览The whole product on one page

产品形态 Form双模式自适应音频引擎,先以独立 iOS App 交付Dual-mode adaptive-audio engine, delivered first as a standalone iOS app (C1); the same engine is the C2 SDK later.
Settle · 安定急性 / 睡前 / 上台前:中性自适应声音Acute, sleep-onset, pre-performance: neutral adaptive sound — no melody, lyrics, beat or sharp onsets. Numbers hidden during, shown after. From A1a ≈ 7%.
Unwind · 舒缓下班后 / 情绪修复:真歌舒缓版Wind-down and mood repair: calm arrangements of real songs (catalogue + artists). From A1b ≈ 80%. Demo plays via Spotify / SoundCloud embeds.
控制信号 Control心率驱动;HRV 只做前后对比Live loop is HR-driven (accurate, 1–5 s). HRV is measured before/after, never steered (noisy, lagging on wrist).
结果口径 Result"比你平时这个时间更平静 9 bpm"Residual vs the user's own 14-day baseline model, with a signal-quality badge; no score when quality is low or the user tagged panic.
交互预算 Budget≤ 3 次点击、≤ 10 秒出声、一屏一个动作Three taps and ten seconds to sound; one primary action per screen; ≥ 44 pt targets; warm low-luminance palette at night.
SENSE · 感知 Watch / Ring / Phone HR 1–5 s · RR · motion moment tag · time · taps self-report 0–10 ESTIMATE · 估计 On-device signal + state motion mask · Kalman baseline → residual r_t quality · HR z · trend ADAPT · 适配 Policy → audio v0 rule table (E1) → bandit presets (E3) tempo · timbre · density MEASURE · 测量 Session outcome Δr HR: last 5 min − pre Δ log-RMSSD · quality ok Δ calm 0–10 · fit 👍👎 LEARN · 学习 Two outputs user: result · insight firm: posterior per variant × moment · A2/A3 next session starts from the updated per-user posterior (exploration ≤ 15%) · 下一次会话从更新后的个人后验开始 Sense → Estimate → Adapt → Measure → Learn — the company engine (demand signal → AI production → measured library) inside one session
图 0 · 核心闭环。每一次会话都走完这五步:这是 ML_RESEARCH_DESIGN.md §5 架构的用户侧读法。Fig. 0 · The core loop every session runs. It is the user-side reading of the learning architecture in ML_RESEARCH_DESIGN.md §5.
周一交付什么 · What Monday's package contains: ① 本蓝图(原则 · 架构 · 路径 · 界面 · 接口 · 曲库 · 方法映射);② 可点击的 8 屏界面(§4);③ 数据接口矩阵(§5)与曲库标签规范(§6);④ 嵌入式播放与参数自适应的可行性演示(§6.3 实验台,网页版可直接播);⑤ 四周构建计划与需要你拍板的 4 个决定(§9);⑥ 可安装的 PWA 应用(生产 URL)与"添加到主屏幕"指南。① this blueprint (principles, architecture, journey, screens, interfaces, library, method mapping); ② eight annotated screens (§4); ③ the data-interface matrix (§5) and library tag schema (§6); ④ a working feasibility demo of embedded playback plus parametric adaptation (§6.3, playable on the web version); ⑤ a four-week build plan and the four decisions that need your call (§9); ⑥ a live installable PWA app (production URL) with an "Add to Home Screen" guide.

1. 设计原则:人因工程与参考产品Design principles — human factors, and what we borrow from good apps

焦虑发作时注意力会收窄(Easterbrook 1959 的"线索利用"),工作记忆被占满(Sweller 认知负荷)。所以这个 App 的第一原则不是"功能多",而是在用户最不能思考的时刻,把决定降到零。下面每条原则都写明它约束了哪个界面。

Under acute anxiety attention narrows (Easterbrook's cue-utilisation) and working memory is full (Sweller's cognitive load). So the first principle is not feature count but zero decisions at the moment the user can least think. Each principle below names the screen it constrains.

原则 Principle依据 Basis落到界面 Where it lands
一屏一个动作One primary action per screenHick 定律:选项数 ↑ → 决策时间 ↑;Nielsen "极简美学"Hick's law; Nielsen heuristic 8首页只有 Settle / Unwind 两个大按钮(睡眠是 Settle 的定时器变体,不是第三个选项);会话页只有"结束"。Home has two hero buttons; Sleep is a timer variant of Settle, not a third choice; the session screen has only End.
大目标、拇指区Big targets in the thumb zoneFitts 定律;Apple HIG ≥ 44 pt;WCAG 2.2 目标尺寸Fitts's law; Apple HIG 44 pt; WCAG 2.2 target size主按钮 ≥ 64 pt 高、居屏幕下 1/3;"结束"永远在同一位置(识别优于回忆)。Hero buttons ≥ 64 pt tall in the lower third; End always in the same place (recognition over recall).
≤ 3 次点击、≤ 10 秒出声Three taps, ten seconds to soundTAM 易用性(问卷 E1);Endel 一键场景的先例TAM ease-of-use (survey E1); Endel's one-tap scenes首页 → 模式 → 开始;"上次的设置"一键重放;预休息 60 s 与出声并行(声音先起,测量后到)。Home → mode → start; "same as last time" replay; the 60-s pre-rest overlaps with sound starting.
安静的技术:会话中不显示数字Calm technology — no numbers during SettleWeiser & Brown 1996;焦点小组"实时数字 vs 事后结果";访谈 biometric.live_number_anxietyWeiser & Brown; FG probe "live number vs post-hoc"; interview codeSettle 会话页只有呼吸光场和一个"结束";心率在 Unwind 里可选显示,默认关;结果在会话后才出现。Settle shows only a breathing field and End; HR is optional in Unwind, off by default; results appear after.
结果相对于"你自己的平时"Results relative to your own usualMETHODOLOGY §4.4 残差化;Oura "Readiness" 相对基线的先例Residualisation; Oura's baseline-relative Readiness"比你平时 22:00 更平静 9 bpm",不给绝对分数、不与他人比较;前 14 天显示"正在学习你的基线 3/14"。"9 bpm calmer than your usual 22:00", never an absolute score or a comparison to others; first 14 days show "learning your baseline 3/14".
诚实的测量Honest measurementML §3.2 质量指数 < 70% 剔除;§6 安全规则Quality index rule; safety rule信号质量徽章(好 / 一般 / 无法测量);质量差就说"这次没测准"而不给分数;HR > 130 或用户标记 panic → 只显示接地文字,不显示数字。Signal-quality badge; low quality says "couldn't measure reliably" instead of a number; HR > 130 or a panic tag shows grounding text only.
渐进式同意、最小采集Progressive consent, data minimisationML §6 治理;GDPR 同意;HealthKit 条款Governance; GDPR consent; HealthKit terms先只要心率;HRV / 睡眠 / 动作各自一个开关,用到时再问;"哪些数据离开手机"一句话说清;一键导出 / 删除。Ask for HR first; separate toggles for HRV, sleep, motion, requested when needed; one sentence on what leaves the phone; export / delete.
温暖、低亮度、无蓝光Warm, low-luminance, no blue睡前使用场景(问卷 B3 "in bed");WCAG 对比度 ≥ 4.5:1 仍须满足In-bed use (survey B3); WCAG contrast ≥ 4.5:1 still holdsApp 内永远是单一暖色深夜世界(亚麻白字 / 琥珀色动作 / 炭褐底);青 / 珊瑚只用于会话后的数据语义;尊重系统"减少动态效果"。In-app is one warm dark world (linen text, amber action, charcoal-brown ground); teal / coral only as post-session data semantics; honours reduced motion.
自主、胜任、不设内疚Autonomy, competence, no guilt自我决定理论(Deci & Ryan);避免暗黑模式Self-determination theory; no dark patterns不做"连续打卡断了"的惩罚;只说"你回来了";分享卡默认不带数字;14 天试用到期前 3 天提醒,一键取消(对照 Calm 的计费投诉)。No broken-streak guilt; share card carries no numbers by default; trial reminder 3 days before, one-tap cancel (Calm's billing complaints are the anti-pattern).
手腕上的触觉呼吸Haptic breathing on the wristApple Mindfulness 的先例;免视觉通道Apple Mindfulness precedent; eyes-free channel手表伴侣:一个呼吸光环 + 触觉节律(6 次/分钟)+ 结束;手机可以扣在桌上。Watch companion: breathing halo + haptic rhythm (6/min) + End; the phone can lie face-down.

参考产品:借什么、避什么Reference apps — what to borrow, what to avoid

产品借鉴 Borrow避免 Avoid
Endel一键场景;心率 + 时间 + 动作的实时适配;Apple Watch 年度 App 的手表原生体验One-tap scenes; live adaptation to HR + time + motion; watch-native"昂贵的环境噪音"口碑与冷感界面;无结果反馈(用户不知道有没有用)"Expensive ambient noise" reputation, cold UI, no outcome feedback
Calm温暖插画式氛围;每日一个入口Warm atmosphere; one daily entry point内容目录过载;计费投诉(Trustpilot 1.4–1.8)Content overload; billing complaints
Oura相对基线的"Readiness"口径;第二天早晨的回顾;戒指数据的克制呈现Baseline-relative Readiness; next-morning review; restrained data数字过多引发"看分数焦虑"(焦点小组 biometric.live_number_anxiety)Score anxiety from too many numbers
Apple Mindfulness / Breathe手腕触觉呼吸;HKWorkoutSession 的心率流;无文字的呼吸动画Haptic breathing; HR stream via workout session; wordless animation
Brain.fm模式 + 定时器两步即开始Mode + timer, then start"科学"话术过重(独立证据薄)Over-claiming science
潮汐 Tide中文市场里温暖、场景化的视觉;睡眠定时淡出Warm scene-based visuals; sleep timer fade功能堆叠(冥想 + 专注 + 睡眠 + 日记)Feature stacking
Spotify / SoundCloud embeds演示阶段用官方嵌入播放真歌,零版权成本、零商用Official embeds for real songs in the demo: no licensing, non-commercial嵌入不能改音频,所以真歌层的"自适应"只能是选曲与切换(§6.2)Embeds cannot alter audio, so adaptation on the real-song layer is selection and sequencing only (§6.2)

2. 系统架构图System architecture — sensors to sound to evidence

这张图把 ML_RESEARCH_DESIGN.md §5 的学习架构展开成产品部件。左边是数据从哪来,中间是手机上做什么,右边是声音怎么出、证据往哪去。粗线是每次会话必经的路径,虚线是离线 / 次日路径。

This expands the learning architecture in ML_RESEARCH_DESIGN.md §5 into product components: where data comes from (left), what the phone computes (middle), how sound is produced and where evidence goes (right). Solid lines run every session; dashed lines are offline or next-day.

SOURCES · 数据来源 ON-DEVICE · 手机端(节拍级数据不出手机) AUDIO · 声音 OUTPUTS · 输出 Apple Watch · HealthKit HR 1–5 s (workout) · SDNN beat series → RMSSD · 14-day history Oura · API v2 (OAuth) nightly HRV/HR · sleep · readiness Polar H10 · BLE 0x180D RR · E0 calibration · web demo Phone · CoreMotion · app motion · tag · taps · calm 0–10 Signal layer · 信号层 RR: drop <300 / >2000 ms · ±20% local-median rule spline-fill flagged beats · detrend λ = 500 PPG HR: motion mask SD > 0.05 g · >12 bpm jump hold Kalman smoothing (lag < 5 s) · 60-s window features quality = clean-window share · < 70% → no result safety: HR > 130 at rest or panic tag → grounding Baseline model + state · 基线与状态 HR_it = α_i + f_i(hour) + g_i(weekday) + δ_i·act_t + ρ_i·HR_t−1 · ridge-shrunk toward population residual r_t = observed − predicted · robust z state = (moment, HR z, trend, time, quality) new user borrows the population curve · d/14 shown Policy · 策略(v0 → v1) v0 rule table: start pulse by HR band, step / 60 s v1: Thompson-sampling bandit over presets prior = population posterior · explore ≤ 15% suspend arm if worse than default by > 0.3 SD action = content · pulse · brightness · density Audio engine Tier P · owned audio: filter · gain · layers pulse (parametric) Tier S · embeds: select + 8-s crossfade Library · 曲库 Settle beds · owned · QA Unwind songs · Spotify / SoundCloud / owned · §6 Session log variant · params HR windows · Δr · Δ calm fit 👍👎 · quality · mode after each session User · 用户看到 result vs own usual weekly insight next-morning (Oura) Firm · 研究看到 E1 pilot outcomes hierarchical posterior per variant × moment Offline · 离线 off-policy eval · IPS/DR variant promote / retire human listening QA gate → decision model A2/A3 new population prior → policy (weekly) · 新的总体先验每周回写策略 solid = every session · 每次会话 dashed = offline / next day · 离线或次日 Coloured edges: coral = sensing · teal = measurement/evidence · amber = adaptation/action Data minimisation: beat-level data never leaves the phone; only 60-s window features and session summaries sync.
图 2 · 系统架构。手机端三层(信号 → 基线/状态 → 策略)对应 ML 文档 §3 与 §5;音频引擎分两档:自有音源可做参数级适配,嵌入播放器只能做选曲级适配。Fig. 2 · System architecture. The three on-device layers map to ML doc §3 and §5; the audio engine has two tiers: owned audio allows parametric adaptation, embedded players allow selection-level adaptation only.

3. 用户路径:从安装到听歌到反馈The user journey — from install through listening to feedback

横向滚动看 13 个阶段。每个阶段写明:用户做什么、采集什么数据、喂给哪个学术构念 / 信念 / 实验。高亮的是核心循环(7–11),用户每天走的就是这几步。

Scroll sideways through 13 stages. Each names what the user does, what data is captured, and which construct, belief or experiment it feeds. Highlighted stages (7–11) are the daily core loop.

01 · DISCOVER发现与安装Landing → TestFlight"Not meditation. Not white noise." A/B 落地页 → 等待名单 → TestFlight 邀请。
datavariantconversionfeedsA3 · A4LR 2.5 if ≥ 5%
02 · WELCOME欢迎与边界Wellness, not medicine一句话说清能做什么、不能做什么;紧急情况的求助线。
datafeedsgovernance §6
03 · CONSENT分项同意Per-data-type consent先只要心率;HRV / 睡眠 / 动作各一个开关;"哪些数据离开手机"。
dataconsent statefeedsD5 privacyGDPR basis
04 · CONNECT连接设备Watch · Oura · noneApple Watch(实时)/ Oura(次日)/ 不连(非自适应,明确标出)。
datadeviceHealthKit authfeedsA3 connect rateD1
05 · PROFILE60 秒画像(可跳过)Moments · taste · GAD-2你想在哪些时刻用它(B3);Unwind 的 5 位艺人;研究参与者答 GAD-2 / PSS-4。
datamomentstasteGAD-2feedssegmentationbandit context
06 · BASELINE静默学习基线14 days background后台读取 14 天心率 / HRV,拟合个人基线模型;从第 1 天起用总体曲线先顶上。
dataHR/HRV historyfeedsresidual model §3.3
07 · HOME现在需要什么Settle / Unwind两个大按钮;"和上次一样"一键;睡眠 = Settle + 定时淡出。
datamoment tagtimefeedsC3 state splitE2/E3 context
08 · PRE-REST60 秒落座Baseline window声音已经起了;一个环在收;顺手滑一下"现在多平静 0–10"。试点周:5 分钟 + STAI-6 + 期待值。
datapre HR 60 scalm 0–10STAI-6*feedsANCOVA baselineexpectancy covariate
09 · SESSION聆听 5–20 分钟Adaptive, silentSettle:呼吸光场,无数字;Unwind:正在播放卡 + 可选心率。每 60 s 按规则表 / 策略调声音。
dataHR 1–5 smotionparams trajectoryvariantfeedsE1 T1/T2E2 arm
10 · CHECK-IN结束后 20 秒Post self-report"现在多平静 0–10";"这段声音合适吗 👍👎";可选一个词。试点周:STAI-6。
datapost calmfitwordfeedsA2a constructbandit reward λ·Δself
11 · RESULT比你平时更平静…Residual result"比你平时 22:00 更平静 9 bpm";心率沉降曲线;RMSSD 前后(质量够时);质量徽章;分享卡不带数字。
dataΔr HRΔ log-RMSSDqualityfeedsA2bKano K2 (A/O)A3 value
12 · NEXT MORNING第二天早上Oura sleep readout"昨晚 Settle 之后,你的睡眠 HRV 比 14 天基线高 6 ms"。这是回访触发器,不是推送轰炸。
dataOura nightlyfeedsA6 retentionsleep-onset outcome
13 · INSIGHT每周一张洞察What works for you"你的 Settle 在 22–23 点最有效;床 B 对你比床 A 好"。这是个人后验的用户侧读法。
dataper-user posteriorfeedsE3 personalisationA6

← 横向滚动 · scroll sideways → · * 仅研究参与者 / pilot weeks only

每一步的成本预算The effort budget per step

步骤用户投入 User effort系统在做 System does失败时 If it fails
首次安装到首次出声Install → first sound≤ 90 秒(欢迎 → 同意 → 连接 → 首页 → 开始);画像可跳过≤ 90 s; profile skippable请求 HealthKit 心率权限;启动手表伴侣;用总体先验选首个变体HealthKit HR auth; launch watch companion; population prior picks first variant无手表 → 播放固定曲线并标注"未自适应",不假装No watch → fixed curve, labelled non-adaptive
日常一次会话A daily session3 次点击 + 2 次滑动(前 / 后 0–10)+ 1 次 👍👎3 taps + 2 slides + 1 thumb60 s 预休息基线 → 每 60 s 调参 → 最后 5 min 残差 → 结果Pre-rest baseline → adapt every 60 s → last-5-min residual → result信号质量 < 70% → "这次没测准",仍保存自评Quality < 70% → "couldn't measure", self-report kept
试点会话(E1)Pilot session研究助理引导;5 min 预休息 + STAI-6 + 2 题期待值;15 min;3 min 后休息 + STAI-6RA-led; 5-min rest + STAI-6 + expectancy; 15 min; 3-min post + STAI-6App 处于"研究模式":条件由拉丁方表指定(T1 / T2 / C),参数由规则表驱动或由 RA 手动"扮演算法"Research mode: condition from the Latin square; params from rule table or RA (WoZ)Polar 未连 → 记录为仅手表数据,标记校准缺失No Polar → watch-only, calibration flagged

4. 界面设计:八屏 + 手表 + 安全屏Screens — eight phone screens, the watch companion and the safety screen

先看 72 秒录屏(真实线上版本,心率为模拟曲线):Settle → 预休息 → 会话(无数字)→ 接地屏 → 回访 → 结果 → Unwind(Spotify 嵌入)→ 历史。可安装的 App 在 https://38.180.150.12.sslip.io/app/。下面八屏是设计稿,其中 S1–S3(欢迎 / 同意 / 连接)在 v0.1 里尚未实现,App 直接从首页 S4 开始。

Watch the 61-second recording first (the live build; heart rate simulated): Settle → pre-rest → session (no numbers) → grounding → check-in → result → Unwind (Spotify embed) → history. The installable app is at the link above. The eight screens below are the design; S1–S3 (welcome / consent / connect) are not yet in v0.1, which starts at the Home screen S4.

视觉方向:一个温暖的深夜世界。炭褐底、亚麻白字、琥珀色只给"可以按的东西",青色只在会话后表示"更平静"。没有插画堆叠,没有紫色渐变,没有表情符号;字体用系统字(SF Pro / 苹方)配等宽数字。每一屏下面写明"为什么这样"和"采集了什么"。

Visual direction: one warm night world. Charcoal-brown ground, linen text, amber only for what can be tapped, teal only after the session to mean "calmer". No illustration piles, no purple gradients, no emoji; system type (SF Pro / PingFang) with monospaced numerals. Each screen states why it is built this way and what it captures.

21:42●●● ⌒ ▮
LILT
声音,跟着你的心率一起慢下来。

Sound that settles with you. 这不是冥想,也不是白噪音;这是一个会听你身体的播放器。

健康与放松用途,不用于诊断或治疗。若你正处于危机中,请联系当地求助热线。

开始
我已经有账号
S1 · 欢迎与边界 Welcome只有一句主张、一句边界、一个按钮。健康声明在第一屏就说,而不是藏在条款里。One claim, one boundary, one button. The wellness disclaimer sits on screen one, not in the terms.
no datagovernance
21:42●●● ⌒ ▮
1 / 3 · 你的数据
Lilt 需要读什么

只在会话期间读取。节拍级数据只在手机上处理,离开手机的只有每分钟的汇总。

HR心率(会话中)用来调整声音 · 必需
HRV心率变异性前后对比 · 可选
Zz睡眠(Oura)第二天早上的回顾 · 可选
动作只用来剔除噪声 · 可选
继续
S2 · 分项同意 Consent每种数据一个开关、一句用途;心率是唯一必需项。"哪些数据离开手机"用一句话讲清。One toggle and one purpose line per data type; HR is the only required item. What leaves the phone is one sentence.
consent stateD5 privacy barrierGDPR consent
21:43●●● ⌒ ▮
2 / 3 · 设备
心率从哪里来

Apple Watch 可以实时适配;Oura 提供第二天早晨的睡眠回顾。

Apple Watch实时心率 · 手腕呼吸提示已连接
Oura Ring夜间 HRV · 需要 Oura 会员连接
暂不连接可以听,但声音不会随你变化选择

Android(Health Connect)与 Garmin / WHOOP 在后续版本。

继续
S3 · 连接设备 Connect三条路都能往下走;"不连接"明确说"不会随你变化",绝不假装自适应。All three paths continue; "no device" says plainly that sound won't adapt. Never fake adaptation.
device typeHealthKit authA3 connect ratesurvey D1
22:05●●● ⌒ ▮
LILT基线 3 / 14 天
现在,我需要
安定下来
Settle · 安定无旋律的声音 · 心跳快、脑子停不下来时
Unwind · 舒缓真歌的舒缓版 · 从一天里退出来
睡前模式 · 定时淡出和上次一样 ↻
昨晚 · Settle 12 分钟比你平时 22:00 更平静 7 bpm
S4 · 首页 Home两个大按钮就是全部导航。模式选择本身就是"时刻标签"(急性 vs 放松),一次点击同时完成分群与上下文采集。Two hero buttons are the whole navigation. Choosing a mode is itself the moment tag, so one tap does segmentation and context capture at once.
moment tagtime of daytimerC3 state splitbandit context
22:05●●● ⌒ ▮
Settle声音已开始
0:38坐下来

肩膀放下来。我们先听 60 秒你的心率,声音会从这里开始跟着你。

此刻有多平静?
012345678910
紧绷非常平静
S5 · 预休息 Pre-rest声音先起,测量后到:60 秒里同时完成基线窗口和会话前自评。试点周把这一屏换成 5 分钟 + STAI-6 + 期待值两题。Sound starts first, measurement follows: the 60 s doubles as baseline window and pre self-report. Pilot weeks swap this for 5 min + STAI-6 + two expectancy items.
pre-rest HRcalm 0–10 preSTAI-6*ANCOVA baselineexpectancy covariate
22:11●●● ⌒ ▮
正在跟着你8:52
结束
S6 · 会话 · Settle没有数字、没有歌名、没有可点的东西,只有一个 8 秒周期的呼吸光场(吸 4 / 呼 4)和"结束"。声音每 60 秒按规则表 / 策略静默调参。No numbers, no titles, nothing else to tap: an 8-s breathing field (4 in / 4 out) and End. Parameters step silently every 60 s from the rule table or policy.
HR 1–5 smotion maskparams trajectoryvariant idE1 T1E2 arm
19:20●●● ⌒ ▮
Unwind14:10
WeightlessMarconi Union · calm arrangement
▶ Spotify embed · open.spotify.com/embed/track/6kkw…
(网页版在此处直接播放 · plays inline on the web version)
下一首会更慢一点
显示心率 · 关结束
S7 · 会话 · Unwind真歌用 Spotify / SoundCloud 官方嵌入播放(演示阶段零版权成本)。自适应体现在选曲与衔接:"下一首会更慢一点"是策略在说话。心率显示可选,默认关。Real songs play through official Spotify / SoundCloud embeds (no licensing cost for the demo). Adaptation shows as selection and sequencing: "the next one will be a little slower" is the policy speaking. HR display optional, off by default.
HR 1–5 strack id · orderskips · ♡E1 T2A1bKano K1
22:21●●● ⌒ ▮
信号良好 · 94%Settle · 15 min
和你平时 22:00 相比
−9bpm 更平静
+6 msRMSSD 前 → 后
3 → 7平静 0–10
这段声音合适吗?
👍 合适👎 不太对
保存分享(不含数字)
S8 · 结果 Result三句话:相对你自己的基线、沉降曲线、自评前后。质量徽章先于数字;质量差时整屏换成"这次没测准,但你说从 3 到 7"。这就是 Kano 里的"魅力属性" K2。Three statements: relative to your own baseline, the settle curve, self-report before/after. The quality badge precedes the number; on low quality the screen becomes "couldn't measure reliably, but you went 3 → 7". This is Kano's attractive feature K2.
Δr HRΔ log-RMSSDpost calmfit 👍👎A2a · A2breward
SETTLE · 8:52tap to end

W · 手表伴侣 Watch companion呼吸光环 + 触觉节律(每分钟 6 次)+ 点按结束。手表在这里不只是传感器:HKWorkoutSession 必须从手表端启动才能拿到 1–5 秒的心率流。Breathing halo + haptic rhythm (6/min) + tap to end. The watch is not only a sensor: the workout session must start on the watch to get the 1–5 s HR stream.

02:14●●● ⌒ ▮
你在这里。

把脚踩在地上。说出你看到的三样东西。声音会一直在。

需要有人说话时:当地求助热线 →

继续听

X · 安全屏 Safety screen静息心率 > 130 或用户标记 panic 时:不显示任何数字,只显示接地文字与求助线;声音不停。这是 ML §6 的安全规则变成的界面。Resting HR > 130 or a panic tag: no numbers, grounding text and a help line only; sound keeps playing. ML §6's safety rule as a screen.

次级界面(不在核心循环里)Secondary screens outside the core loop

5. 数据采集接口Data-capture interfaces — function × signal × source × API

每个功能需要什么信号、从哪个接口来、多久一次、要什么权限、没有时怎么办。iOS 是首发平台(因为只有 Apple Watch 能给实时心率流);Oura 只能给第二天;Polar H10 既是校准金标准,也是网页演示里唯一能实时读心率的途径(Web Bluetooth)。

For each function: the signal, its interface, rate, permission and fallback. iOS ships first because only Apple Watch gives a live HR stream; Oura is next-day only; Polar H10 is both the calibration reference and the one way a web demo can read live HR (Web Bluetooth).

功能 Function信号 Signal来源 · 接口 Source · API频率 / 延迟 Rate权限 Permission学术用途 Research use缺失时 Fallback
实时适配Live adaptationHR bpmApple Watch → HealthKit:watchOS 伴侣启动 HKWorkoutSession.mindAndBody)+ HKLiveWorkoutBuilder / HKAnchoredObjectQuery,经 WCSession 推到 iPhone1–5 sHealthKit 读取 heartRate;手表端 App控制信号;共同主要生理结局(残差 HR)Control signal; co-primary physiological outcome无手表:固定曲线,标注"未自适应"
会话内 RMSSDIn-session RMSSDRR 间期HKHeartbeatSeriesSample(手表在会话期间记录,结束后可读)会话后HealthKit 读取 heartbeat series次要结局;E2 奖励的可选项Secondary outcome只用 HR
前后 HRVBefore / after HRVSDNNHKQuantityType.heartRateVariabilitySDNN(机会性采样)滞后 ≤ 30 minHealthKit 读取 HRVA2b;基线模型输入A2b; baseline model input结果页省略 HRV 行
个人基线Personal baseline14 天背景 HR / HRVHealthKit 历史查询(HKSampleQuery + 后台交付)每日同步同上§3.3 残差化模型;"比你平时"口径Residualisation model用总体曲线(分层收缩);显示 d/14
次日回顾 · 睡眠结局Next-morning · sleep outcome夜间 HRV(5 min RMSSD)· HR · 睡眠分期 · readinessOura API v2(OAuth2):/v2/usercollection/sleep · /heartrate · /daily_readiness次日早晨Oura 账号授权;需活跃会员(2024 起)睡前段结局;A6 回访触发;次日个性化Sleep-onset outcome; retention trigger无戒指:跳过晨间卡
校准 E0 · 网页演示Calibration · web demoRR 间期(ECG 级)Polar H10:BLE 心率服务 0x180D,特征 0x2A37 含 RR 字段(1/1024 s);网页用 navigator.bluetooth.requestDevice({filters:[{services:['heart_rate']}]})每拍蓝牙ICC · MAPE · λ 去衰减;网页演示的实时心率ICC, MAPE, λ; live HR for the web demo演示用模拟心率曲线(明确标注)
伪影剔除Artefact masking加速度手表:workout session 内的运动数据;手机:CoreMotion50 Hz动作与健身§3.2 运动掩膜;差异性误差检查Motion mask; differential-error check用 HR 跳变规则兜底
上下文Context时刻标签 · 时间 · 定时 · 耳机App 内;AVAudioSession 输出路由事件B3 分群;bandit 上下文Segmentation; bandit context
自评Self-report平静 0–10 前后 · 👍👎 · 一个词;试点:STAI-6 · 期待值App 内每次会话A2a 构念;bandit 奖励的 λ·Δself;训练标签Construct; reward term; label可跳过,仍记录 HR
会话日志Session log变体 · 参数轨迹 · 60 s 窗口特征 · 质量 · 结局App → 后端(Supabase / 自建 Postgres,EU 区)会话后同意状态随行E1 分析;E2–E4 的分层模型E1 analysis; hierarchical models离线缓存,联网后同步
后续平台Later platformsHR · HRVAndroid Health Connect(HeartRateRecord, HeartRateVariabilityRmssdRecord);Garmin / WHOOP / Fitbit 云 API(非实时)分钟级 / 次日各平台授权扩样本;C2 SDK 对接Scale; C2 SDK
三个硬约束 · Three hard constraints: ① HealthKit 的 HRV 是机会性采样、可滞后 30 分钟,所以实时回路只能用心率;② Oura 没有实时端点,只能做"第二天";③ 嵌入播放器(Spotify / SoundCloud)不能改音频,所以参数级适配只对自有音源成立。这三条决定了 §6 的曲库分档。① HealthKit HRV is opportunistic and can lag 30 min, so the live loop uses HR only; ② Oura has no live endpoint — next-day only; ③ embedded players cannot alter audio, so parametric adaptation exists only for owned audio. These three decide the library tiers in §6.

6. 曲库与标签Library and tags — two catalogues, one schema, two playback tiers

6.1 两个曲库Two catalogues

Settle · 中性床 Neutral bedsUnwind · 真歌舒缓版 Real-song calm arrangements
内容规格Content spec无音高中心、无节奏、无歌词;频谱重心 1.2 kHz → 600 Hz 随会话下移;60 Hz 以下无内容(避免"嗡");瞬态 ≤ 床 +6 dB;−16 LUFS(= FOCUS_GROUP_KIT S-B 规格)No pitch centre, rhythm or lyrics; centroid drifts 1.2 kHz → 600 Hz; nothing below 60 Hz; transients ≤ +6 dB; −16 LUFS器乐钢琴 / 吉他改编,60–66 bpm,无打击乐,柔和低通,无突变动态(= S-A 规格);演示阶段用 Spotify / SoundCloud 上已有的慢速真歌代替Instrumental piano / guitar, 60–66 bpm, no percussion, gentle low-pass, no sudden dynamics; the demo substitutes existing slow real songs on Spotify / SoundCloud
数量(演示)Count (demo)4–6 张床,各 3 层 stem(bed / air / warmth)4–6 beds, 3 stems each20–30 首,≥ 10 首为 TDMusic 自有(可做参数适配)20–30 tracks, ≥ 10 TDMusic-owned
来源SourceTDMusic AI 引擎生成,人工试听 QA 后才进急性模式Generated by the TDMusic engine; human listening QA before acute modeSpotify / SoundCloud 官方嵌入(embed-only);自有曲目直接托管(owned)Official embeds; owned tracks hosted directly
适配档位Adaptation tierP · 参数级:低通截止、增益、层密度、脉冲等效速度,每 60 s 一步P · parametric: cutoff, gain, layer density, pulse-equivalent tempo, stepped every 60 sS · 选曲级:按起始心率带选曲,按残差趋势决定下一首更慢 / 保持,交叉淡入 8 s;自有曲目可升级到 PS · selection: pick by start-HR band, next track slower / hold by residual trend, 8-s crossfade; owned tracks can go to P
对应试点条件Pilot conditionT1T2(C = 用户自己的放松歌单,原样播放)T2 (C = the user's own playlist, untouched)

6.2 标签规范(每首曲目 / 每张床一条)Tag schema — one record per track or bed

标签同时服务三件事:规则表选曲(slot)、bandit 的"参数格"(acoustic)、E4 的晋升 / 退役(posterior)。Spotify 的 audio-features 接口 2024 年 11 月起对新应用关闭,所以声学标签由我们自己标:自有音源用 librosa / Essentia 算,嵌入曲目人工标 + 试听核对。

Tags serve three jobs at once: rule-table selection (slot), the bandit's parameter cell (acoustic), and E4 promotion / retirement (posterior). Spotify's audio-features endpoint closed to new apps in November 2024, so we tag ourselves: librosa / Essentia on owned audio, manual tagging plus listening checks for embeds.

{ "id": "unwind-0007", "mode": "unwind",
  "title": "Weightless", "artist": "Marconi Union",
  "source": { "spotify": "6kkwzB6hXLIONkEk9JciA6", "soundcloud": "665599673" },
  "rights": "embed-only",            // owned | embed-only | licensed
  "adapt_tier": "S",                 // P parametric | S selection
  "fit": ["wind-down", "sleep-onset"],
  "acoustic": { "bpm": 60, "pulse_eq": 60, "brightness": "dark", "density": "sparse",
                "transients": "none", "lyrics": "none", "melody_salience": 1,
                "sub60hz": false, "lufs": -18, "key": "Dm" },
  "slot": { "start_hr": "<75", "role": "lead-down" },   // ≥90 | 75–90 | <75
  "qa": { "human": "2026-09-01", "notes": "long fades, no sharp onsets" },
  "posterior": { "n": 0, "mean": null, "sd": null, "prior": "pop:unwind:dark-sparse" } }

{ "id": "settle-B2", "mode": "settle", "name": "Linen",
  "source": { "owned": "/audio/settle/linen/", "stems": ["bed", "air", "warmth"] },
  "rights": "owned", "adapt_tier": "P",
  "fit": ["acute", "sleep-onset", "pre-performance"],
  "acoustic": { "pitch_centre": "none", "rhythm": "none", "centroid_hz": [1200, 600],
                "sub60hz": false, "transient_max_db": 6, "lufs": -16 },
  "params": { "cutoff_hz": [600, 2400], "density": [0, 1], "pulse_eq": [50, 66], "gain_db": [-6, 0] },
  "controller": "E1-rule-table-v0",
  "qa": { "human": "pending", "gate": "acute mode requires human QA" } }

20 首 Unwind 候选曲目见下表:从 12 个 Spotify 官方舒缓歌单出发,官方歌单里多为匿名"幽灵艺人",因此又经 Wikidata 解析 17 位知名艺人的 Spotify ID,取各自"热门"榜(Spotify 按播放量排序)前 4 名随机抽一首、每位艺人一首。所有 ID 已用 Spotify oEmbed 校验;尚未人工试听,声学标签(bpm、亮度、密度)待试听后填写,急性模式不使用这些曲目。

The 20 Unwind candidates below start from 12 Spotify editorial calm playlists; because those are dominated by pseudonymous "ghost" artists, 17 well-known artists were resolved to Spotify IDs via Wikidata and one track per artist was drawn at random from the top four of each artist's Popular list (Spotify's own play-count order). Every ID is verified with Spotify's oEmbed endpoint; none has been listened to yet — acoustic tags (bpm, brightness, density) are filled after listening, and none of these enters the acute mode.

#艺人 Artist曲目 Title类型 Band来源 Provenance
01YirumaKiss The Rainpianoartist Popular
02Ólafur ArnaldsHappiness Does Not Waitpianoartist Popular
03EluviumRequiem On Frankfort Aveambientartist Popular
04KiasmosBlurredelectronicartist Popular
05DalbyRoarpianoeditorial + artist
06Hania RaniDreamypianoartist Popular
07Federico AlbaneseMigrantspianoartist Popular
08Claude DebussyRêverie, CD 76pianoeditorial + artist
09Nils FrahmAmbrepianoartist Popular
10Brian EnoAn Ending (Ascent)ambientartist Popular
11Ludovico EinaudiNuvole Bianchepianoartist Popular
12William BasinskiMelancholia IIambientartist Popular
13A Winged Victory for the SullenSteep Hills of Vicodin Tearsambientartist Popular
14Max RichterOn the Nature of Daylightpianoartist Popular
15Harold BuddA Stream With Bright Fishambientartist Popular
16Johann Sebastian BachOrchestral Suite No. 3 in D Major, BWV 1068: II. Air "on the G String"pianoeditorial + artist
17Carbon Based LifeformsInterloperambientartist Popular
18Ludwig van BeethovenFür Elise, Bagatelle in A Minor, WoO 59pianoeditorial + artist
19Dirk MaassenMusepianoartist Popular
20Joep BevingSleeping Lotuspianoartist Popular

6.3 嵌入播放 + 参数适配:可行性实验台Embedded playback + parametric adaptation — a feasibility bench

下面这个小实验台证明两件事在浏览器里就能做:① 官方嵌入播放器可以被页面控制(Spotify iFrame API / SoundCloud Widget API:播放、暂停、跳转、事件);② 自有音源走 Web Audio 时,低通截止与增益可以跟着心率每秒变化。心率在这里是模拟的(从 92 沉到 68),网页版可换成 Polar H10 的 Web Bluetooth 实时读数。这个实验台也部署在生产应用的"实验"页面里,可以用实时心率测试。

This bench shows two things work in a browser: ① official embeds can be driven by the page (Spotify iFrame API / SoundCloud Widget API: play, pause, seek, events); ② owned audio through Web Audio lets low-pass cutoff and gain follow heart rate second by second. HR here is simulated (92 settling to 68); the web version can swap in a Polar H10 over Web Bluetooth. The bench is also live in the deployed app's Lab screen, where you can test it with live heart rate.

Tier P · owned audio · Web Audio
HR (sim)
cutoff Hz
gain dB

曲目:Vindu — Peace At Last(TDMusic 自有,30 s 片段)。规则:cutoff = 600 + (HR−60)/40 × 1800 Hz,限幅 600–2400;gain 随残差下降 0 → −4 dB;动作标记时保持上一值。Track: Vindu — Peace At Last (TDMusic-owned, 30-s clip). Rule: cutoff = 600 + (HR−60)/40 × 1800 Hz clamped 600–2400; gain eases 0 → −4 dB as the residual falls; hold last value on a motion flag.

HR → parameter trace
Tier S · embed · SoundCloud Widget API
SoundCloud widget · Weightless (track 665599673) · 网页版在此处加载并可由页面控制播放 / 暂停 / 音量。

6.4 权利与商用边界Rights and the non-commercial line

7. 学术方法 → 产品交互:逐项映射Method → interaction — the mapping, item by item

这是老师最想看到的一张表:论文里的每个方法元素,在产品里长成了哪个交互,产出什么数据,推动哪个信念。反过来读也成立:产品里没有一个交互是没有研究理由的。

The table the supervisor will want: each method element in the dissertation, the interaction it becomes, the data it yields and the belief it moves. It reads backwards too: no interaction in the product lacks a research reason.

方法元素 Method element产品交互 Interaction数据 Data推动 Feeds
唤醒状态分割 A1a / A1b(访谈"软墙"→ 问卷 C3 McNemar)Arousal-state split首页的两个模式 = 两个内容世界;用户选模式就是在给自己贴状态标签Two home modes = two content worlds; choosing is self-taggingmoment tag × 完成率 × 👍👎A1a / A1b 的行为证据;试点 T1 vs T2 对比Behavioural evidence; T1 vs T2
三条件被试内交叉设计(METHODOLOGY §4.1)3-condition within-subject crossover研究模式:条件由拉丁方表指定;C 条件播放用户自己的歌单,界面完全相同Research mode: Latin-square condition; C plays the user's own playlist in the same UIcondition · order · session#β1 β2 与 β1−β2;A2a A2b A1aModel coefficients
ANCOVA 形式的混合模型(基线作协变量)ANCOVA-form mixed model预休息屏:声音先起、60 s(试点 5 min)基线窗口Pre-rest screen as baseline windowpre HR · pre RMSSD · pre calmPre_ij 协变量;消除均值回归Baseline covariate
期待效应控制Expectancy control研究模式在预休息屏多两题"你觉得这段会有多大帮助";所有条件都叫"舒缓音频"Two expectancy items in research mode; all arms called "calming audio"expect 1–7β5 协变量Covariate
STAI-S(6) 主要结局STAI-6 primary outcome试点周前后各 6 题;日常只用单题 0–10(负担 20 秒)Six items pre/post in pilot weeks; single item dailySTAI-6 · calm 0–10A2a;bandit 奖励 λ·ΔselfA2a; reward term
预注册清洗规则(ML §3.1–3.2)Pre-registered cleaning结果页的信号质量徽章;质量 < 70% 不出数字Quality badge; no number under 70%quality index · flagged share结局纳入 / 剔除;差异性误差检查Inclusion; differential-error check
残差化(ML §3.3)Residualisation"比你平时 22:00 更平静 9 bpm";"正在学习你的基线 3/14""Calmer than your usual"; "learning your baseline"Δr HR · Δ log-RMSSD试点生理结局;E2 奖励;用户信任(D4)Outcome; reward; trust
E0 校准子研究Calibration sub-study研究模式里配对 Polar H10;同一会话双记录Pair Polar H10 in research mode; dual recordingwatch vs polar RRICC · MAPE · λ;A2b 测量 LRReliability; measurement LR
E1 规则表(v0 控制器)E1 rule table会话中每 60 s 静默调参;用户只看到"正在跟着你"Silent 60-s steps; user sees "following you"params trajectoryWoZ 可复现;v1 策略的默认臂Reproducible WoZ; default arm
E2 微实验Micro-experiments每次会话从允许集里随机分配变体;用户无感Random variant per session, invisiblevariant × moment × Δr分层模型;被测量的曲库Hierarchical model; measured library
E3 情境 banditContextual bandit洞察卡:"床 B 比床 A 更适合你";探索 ≤ 15% 从不告知具体哪次Insight card; exploration never announced per sessionper-user posterior个性化;A6 留存Personalisation; retention
E4 自生成曲库 + 人工 QA 门Self-generating library + QA gate曲库里的"新声音"徽章只在 QA 通过后出现;急性模式永远不放未 QA 的变体"New" badge only after QA; acute mode never gets un-QA'd variantsqa.human · posterior晋升 / 退役;"医院空调"风险Promotion / retirement
Kano K1 实时适配 · K2 前后结果(问卷 E2:A / O)Kano attractive / one-dimensionalK1 = 会话核心;K2 = 结果页第一句K1 is the session; K2 is the result's first lineA3 价值感;留存假设Perceived value
TAM 易用性 · DOI 可试用性TAM ease · DOI trialability≤ 3 次点击;14 天试用;分享卡可观察但不带数字Three taps; 14-day trial; share card observable without numberstime-to-sound · trial→paidA3 · A4;landing 转化 LRConversion LR
ODI 未满足结果(B9 ≥ 6)ODI under-served outcomes文案直接用未满足结果的原话("脑子停不下来"、"知道它有没有用")Copy lifted from under-served outcomesPOV / HMW 优先级POV priority
治理 · 安全(ML §6)Governance · safety分项同意;节拍级数据不出手机;安全屏;无医疗话术Per-type consent; on-device; safety screen; no medical claimsconsent stateD5;GDPR;HealthKit 条款Privacy; legal
内部人偏差控制(METHODOLOGY §7)Insider-bias control研究模式由 RA 开启与操作;创始人不主持会话;分析盲化条件标签RA runs research mode; founder does not moderate; analyst blindedoperator id方法章节的可信度Credibility

8. 反馈与学习闭环Feedback and the learning loop

用户侧 · 三层反馈

  1. 即时(会话后 20 秒):平静 0–10、👍👎、一个词。这是构念测量,也是训练标签。Immediate: calm 0–10, thumbs, one word. Construct measure and training label.
  2. 次日(Oura):"昨晚之后你的睡眠 HRV +6 ms"。唯一的推送,且只在有数据时发。Next day: the one push, only when data exists.
  3. 每周:一张洞察卡,说"什么对你有效",不说"你做得不够"。Weekly: one insight card — what works for you, never what you failed to do.

系统侧 · 奖励与更新

每次会话的奖励 = −标准化 Δr HR + λ·Δ自评(λ 由试点定,起点 0.5)。只用自评会被期待效应骗,只用心率会被"一动不动"骗,所以是复合的,并且质量指数 < 70% 的会话不进奖励。更新按分层贝叶斯:总体后验是每个新用户的先验,个人后验每次会话更新;探索上限 15%;某臂比默认差 > 0.3 SD 就对该用户暂停。

Session reward = −standardised Δr HR + λ·Δ self-report (λ set by the pilot, starting at 0.5). Self-report alone is gamed by expectancy, HR alone by stillness, so the reward is composite, and sessions under 70% quality are excluded. Updates are hierarchical Bayesian: the population posterior is every new user's prior; the per-user posterior updates each session; exploration capped at 15%; an arm worse than default by > 0.3 SD is suspended for that user.

诚实规则(写进界面文案)

  • 没测准就说没测准,不给分数。If we couldn't measure, say so; no score.
  • 只和你自己比,不和别人比。Compare only with your own usual.
  • 心率说的是"身体的紧张",不是"焦虑"本身;结果页用"更平静",不用"焦虑降低"。HR indexes arousal, not anxiety; the result says "calmer", never "anxiety reduced".
  • "正在跟着你"只在真的有心率流时出现。"Following you" appears only when a live HR stream exists.
  • 探索(试新声音)从不单独告知,但用户可以在设置里关掉"尝试新声音"。Exploration is never announced per session, but the user can switch off "try new sounds".

研究侧 · 进入决策模型

试点结束:STAI-6 的 P(β1 < 0) → A2a;残差 HR / RMSSD → A2b;连接率与结果页停留 → A3。这些后验直接写回 决策引擎的"+pilot"情景。

After the pilot: P(β1 < 0) on STAI-6 → A2a; residual HR / RMSSD → A2b; connect rate and result-screen dwell → A3, written back into the decision engine's "+pilot" scenario.

9. 技术栈与"周一上线"计划Stack and the plan to release on Monday

P0 · 已完成 · Thu 3 SepFoundations — done
  • 架构文档 · 计划 · VPS HTTPS(38.180.150.12.sslip.io)
  • 核心模块 + 单元测试 · 20 首候选(ID 已校验)
  • v0.1.1 已上线 https://38.180.150.12.sslip.io/app/
P1 · 并行加固 · Thu 3 – Fri 4 SepHardening (parallel agents)
  • Settle 合成床音质 + 离线渲染客观测试
  • 端到端浏览器测试(Settle / Unwind / 无传感器 / 安全屏 / 持久化)并修 bug
  • SoundCloud 播放器 + Spotify 加载兜底
  • Capacitor iOS 脚手架 + IOS.md · 蓝图更新 + 演示脚本
  • 研究模式核心(拉丁方 · STAI-6 · 期待值)+ 测试
P2 · 功能冻结前 · Fri 4 – Sat 5 SepFeature complete
  • 研究模式界面(参与者编号 → 条件、5 分钟预休息、STAI-6 前后、期待值、导出)
  • 手机动作标记进入质量指数 · Settle 预设可选
  • 自有曲目 tier P(待 TDMusic 文件)· 蓝牙胸带实测(Android / 桌面 Chrome)
  • QA.md 在 iPhone Safari(已安装)、Android Chrome、桌面 Chrome 通过
P3 · 上线 · Sun 6 (冻结) → Mon 7 SepRelease v0.2 · Monday
  • 版本与缓存升级 · 部署 · 蓝图与首页链接
  • 5 分钟演示脚本排练 · 候选清单与你核定
  • 全部测试通过、零控制台错误
P4 · iOS · Xcode + Apple 账号到位后 ≈ 2 天iOS build v0.3
  • app-ios/ Capacitor 打包 → TestFlight 内部测试
  • HealthKit 14 天历史 → 真实"你的平时" · 后台音频
P5 · 手表 + 试点 · 11 – 21 SepWatch + pilot v0.4
  • watchOS 伴侣(实时心率、触觉)· Polar 配对
  • E0 校准 · E1 试点
P6 · 学习闭环 · 22 Sep – 10 月中Learning loop v0.5
  • Oura OAuth + 晨间卡 · 基线模型 · Supabase 后端 · 周洞察 · E2 随机化
层 Layer选型 Choice理由 Why
移动端SwiftUI(iOS 17+)+ watchOS 伴侣;后期 React Native 不可行(手表端必须原生)实时心率流只能从手表端 workout session 拿到Live HR needs a native watch session
音频iOS:AVAudioEngine(低通、增益、多层 stem);Web:Web Audio API;真歌:Spotify iFrame API / SoundCloud Widget API自有音源参数适配;嵌入零版权Parametric on owned; embeds cost nothing
信号Swift 端:运动掩膜、Kalman(1-D)、60 s 窗口特征;节拍级不出手机ML §3 预注册规则;数据最小化Pre-registered rules; minimisation
后端Supabase(Postgres + Auth + Row-level security,EU 区);或 VPS 自建 Postgres周级上线;GDPR 区域存储Weeks to ship; EU storage
分析Python:statsmodels / PyMC(混合模型 + 贝叶斯再分析);与 survey_pipeline.py 同一仓库与决策引擎口径一致Same idiom as the decision layer
网页演示静态 HTML + Web Audio + Web Bluetooth(可选);部署在现有 nginx周一可展示;不需要 App 审核Showable Monday; no review

需要你拍板的项目(第一周)Blocking items you must provide (week one)

  1. Apple Developer Program(P4 需要;需要 24–48 小时注册)— 已有吗?Already have it?
  2. Xcode 安装在 Mac 上(≈ 1–2 小时下载)— P4 需要。Needed for P4.
  3. Spotify Premium 登录(后续使用;嵌入已用 30 秒预览工作)。Later; embeds already work with 30-s previews.
  4. 自有音源:≥ 3 首慢 TDMusic 曲目文件;如可能 4 张 Settle 床按 §6.1 规格(合成噪声 + 缓慢 pad 作为临时方案)。≥ 3 slow TDMusic tracks as files; 4 Settle beds to §6.1 spec if possible (synth beds as fallback).
  5. 20 曲候选表核查:保留 / 删除 / 增加。Confirm the 20-track candidate list: keep / drop / add.

10. 附录:v0 控制规则与安全规则Appendix — the v0 controller and safety rules

START   pulse_eq = HR ≥ 90 → 66 · 75–90 → 60 · < 75 → 56   (entrainment: start near the listener, then lead down)
        cutoff   = 600 + clamp((HR − 60) / 40, 0, 1) × 1800 Hz
        density  = HR ≥ 90 → dense → sparse over 3 min · else sparse
EVERY 60 s
        Δ = residual HR (this window) − residual HR (previous window)
        Δ ≤ −2 bpm            → pulse_eq −2 · cutoff −1 notch (−250 Hz) · keep layers
        Δ ≥ +3 bpm, no motion → hold · remove any transient layer
        else                  → hold
GUARDS  pulse_eq ≥ 50 · no onsets > bed +6 dB · loudness −16 LUFS fixed · nothing < 60 Hz
SAFETY  resting HR > 130 or panic tag → grounding screen, numbers hidden, sound continues
QUALITY window flagged if accel SD > 0.05 g or HR jump > 12 bpm; session < 70 % clean → no outcome shown
UNWIND  (tier S) next track = same rules applied to the catalogue's pulse_eq / brightness tags; 8-s crossfade
        (tier P, owned) identical to Settle, applied to the calm arrangement's stems

The same table drives the Wizard-of-Oz pilot (a human applies it), the v0 controller in the app, and the default arm of the later bandit — one rule set, three implementations, so the pilot result transfers to the product.

Lilt product blueprint v1 · 2026-09-03 · TDMusic × emlyon EMBA dissertation · companion to ML_RESEARCH_DESIGN.md, METHODOLOGY_DESIGN.md, DECISION_MODEL.md · the eight screens are design mockups with example readings, not measurements · playback in §4 S7 and §6.3 uses official Spotify / SoundCloud embeds and a TDMusic-owned clip for non-commercial demonstration only.