[{"data":1,"prerenderedAt":261},["ShallowReactive",2],{"navigation":3,"all-projects":46,"/projects/total-immersion-cracow":156},[4],{"title":5,"path":6,"stem":7,"children":8,"page":45},"Blog","/blog","blog",[9,13,17,21,25,29,33,37,41],{"title":10,"path":11,"stem":12},"Automating Google Docs with Claude Code: Build a CLI That Pulls, Edits, and Pushes","/blog/automating-google-docs-with-claude-code","blog/automating-google-docs-with-claude-code",{"title":14,"path":15,"stem":16},"Building a Garmin Connect IQ App in Monkey C: Lessons from a BLE Remote Control","/blog/building-a-garmin-connect-iq-app-in-monkey-c","blog/building-a-garmin-connect-iq-app-in-monkey-c",{"title":18,"path":19,"stem":20},"Building a YouTube Video Research Pipeline with Whisper and Claude","/blog/building-a-youtube-video-research-pipeline-with-whisper-and-claude","blog/building-a-youtube-video-research-pipeline-with-whisper-and-claude",{"title":22,"path":23,"stem":24},"The very first attempt to implement 4DX in Bravelab.io","/blog/implementing-4dx-in-bravelab","blog/implementing-4dx-in-bravelab",{"title":26,"path":27,"stem":28},"Learning Embedded Rust: A C/Python Developer's Rosetta Stone","/blog/learning-embedded-rust-rosetta-stone","blog/learning-embedded-rust-rosetta-stone",{"title":30,"path":31,"stem":32},"Mirroring a Wearable OLED Display to a Projector for Live Demos","/blog/mirroring-a-wearable-oled-display-to-a-projector-for-live-demos","blog/mirroring-a-wearable-oled-display-to-a-projector-for-live-demos",{"title":34,"path":35,"stem":36},"NFC Tag Emulation on nRF52840 with Rust — No SDK Required","/blog/nfc-tag-emulation-nrf52840-rust-embassy","blog/nfc-tag-emulation-nrf52840-rust-embassy",{"title":38,"path":39,"stem":40},"A quick introduction to profit sharing implementation","/blog/profit-sharing-implementation","blog/profit-sharing-implementation",{"title":42,"path":43,"stem":44},"Smart Home on a Budget: BLE Window Sensors with Two Pico Ws and MicroPython","/blog/smart-home-pico-w-ble-window-sensor-micropython","blog/smart-home-pico-w-ble-window-sensor-micropython",false,[47,69,88,139,156,174,192,209,225,243],{"id":48,"title":49,"date":50,"description":51,"extension":52,"gallery":53,"image":54,"link":55,"meta":56,"stage":53,"status":65,"stem":66,"story":53,"tags":67,"url":57,"__hash__":68},"projects/projects/spotify-pedalboard.yml","Spotify PedalBoard","2024-06-30T00:00:00.000Z","Open source GUI for real-time audio effects, built on Spotify's Pedalboard library. Written in Python and published by MusicTech Lab.","yml",null,"/images/stock/1598488035139-bdbb2231ce04.webp","https://github.com/musictechlab/mtl-pedalboard",{"path":57,"body":58},"/projects/spotify-pedalboard",{"title":49,"description":51,"image":54,"url":57,"tags":59,"date":64,"status":65,"link":55},[60,61,62,63],"Spotify","Audio","Python","Processing","2024-06-30","archive","projects/spotify-pedalboard",[60,61,62,63],"rZl3sGidTl_eDmMf9rmeTzx5Z-QqI7ckVbRjjk8GzQc",{"id":70,"title":71,"date":72,"description":73,"extension":52,"gallery":53,"image":74,"link":53,"meta":75,"stage":53,"status":84,"stem":85,"story":53,"tags":86,"url":76,"__hash__":87},"projects/projects/musictech-poland.yml","MusicTech Poland","2024-04-01T00:00:00.000Z","MusicTech Poland is an initiative emerging in response to the rapidly blurring boundaries between the music sector and the new technology industry. The primary goal of MusicTech Poland is to build a community integrating those interested in the development and exploration of the MusicTech sector. We bring together musicians, developers, entrepreneurs, and innovators to shape the future of music technology in Poland.","/images/stock/1511671782779-c97d3d27a1d4.webp",{"path":76,"body":77},"/projects/musictech-poland",{"title":71,"description":73,"image":74,"url":76,"tags":78,"date":83,"status":84},[79,80,81,82],"MusicTech","Community","Innovation","Poland","2024-04-01","current","projects/musictech-poland",[79,80,81,82],"BJvT_Ix2UzKqNllakj-BQivmKAk0dSOVw8VwD2Zu4p8",{"id":89,"title":90,"date":91,"description":92,"extension":52,"gallery":93,"image":95,"link":115,"meta":116,"stage":126,"status":84,"stem":136,"story":127,"tags":137,"url":117,"__hash__":138},"projects/projects/vimo-swim.yml","Vimo Swim","2023-10-01T00:00:00.000Z","Programmable swim metronome that sits under the swim cap, plus free apps for swimmers and coaches. Formerly BeatBuddy. I founded it and lead the engineering. Now in a testing program with Total Immersion coaches in Poland and Spain.",[94,97,100,103,106,109,112],{"src":95,"alt":96},"/images/projects/vimo-swim/beta-batch-poolside.webp","Devices from the beta batch at the pool",{"src":98,"alt":99},"/images/projects/vimo-swim/two-devices.webp","Two production devices with the OLED screen",{"src":101,"alt":102},"/images/projects/vimo-swim/cap-device.webp","The device on a Vimo swim cap",{"src":104,"alt":105},"/images/projects/vimo-swim/hands-tempo.webp","Testers in the pool, every device set to 1.40 s",{"src":107,"alt":108},"/images/projects/vimo-swim/connect-training.webp","Vimo Connect: setting the tempo",{"src":110,"alt":111},"/images/projects/vimo-swim/coach-group.webp","Vimo Coach: two devices in one group",{"src":113,"alt":114},"/images/projects/vimo-swim/garmin-tempo.webp","Vimo for Garmin showing the device tempo on a Fenix watch","https://vimoswim.com",{"path":117,"body":118},"/projects/vimo-swim",{"title":90,"description":92,"image":95,"url":117,"tags":119,"date":125,"status":84,"stage":126,"link":115,"story":127,"gallery":128},[120,121,122,123,124],"SportTech","Hardware","Wearable","Flutter","Rust","2023-10-01","In development · testing program","## The problem\n\nSwimmers push off the wall and swim blind. A watch tracks time and distance, but not how you move. Amateurs repeat the same technique mistakes with no feedback, and coaching or video analysis is expensive. Older tempo trainers had no firmware updates, only a basic beep and no programmable intervals. At the side of the pool, a coach can lose about five minutes setting ten devices one by one.\n\n## The product\n\nA small device that sits under the swim cap. It gives a beep, a vibration or a light on every stroke or interval, so the swimmer keeps one steady rhythm and even splits.\n\n- **Device:** 128x64 OLED screen, tempo from 0.10 to 9.99 s in steps of 0.01 s, 9 to 12 hours of active signal, a wireless charging dock, firmware updates over Bluetooth Low Energy, and a link to BLE heart rate straps.\n- **Vimo Connect:** pairs the device, sets tempo and interval programs, installs firmware. Free, released in June 2026.\n- **Vimo Coach:** controls ten or more devices from one phone. Private beta on iOS since August 2026.\n- **Vimo Replay:** slow motion and frame by frame video analysis, on the phone only. iOS.\n- **Vimo for Garmin:** start, stop and change tempo from a Fenix watch. Submitted to the Connect IQ Store. A data field that writes the tempo into the Garmin FIT file is in beta.\n- **Vimo Lens:** desktop app for a season of Garmin swim data. In development.\n\n## My role\n\nI founded Vimo Swim and lead the engineering. I also swim and coach Total Immersion, so I test with real swimmers from the start. I wrote the Garmin watch app (about 650 lines of Monkey C) and the NFC driver in Rust. After the open water camp in August 2026, I fixed a firmware issue the next day. I also built Vimek, the Claude agent that runs the team's back office.\n\n## Technical decisions\n\n- **Rust firmware.** Memory safety without a garbage collector. I moved from C on the nRF52832 to Rust on the nRF52840.\n- **Embassy async runtime.** Its cooperative scheduler lets NFC and Bluetooth share one CPU. No Rust NFC driver existed, so I wrote one.\n- **A plain text Bluetooth protocol.** Easy to debug, simple in the firmware, and it works from Monkey C on Garmin watches.\n- **One radio for BLE and ANT+.** The S332 SoftDevice runs both. Vimo Swim joined the ANT+ Adopter Program in February 2026.\n- **Flutter for the phone apps.** It lets me build useful apps for a niche product quickly.\n- **Lens on desktop.** \"Is my training paying off?\" needs a big screen and a full season of data.\n\n## Timeline\n\n- **2022:** first development work. The January 2025 post about the first waterproof test counts two and a half years of development before it.\n- **October 2023:** \"Idea and concept\", the first entry in the official Vimo Swim changelog.\n- **June 2024:** first prototype board.\n- **January 2025:** first fully waterproof test, then the first pool tests with Total Immersion swimmers.\n- **August 2025:** second prototype.\n- **April 2026:** renamed from BeatBuddy to Vimo.\n- **June 2026:** production boards boot, Vimo Connect is released.\n- **August 2026:** the first 30 devices in final testing, a group test at an open water camp, and the Vimo Coach beta.\n- **September 2026:** the first two devices go to a Total Immersion coach in Spain.\n\n## Where it is now\n\nA testing program with a fully refundable deposit. The retail price is not announced yet. The public launch is planned for Q4 2026.\n\n## What testing has shown so far\n\n- In the first pool tests, swimmers valued the vibration cue, including people with hearing loss, and found the steady rhythm motivating.\n- At the open water camp in August 2026, more than a dozen devices were in the water at once. The test led to a brightness fix, auto power-off and a new EMOM mode.\n- Testers have used the device in Poland, Spain, Hungary, Mexico, Norway and Greece.\n- There are no sales or measured performance results yet.\n",[129,130,131,132,133,134,135],{"src":95,"alt":96},{"src":98,"alt":99},{"src":101,"alt":102},{"src":104,"alt":105},{"src":107,"alt":108},{"src":110,"alt":111},{"src":113,"alt":114},"projects/vimo-swim",[120,121,122,123,124],"69-uaZdyVI3uzrsuqBFGFrqpdVu0C7YpL-I5QX2Yw2I",{"id":140,"title":141,"date":142,"description":143,"extension":52,"gallery":53,"image":144,"link":145,"meta":146,"stage":53,"status":84,"stem":153,"story":53,"tags":154,"url":147,"__hash__":155},"projects/projects/musictech-lab.yml","MusicTech Lab","2023-01-15T00:00:00.000Z","Software company for the music industry that I founded in 2023. The team builds tools such as royalty analytics and AI content platforms, and publishes open source music metadata tools.","/images/stock/1511379938547-c1f69419868d.webp","https://musictechlab.io",{"path":147,"body":148},"/projects/musictech-lab",{"title":141,"description":143,"image":144,"url":147,"tags":149,"date":152,"status":84,"link":145},[79,150,81,151],"AI","Music Industry","2023-01-15","projects/musictech-lab",[79,150,81,151],"7qJiYWdy1nHfPIikasHo000IM9Veq6rC9VR_qurktZo",{"id":157,"title":158,"date":159,"description":160,"extension":52,"gallery":53,"image":161,"link":162,"meta":163,"stage":53,"status":84,"stem":171,"story":53,"tags":172,"url":164,"__hash__":173},"projects/projects/total-immersion-cracow.yml","Total Immersion Cracow","2022-06-15T00:00:00.000Z","Freestyle swimming courses in Kraków using the Total Immersion method. I coach there, and it is where my sport products meet real swimmers first.","/images/landing/total-immersion-cracow.webp","https://krakow.totalimmersion.pl",{"path":164,"body":165},"/projects/total-immersion-cracow",{"title":158,"description":160,"image":161,"url":164,"tags":166,"date":170,"status":84,"link":162},[167,168,169,80],"Swimming","Training","Sport","2022-06-15","projects/total-immersion-cracow",[167,168,169,80],"xBGAYzudpP8Dv1gfNVBkl9z1_m_UANnHTYpPks2JAtI",{"id":175,"title":176,"date":177,"description":178,"extension":52,"gallery":53,"image":179,"link":53,"meta":180,"stage":53,"status":65,"stem":189,"story":53,"tags":190,"url":181,"__hash__":191},"projects/projects/closer-music.yml","Closer Music","2021-05-15T00:00:00.000Z","Music streaming and discovery platform designed to connect artists with fans. A web application focused on building closer relationships between musicians and their audience through personalized content and direct engagement features.","/images/stock/1514320291840-2e0a9bf2a9ae.webp",{"path":181,"body":182},"/projects/closer-music",{"title":176,"description":178,"image":179,"url":181,"tags":183,"date":188,"status":65},[184,185,186,187],"Music","Platform","Streaming","Web App","2021-05-15","projects/closer-music",[184,185,186,187],"mwwIsQ8-SUfg-N-gzDv7eJGsP0w1T0y07rR__7dyWZo",{"id":193,"title":194,"date":195,"description":196,"extension":52,"gallery":53,"image":197,"link":53,"meta":198,"stage":53,"status":65,"stem":206,"story":53,"tags":207,"url":199,"__hash__":208},"projects/projects/wundr.yml","Wundr","2021-02-10T00:00:00.000Z","Travel discovery platform that helps users find unique experiences and hidden gems. MVP built for non-tech founders, featuring curated recommendations, personalized itineraries, and a community-driven approach to travel exploration.","/images/stock/1469854523086-cc02fe5d8800.webp",{"path":199,"body":200},"/projects/wundr",{"title":194,"description":196,"image":197,"url":199,"tags":201,"date":205,"status":65},[202,185,203,204],"Travel","Discovery","Mobile","2021-02-10","projects/wundr",[202,185,203,204],"uzUo3EtZwsU-d3LzR4qMv9Az6ue1o1ta9ZnYvMa4iXw",{"id":210,"title":211,"date":212,"description":213,"extension":52,"gallery":53,"image":214,"link":53,"meta":215,"stage":53,"status":65,"stem":222,"story":53,"tags":223,"url":216,"__hash__":224},"projects/projects/memosonic-app.yml","Memosonic App","2018-08-20T00:00:00.000Z","Mobile application that combines music with memory and learning. An innovative approach to audio-based education and recall, using sound patterns to enhance memory retention and create engaging learning experiences.","/images/stock/1574517947730-55cb23e608c2.webp",{"path":216,"body":217},"/projects/memosonic-app",{"title":211,"description":213,"image":214,"url":216,"tags":218,"date":221,"status":65},[204,184,219,220],"Memory","App","2018-08-20","projects/memosonic-app",[204,184,219,220],"fVFEg9NYQvqBhffuD9zJF4slB-DvSM0HgOHArAtnoSU",{"id":226,"title":227,"date":228,"description":229,"extension":52,"gallery":53,"image":230,"link":231,"meta":232,"stage":53,"status":65,"stem":240,"story":53,"tags":241,"url":233,"__hash__":242},"projects/projects/gcloud-pubsub-example.yml","Gcloud pubsub example","2018-04-10T00:00:00.000Z","Example of event-driven audio analysis on Google Cloud Run with Pub/Sub. Open source Python code on my GitHub.","/images/stock/1451187580459-43490279c0fa.webp","https://github.com/msmenzyk/gcloud-pubsub-example",{"path":233,"body":234},"/projects/gcloud-pubsub-example",{"title":227,"description":229,"image":230,"url":233,"tags":235,"date":239,"status":65,"link":231},[236,237,62,238],"Google Cloud","PubSub","Example","2018-04-10","projects/gcloud-pubsub-example",[236,237,62,238],"aCgSCwOufuCv_0k1OaBR1pvo31CGjXaD3_JSfp0yFXk",{"id":244,"title":245,"date":246,"description":247,"extension":52,"gallery":53,"image":248,"link":249,"meta":250,"stage":53,"status":65,"stem":258,"story":53,"tags":259,"url":251,"__hash__":260},"projects/projects/arduino-midi-ableton.yml","Arduino and midi Ableton","2016-09-12T00:00:00.000Z","Arduino MIDI controller with two buttons for Ableton Live. Open source C++ code on my GitHub.","/images/stock/1563330232-57114bb0823c.webp","https://github.com/msmenzyk/arduino-midi-ableton",{"path":251,"body":252},"/projects/arduino-midi-ableton",{"title":245,"description":247,"image":248,"url":251,"tags":253,"date":257,"status":65,"link":249},[254,255,256,121],"Arduino","MIDI","Ableton","2016-09-12","projects/arduino-midi-ableton",[254,255,256,121],"Uhmr9Wu5HFHRW_IBsf5cYeES3vN_NZJM8xgVt0VICow",1792754841490]