Ce prototype crée des paysages sonores (bruit rose + battements binauraux doux) adaptés à votre profil. Volume plafonné et arrêt d'urgence intégrés.
â ï¸ Audio non médical. Pas de paramètres électromagnétiques. Pour tout trouble sévère (apnée, parasomnies), consultez un professionnel.
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional
app = FastAPI()
class Answers(BaseModel):
bedtime_week: Optional[str] = None
sleep_latency: Optional[int] = 0
noct_awakenings: Optional[int] = 0
goal_primary: Optional[str] = "Endormissement"
sensitivity: Optional[str] = "Moyenne"
@app.post("/api/assess")
def assess(answers: Answers):
# Reprend la même logique que le client (règles explicables)
def to_minutes(hhmm):
h,m = map(int, hhmm.split(':'))
return h*60+m
def minutes_to_hhmm(mins):
mins %= 24*60
return f"{mins//60:02d}:{mins%60:02d}"
sens = (answers.sensitivity or 'Moyenne').lower()
vol_map = { 'faible':40,'moyenne':35,'élevée':25 }
base_vol = vol_map.get(sens,35)
bedtime_min = to_minutes(answers.bedtime_week or '22:30')
latency = answers.sleep_latency or 0
awak = answers.noct_awakenings or 0
plan=[]
plan.append({"id":"pre","label":"Pré-dodo","start":minutes_to_hhmm(bedtime_min-30),"duration_min":20,"audio":{"pink":True,"binaural":False,"diffHz":0},"volume":base_vol})
if latency>20:
plan.append({"id":"onset","label":"Endormissement","start":minutes_to_hhmm(bedtime_min-10),"duration_min":15,"audio":{"pink":True,"binaural":True,"diffHz":4},"volume":max(base_vol-5,20)})
plan.append({"id":"stable","label":"Sommeil stable","start":minutes_to_hhmm(bedtime_min+10),"duration_min":120,"audio":{"pink":True,"binaural":False,"diffHz":0},"volume":max(base_vol-10,18)})
if awak>=2:
plan.append({"id":"maintenance","label":"Réduction micro-réveils","start":minutes_to_hhmm(bedtime_min+90),"duration_min":10,"audio":{"pink":True,"binaural":True,"diffHz":3},"volume":max(base_vol-8,18)})
plan.append({"id":"late","label":"Fin de nuit","start":minutes_to_hhmm(bedtime_min+190),"duration_min":20,"audio":{"pink":True,"binaural":False,"diffHz":0},"volume":max(base_vol-12,15)})
profile = {"goal":answers.goal_primary or 'Endormissement',"sensitivity":answers.sensitivity or 'Moyenne',"risk_insomnia":"élevé" if latency>30 else ("modéré" if latency>15 else "faible"),"awakenings":awak}
return {"profile":profile,"plan":plan}
Connexion Web Bluetooth (si supportée). Sinon, mode simulation pour tester l'envoi du programme.
program_mode: calm/relax/rem/offsession_start: ISO datetimesession_length_min: uint16volume_hint: 0–100Ces valeurs sont non-médicales. Les paramètres EM restent désactivés.
Pas de données de santé sensibles. Réponses stockées localement (localStorage) par défaut.
Case à cocher explicite. Export/suppression disponibles. Aucune publicité comportementale.
Audio non médical. Volume limité. Consultez un professionnel en cas d'apnée, ronflements sévères, douleurs ou somnolence diurne.
Volume plafonné, arrêt d’urgence, aperçu bloc par bloc.