chahinebrini
22385d7d67
feat(stripe,onboarding): tier-rename + TTS audio button in lyra bubble
## Stripe Checkout Rename
Alte Legacy-Tier-Namen 'standard/pro' (von alter Tier-Struktur) waren
irreführend — heute heißt es 'pro/legend'. Cleanup:
- ENV-Var-Namen: STRIPE_PRICE_<PLAN>_<BILLING> (computed) statt
hardcoded STANDARD/PRO Mapping. Erwartet:
STRIPE_PRICE_PRO_MONTHLY
STRIPE_PRICE_PRO_YEARLY
STRIPE_PRICE_LEGEND_MONTHLY
STRIPE_PRICE_LEGEND_YEARLY
- 'quarterly' billing entfernt (Strategist-Verdict: nur monthly + yearly,
'2 Monate gratis' bei yearly).
- metadata enthält jetzt billing zusätzlich zu plan.
Webhook-Audit: bereits korrekt (mapped session.metadata.plan → pro/legend/free
via simple switch).
User-Action benötigt (Stripe Test-Dashboard):
- 4 Products + Prices anlegen mit 14-Tage-Trial
- Pricing pro Strategist: Pro 3,99/Mo + 39,90/Yr (2mo gratis),
Legend 7,99/Mo + 79,90/Yr
- Webhook-Endpoint: https://staging.rebreak.org/api/stripe/webhook
(Events: checkout.session.completed, customer.subscription.{updated,deleted})
- ENV-Vars (incl. STRIPE_WEBHOOK_SECRET) in Infisical pflegen
## TTS Audio-Button in LyraBubble
DiGA-Accessibility: Screen-Reader-Alternative + Lese-Hürden-Mitigation.
- lib/lyraSpeech.ts: one-shot TTS-Helper (vereinfacht aus SosTtsQueue)
- Fetch /api/coach/speak mit Auth-Token
- Bytes → Base64 → temp-file → expo-av Audio.Sound
- Stop-fn: abortet in-flight fetch + unloaded sound
- Status-callback: idle | loading | playing
- LyraBubble: Audio-Button rechts oben (orange Pill, 34×34)
- Icon: volume-medium / hourglass / stop je nach status
- Auto-stop bei text-change (Slide-Switch) + unmount
- A11y-Labels in 4 Sprachen (audio_play / audio_loading / audio_stop)
Bubble-paddingRight erhöht auf 50 für Button-Platz.
## Locales
de/en/fr/ar: onboarding.lyra.audio_play / audio_loading / audio_stop
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 20:51:11 +02:00
..
2026-05-16 03:15:33 +02:00
2026-05-11 14:00:02 +02:00
2026-05-15 21:45:33 +02:00
2026-05-10 23:59:25 +02:00
2026-05-06 07:13:43 +02:00
2026-05-09 16:16:49 +02:00
2026-05-08 20:47:43 +02:00
2026-05-17 15:44:32 +02:00
2026-05-07 04:15:31 +02:00
2026-05-09 17:54:34 +02:00
2026-05-17 20:51:11 +02:00
2026-05-10 23:59:25 +02:00
2026-05-17 19:58:56 +02:00
2026-05-17 19:05:37 +02:00
2026-05-11 14:00:02 +02:00
2026-05-06 13:58:07 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 13:58:07 +02:00
2026-05-07 18:22:58 +02:00
2026-05-10 23:59:25 +02:00
2026-05-15 21:48:54 +02:00
2026-05-07 18:22:58 +02:00
2026-05-13 16:15:54 +02:00
2026-05-06 13:58:07 +02:00
2026-05-08 19:32:27 +02:00