[{"data":1,"prerenderedAt":166},["ShallowReactive",2],{"navigation":3,"past-lives":46},[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,{"id":47,"title":48,"body":49,"description":50,"extension":137,"lives":138,"meta":159,"navigation":160,"now":161,"path":162,"seo":163,"stem":164,"__hash__":165},"pastLives/past-lives.yml","Past Lives",{"title":48,"description":50,"now":51,"lives":57},"Today I build for sport. Before that I built for music labels, travel startups and online shops. Four industries, one way of thinking. Each one taught me something I still use.",{"years":52,"industry":53,"role":54,"description":55,"to":56},"2023 to now","Sport tech","Founder of Vimo Swim · Total Immersion coach","My current life. A programmable swim metronome, apps for swimmers and coaches, and AI agents that run the back office.","/",[58,92,111,123],{"years":59,"industry":60,"role":61,"description":62,"highlights":63,"lesson":69,"stack":70,"links":79},"2023 to 2026","Music tech","Founder of MusicTech Lab · Co-founder of MusicTech Poland · CTO at Ambistream","A software company for the music industry. We built royalty analytics, AI content platforms and tools for labels and distributors, and published open source tools for music metadata.",[64,65,66,67,68],"Software for labels such as Cherry Red Records, delivered on budget","DDEX and C2PA tools that catch metadata errors before a release goes out","MCP servers for audio metadata, Bandcamp reports and content provenance","SmartFeed Media, AI-curated newsletters that read the music trade press for rights organisations","Co-founded MusicTech Poland, a community for music and tech people, and handed it over to the team that runs it today","Data standards are where products break. And MCP servers, which I first built for music data, are now how I connect AI to everything.",[71,72,73,74,75,76,77,78],"Python","Django","Nuxt","Claude","MCP","DDEX","C2PA","Ableton Live",[80,83,86,89],{"label":81,"to":82},"musictechlab.io","https://musictechlab.io",{"label":84,"to":85},"MusicTech Lab on GitHub","https://github.com/musictechlab",{"label":87,"to":88},"DDEX validator","https://github.com/musictechlab/mtl-ddexvalidator",{"label":90,"to":91},"SmartFeed Media","/projects/smartfeed-media",{"years":93,"industry":94,"role":95,"description":96,"highlights":97,"lesson":101,"stack":102,"links":106},"2015 to 2022","Product agency","Founder and CEO of Bravelab","A software company that built web platforms and MVPs for clients in travel, education, e-commerce and media. Many of them were non-tech founders with a big idea and a small budget.",[98,99,100],"MVPs for startups such as Wundr (travel) and Walkative (education)","B2B and B2C e-commerce platforms","A transparent company: open finances, profit sharing and 4DX goals","How to turn an idea into a plan and a budget a founder can check, and how to run a team that people want to stay in.",[71,72,103,104,105],"Vue.js","PostgreSQL","React Native",[107,109],{"label":108,"to":39},"Profit sharing at Bravelab",{"label":110,"to":23},"4DX at Bravelab",{"years":112,"industry":113,"role":114,"description":115,"highlights":116,"lesson":119,"stack":120},"2010 to 2015","Custom software","Founder of Sizeof","My first company. Custom IT projects for many clients: admin panels, loyalty systems and online shops.",[117,118],"Loyalty systems and admin panels for long-term clients","E-commerce built on Python and Django","How to sell, estimate and deliver on my own, and keep clients for years.",[71,72,104,121,122],"Linux","JavaScript",{"years":124,"industry":125,"role":126,"description":127,"highlights":128,"lesson":132,"stack":133},"2006 to 2010","Loyalty and marketing tech","Full stack engineer, then team leader at hyperCREW","Loyalty programmes and online campaigns for big brands, built in Wrocław.",[129,130,131],"Campaigns and loyalty systems for Citroën, Avon, Deutsche Bank and Play","Loyalty programmes for Olympus, Danfoss, Lafarge and Osram","Led the IT team, hired developers and improved how we delivered","How to ship for big brands on fixed launch dates, when the campaign starts whether the code is ready or not.",[134,135,122,136],"PHP","MySQL","AJAX","yml",[139,147,153,156],{"years":59,"industry":60,"role":61,"description":62,"highlights":140,"lesson":69,"stack":141,"links":142},[64,65,66,67,68],[71,72,73,74,75,76,77,78],[143,144,145,146],{"label":81,"to":82},{"label":84,"to":85},{"label":87,"to":88},{"label":90,"to":91},{"years":93,"industry":94,"role":95,"description":96,"highlights":148,"lesson":101,"stack":149,"links":150},[98,99,100],[71,72,103,104,105],[151,152],{"label":108,"to":39},{"label":110,"to":23},{"years":112,"industry":113,"role":114,"description":115,"highlights":154,"lesson":119,"stack":155},[117,118],[71,72,104,121,122],{"years":124,"industry":125,"role":126,"description":127,"highlights":157,"lesson":132,"stack":158},[129,130,131],[134,135,122,136],{},true,{"years":52,"industry":53,"role":54,"description":55,"to":56},"/past-lives",{"title":48,"description":50},"past-lives","3VTDpilEY2JvolJzMB-nZvWPP7sOw3kQRUGC0lmD2zI",1793026956010]