Highlights
Product Hunt release
Important
We launched our campaign on Product Hunt today and would really appreciate your support in the form of an upvote. Thanks! https://www.producthunt.com/products/open-wearables
Webhooks Ecosystem
A full outgoing webhook infrastracture has been implemented (background processing, managment UI and other improvements since 0.4.3). We have also added more incoming webhooks support for specific providers: Suunto & Whoop. More incoming!
Health Data Precision (Sleep & Heart)
Significant effort went into refining sleep calculations (local time zone grouping, excluding awake time) and heart metrics (HRV-CV precision), greatly increasing the reliability of the analytics.
Developer Experience (DX) Evolution
Improvements of seed data generator and MCP server makes it much easier for developers to build, test and debug applications on top of Open Wearables.
What's Changed
Integrations
- feat: Add incoming webhook handlers for Whoop by @czajkub in #940
- feat: Suunto webhooks + provider capabilities reworked by @KaliszS in #942
- feat(backend): accept Health Connect exercise vocabulary by @kjsteuer in #864
- fix(backend): fall back to source.app_id / bundle_identifier for original_source_name by @kjsteuer in #863
- feat(backend): recognize Health Connect power/speed/cadence/total_calories vocabulary by @kjsteuer in #866
- fix: Oura data extraction improvements by @czajkub in #889
- chore(backend): align Strava webhook verify token with other providers by @knowald in #977
External Webhooks
- fix(backend): full sample data in timeseries webhook payloads by @KaliszS in #904
- fix: svix webhooks improvements by @KaliszS in #923
- fix: emit webhooks from bulk_create_details for SDK imports by @bartmichalak in #926
Algorithms & Data Processing
- fix(sleep): group sleep summaries by local start date instead of UTC … by @FBegiello in #852
- fix: sleep calculation overflow by @FBegiello in #855
- fix: prevent sleep duration duplication during merge and log skips by @czajkub in #842
- fix: display sleep duration correctly via endpoint by @czajkub in #883
- feat: add resilience score celery task by @czajkub in #845
- fix(backend): align health scores and workout fields with real provider formats by @FBegiello in #892
- fix: sleep duration excludes awake time, add time in bed column by @bartmichalak in #929
- fix: align sleep score date to wake-up date via direct record linkage by @FBegiello in #900
- fix: save sleep efficiency correctly for Apple and Garmin by @czajkub in #944
- fix: improve HRV-CV storage precision and add 0-100 scoring by @FBegiello in #919
- fix: improve HRV-CV storage precision and add 0-100 scoring (retry) by @bartmichalak in #958
- fix(backend): correct peak_expiratory_flow_rate unit to L/min by @bartmichalak in #979
Dashboard & User Experience
- feat: add per-user data summary endpoint and dashboard display by @bartmichalak in #839
- feat(frontend): display API base URL in credentials tab by @bartmichalak in #867
- feat(dashboard): add Oura as a seed data provider by @FBegiello in #887
- feat(frontend): add webhooks management UI by @bartmichalak in #902
- feat(frontend): mark webhooks as beta by @bartmichalak in #918
- fix(frontend): improved webhook deliveries tab by @KaliszS in #925
- fix: seed time-series UX follow-ups by @bartmichalak in #932
- feat: delete workout/sleep endpoints + UI by @KaliszS in #952
- fix(frontend): silence settings route tree warnings by @bartmichalak in #955
- refactor(frontend): provider live sync mode badges by @KaliszS in #964
- refactor(frontend): remove redundant webhook manage button by @DominikCywinski in #965
- feat(frontend): add API key update functionality and UI support by @skadzielawa in #978
- fix(backend): hide non implemented webhooks in UI by @KaliszS in #960
Documentation
- docs: fix e2e guide pagination field + provider list endpoint by @farce1 in #886
- fix(integrations): subscribe the Celery worker to the webhook_sync queue by @srirsiva in #962
- docs: trim descriptions to ≤155 chars and separate display title from og:title by @blackbudda in #888
- docs: add Apple Health integrations list by @bartmichalak in #890
- docs: document grace-period flag for historical sync on connect by @bartmichalak in #897
- docs: add Seed Data Generator dev guide by @bartmichalak in #903
- docs: refresh backend e2e integration guide by @bartmichalak in #909
- docs: add Health Scores documentation by @anjazych in #908
- docs: note cloud_only flag for web integration flows by @bartmichalak in #922
- docs: fix typo "envionment" in Makefile help text by @knowald in #967
- docs: fix Whoop Developer Dashboard link by @bartmichalak in #982
Infrastructure, Backend & Chores
- perf(backend): offload webhook processing to background tasks by @sLeeNguyen in #685
- refactor(backend): move historical sync dispatch into provider strategy by @bartmichalak in #817
- chore: update sentry-sdk[fastapi] requirement from >=2.42.1 to >=2.57.0 in /backend by @dependabot[bot] in #872
- feat(mcp): add get_timeseries tool for granular sample queries by @kjsteuer in #882
- chore: bump jsdom from 28.1.0 to 29.0.0 in /frontend by @dependabot[bot] in #869
- chore: bump the npm-minor-patch group across 1 directory with 15 updates by @dependabot[bot] in #898
- chore: bump vite from 7.3.1 to 8.0.0 in /frontend by @dependabot[bot] in #870
- fix: svix-server railway deployment by @KaliszS in #891
- chore: deprecate external_user_id in OpenAPI schema by @bartmichalak in #905
- chore(dashboard): remove legacy seed_data_service module by @FBegiello in #912
- chore: remove unfinished Python SDK by @bartmichalak in #906
- fix: slow tests after adding lifespan with webhook event registration by @KaliszS in #924
- feat: continuous time-series in seed generator by @bartmichalak in #931
- chore: bump the npm-minor-patch group in /frontend with 5 updates by @dependabot[bot] in #913
- chore: bump @vitejs/plugin-react from 5.2.0 to 6.0.1 in /frontend by @dependabot[bot] in #914
- fix(backend): move faker to dependencies group by @KaliszS in #937
- feat(backend): add trace_id & user_id to logs by @KaliszS in #941
- chore: bump the npm-minor-patch group in /frontend with 6 updates by @dependabot[bot] in #946
- chore: optimize backend docker build caching and startup time by @bartmichalak in #831
- refactor(backend): remove suunto debug endpoints by @KaliszS in #951
- chore: bump lucide-react from 0.577.0 to 1.0.1 in /frontend by @dependabot[bot] in #947
- chore(frontend): use Vite's native tsconfig paths resolution by @bartmichalak in #956
- feat(backend): add created_at to BaseDbModel for all tables by @bartmichalak in #853
- fix(backend): replace debug print() with structured logging in Whoop provider by @knowald in #969
- chore(backend): remove unused SERVER_HOST from .env.example by @knowald in #971
- chore: remove unused root .dockerignore by @knowald in #975
- chore(backend): remove orphaned records.py route module by @knowald in #973
- feat: add Product Hunt featured badge to README by @psobusiak in #988
- feat: product hunt badge by @psobusiak in #989
New Contributors
- @kjsteuer made their first contribution in #863
- @sLeeNguyen made their first contribution in #685
- @anjazych made their first contribution in #908
- @srirsiva made their first contribution in #962
- @DominikCywinski made their first contribution in #965
- @knowald made their first contribution in #967
- @skadzielawa made their first contribution in #978
Full Changelog: 0.4.3...0.5.0

