{"id":18334772,"url":"https://github.com/importryan/muggle","last_synced_at":"2025-04-13T06:15:38.273Z","repository":{"id":231838140,"uuid":"782762822","full_name":"importRyan/Muggle","owner":"importRyan","description":"Muggle is an open source, privacy-friendly alternative to apps by Bluetooth smart mug manufacturers. ","archived":false,"fork":false,"pushed_at":"2024-04-26T21:18:28.000Z","size":4522,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-13T06:15:36.259Z","etag":null,"topics":["corebluetooth","ember-mug","ember-smart-mug","macos","nordic-bluetooth","swiftui","swiftui-macos"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/importRyan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-06T01:12:30.000Z","updated_at":"2024-05-07T11:48:39.000Z","dependencies_parsed_at":"2024-11-05T20:06:28.777Z","dependency_job_id":"ed381da8-2bd9-4bd4-bf1e-c1d4c44fc996","html_url":"https://github.com/importRyan/Muggle","commit_stats":null,"previous_names":["importryan/muggle"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/importRyan%2FMuggle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/importRyan%2FMuggle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/importRyan%2FMuggle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/importRyan%2FMuggle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/importRyan","download_url":"https://codeload.github.com/importRyan/Muggle/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248670434,"owners_count":21142904,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["corebluetooth","ember-mug","ember-smart-mug","macos","nordic-bluetooth","swiftui","swiftui-macos"],"created_at":"2024-11-05T19:52:23.264Z","updated_at":"2025-04-13T06:15:38.252Z","avatar_url":"https://github.com/importRyan.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"#  Muggle\n\nMuggle is a macOS menu bar app for Bluetooth smart mugs. Unlike OEM apps, your identity and activities are not collected.\n\n[Test Flight](https://testflight.apple.com/join/gWY84Gm8) | [Supported Mugs](#supported-mugs) | [Repo Overview](#repo-overview) | [To-Dos](#tasks) \n\n| At Target Temp | Heating/Cooling |\n| ---------------|--------------------|\n| \u003cimg width=\"443\" alt=\"AtTargetTemp\" src=\"https://github.com/importRyan/Muggle/assets/78187398/74472572-6b1d-4acd-a1e6-f91da4dc1c5b\"\u003e | \u003cimg width=\"443\" alt=\"NotAtTargetTemp\" src=\"https://github.com/importRyan/Muggle/assets/78187398/9c9b66cc-93ab-4290-b8a2-06976b432211\"\u003e |\n\n\n### Supported Mugs\n- Ember Cup 6 oz (tested: CM21S)\n- Ember Mug 2 14 oz (tested: CM19P)\n- Ember Tumbler 16 oz (tested: CM21XL)\n\n\u003e [!CAUTION]\nCheck the max target temperature of your mug in Ember's app. Muggle's max is 63℃ (145℉). If that doesn't match Ember's app, I'd appreciate an [email](mailto:ryan@roastingapps.com) about it. Don't set a higher temp (as I lack your device and have not tested whether Ember wrote a safeguard into its firmware).\n\n### Repo overview\n\nVarious brands of BLE mugs are abstracted behind a `BluetoothMug` and `BluetoothPeripheral` protocol to keep the view layer agnostic to specific models. Nordic's CoreBluetoothMock library enables stable unit testing on CI.\n\n| Package\\Target               | Purpose                                                          |\n|------------------------------|------------------------------------------------------------------|\n| `MuggleMac`                  | SwiftUI MenuBarExtra                                             |\n| `MuggleCore\\MuggleBluetooth` | CBCentralManager                                                 |\n| `MuggleCore\\EmberBluetooth`  | Ember CBPeripheral(s) + Nordic mocks                             |\n| `MuggleCore\\VFZOBluetooth`   | VFZO M1 CBPeripheral + Nordic mocks                              |\n| `MuggleCore\\Common`          | BluetoothMug/Peripheral protocol + Nordic CoreBluetoothMock shim |\n| `MuggleCore\\CommonUI`        | Cross-platform SwiftUI                                           |\n\n\n## Tasks\n#### V1.0.2\n- [ ] Icon: brighten/de-cheese\n- [ ] Verify behavior: Travel mug (HasContentsCharacteristic, Service)\n- [x] Verify behavior: Tumbler\n- [x] Verify behavior: Cup\n- [ ] fix: When keyboard navigation enabled, the Settings button appears with a focus ring\n\n#### V1.1\n- [ ] Experiment: predict cooldown time, battery life, charge time \n- [ ] VFZO M1 mug support\n\n#### Features\n- [ ] Experiment: eliminate Ember's low volume overheating\n- [ ] Experiment: reduce Ember's' battery consumption during cooldown phase\n- [ ] More non-Ember products\n- [ ] visionOS: as central\n- [ ] macOS/visionOS: \"remote\" central\n- [ ] iPhone/iPad + Live Activity / Widget\n- [ ] Improve onboarding\n\n#### Minor/Fixes\n- [ ] Scanner efficiency: Reduce eagerness to save a little laptop battery / turn on manually after initial session\n- [ ] Forget a mug: cache forgotten IDs to prevent mugs in discovery mode from automatically reconnecting if scanning\n- [ ] Multi-muggers: select mug for MenuBar or allow multiple in MenuBar\n- [ ] Expand mock and live test suite\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimportryan%2Fmuggle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimportryan%2Fmuggle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimportryan%2Fmuggle/lists"}