[{"data":1,"prerenderedAt":545},["ShallowReactive",2],{"component-nav":3,"i-mdi:menu":31,"i-mdi:close":36,"page-work-index":38,"work-index":48,"component-footer":496,"component-identity":525,"i-mdi:github":533,"i-mdi:linkedin":535,"i-nerdoza:kaweah-tech":537,"i-mdi:email-outline":541,"i-mdi:rss":543},{"id":4,"aria":5,"extension":10,"links":11,"meta":27,"stem":28,"wordmark":29,"__hash__":30},"componentNav\u002Fcomponents\u002Fnav.yml",{"primary":6,"drawer":7,"openMenu":8,"closeMenu":9},"Primary","Primary navigation","Open menu","Close menu","yml",[12,15,18,21,24],{"label":13,"to":14},"Work","\u002Fwork\u002F",{"label":16,"to":17},"Quips","\u002Fquips\u002F",{"label":19,"to":20},"Resume","\u002Fresume\u002F",{"label":22,"to":23},"About","\u002Fabout\u002F",{"label":25,"to":26},"Contact","\u002Fcontact\u002F",{},"components\u002Fnav","Zach Cardoza","IItap6SpXhYAvCmXy9rhcYY_JN8djcGts4Wj39AiKgE",{"left":32,"top":32,"width":33,"height":33,"rotate":32,"vFlip":34,"hFlip":34,"body":35},0,24,false,"\u003Cpath fill=\"currentColor\" d=\"M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z\"\u002F>",{"left":32,"top":32,"width":33,"height":33,"rotate":32,"vFlip":34,"hFlip":34,"body":37},"\u003Cpath fill=\"currentColor\" d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z\"\u002F>",{"id":39,"emptyState":40,"extension":10,"heading":41,"intro":42,"meta":43,"seo":44,"stem":46,"__hash__":47},"pageWorkIndex\u002Fpages\u002FworkIndex.yml","Nothing here yet. Project pages will appear as they go live.","Zach's Work","Things I have built or led over the last twenty years, newest first.\n",{},{"title":13,"description":45},"Projects Zach Cardoza has led or shipped over twenty years, newest first.","pages\u002FworkIndex","P86c3xPmvBjPW_eIFjS-wTk0szoudgPlh-087t4mMZ4",[49,92,132,166,196,229,269,301,341,387,425,463],{"id":50,"title":51,"artifacts":52,"body":55,"client":73,"description":61,"employer":74,"endDate":74,"extension":75,"headline":76,"meta":77,"navigation":78,"outcomes":74,"path":79,"resumeRole":80,"role":81,"scale":74,"seo":82,"slug":83,"startDate":84,"stem":85,"teamSize":74,"techStack":86,"tldr":90,"__hash__":91},"work\u002Fwork\u002Fsignal-fire-games.md","Signal Fire Games",[53],{"label":51,"href":54},"https:\u002F\u002Fsignalfire.games",{"type":56,"value":57,"toc":68},"minimark",[58,62,65],[59,60,61],"p",{},"The premise is the one that has worked at youth groups for decades: a leader runs a quick game to break the ice or reinforce a concept, the room is the audience. The technology lift is small but the friction in the existing options was real (printed materials, manual scoring, no projection support).",[59,63,64],{},"Each game projects on the screen at the front of the room. The leader controls it from a phone or tablet, so they can stay in front of the kids instead of behind a laptop. Real-time state between control and display runs over WebSocket.",[59,66,67],{},"No monetization. Signal Fire Games is a passion project, built to serve the youth groups we are part of. It also happens to be a working demo of what Kaweah Tech can build. Several Tulare-area youth ministries are the active users. The platform runs free of charge on AWS.",{"title":69,"searchDepth":70,"depth":71,"links":72},"",2,3,[],"Kaweah Tech in-house",null,"md","Free in-browser project-and-control games designed for Christian youth groups.",{},true,"\u002Fwork\u002Fsignal-fire-games","kaweah-tech","Founder",{"title":51,"description":61},"signal-fire-games","2025-07","work\u002Fsignal-fire-games",[87,88,89],"TypeScript","Nuxt","WebSocket","Signal Fire Games is a Kaweah Tech passion project. A small collection of free in-browser games for Christian youth groups. The games project onto a screen at the front of the room while a leader controls them from a phone or tablet. Bible memory drills, sword drills, the youth-group staples. No monetization. It exists to serve the community we are part of.","Z2KUcyJQCDh1_rfcTwQ7rIAd0iC7AdoLLnz67KmSGPI",{"id":93,"title":94,"artifacts":74,"body":95,"client":74,"description":99,"employer":108,"endDate":74,"extension":75,"headline":109,"meta":110,"navigation":78,"outcomes":111,"path":115,"resumeRole":116,"role":117,"scale":118,"seo":120,"slug":121,"startDate":122,"stem":123,"teamSize":124,"techStack":125,"tldr":130,"__hash__":131},"work\u002Fwork\u002Fmanage-and-receive-care.md","Manage & Receive Care platform",{"type":56,"value":96,"toc":106},[97,100,103],[59,98,99],{},"The Referral Management System I inherited was IFP-only (Healthcare Exchange) when I picked it up. We expanded the active referral tracking out to all populations and added a new Quick Referrals workflow that lets members request referrals for specific providers on specific care paths. Quick Referrals shipped to a target set of populations, not the full universe; active referral tracking shipped to everyone. What had looked like a single project turned out to be 13 sub-projects with distinct business owners, populations, and go-live constraints. We rebaselined into 13 sub-timelines and met 11 of 13.",[59,101,102],{},"The scheduling voice agent is the most interesting current piece. It calls providers on a patient's behalf to book appointments, used for providers outside the appointment-management system. Replaces the patient sitting on hold all day. The engineering interest is in the orchestration: knowing when to escalate to a human, when to re-queue, and how to keep both the patient and the provider's office on the same page about state.",[59,104,105],{},"I am also piloting AI DLC (AI-Driven Development Life Cycle) workflows on live engineering work. The bottleneck currently is not engineering throughput. It is the upstream specification work product needs to do to feed those workflows.",{"title":69,"searchDepth":70,"depth":71,"links":107},[],"Optum (UnitedHealth Group)","Engineering for member-facing care workflows including referrals, appointment management, and an AI scheduling voice agent.",{},[112,113,114],"Active referral tracking shipped to all populations","Quick Referrals shipped to a target set of populations","11 of 13 sub-projects delivered on inherited timelines","\u002Fwork\u002Fmanage-and-receive-care","optum","Engineering Manager",[119],"Serves the full UHG member population",{"title":94,"description":99},"manage-and-receive-care","2025-05","work\u002Fmanage-and-receive-care","5 teams (3 onshore, 2 offshore)",[126,127,128,129],"Typescript","Java","AWS","PostgreSQL","I lead engineering on the Manage and Receive Care platform at Optum, with five teams under me (three onshore and two offshore). The platform covers appointment management, the referral management app (which tracks active referrals for the full UHG population and adds a Quick Referrals workflow for a target set of populations), and an AI voice agent that calls providers' offices on members' behalf so they do not have to sit on hold.","8ry3E3evN8a5ebuq0bm4qnOlJI1jpYdUbMk4qNy5qRg",{"id":133,"title":134,"artifacts":74,"body":135,"client":151,"description":139,"employer":74,"endDate":74,"extension":75,"headline":152,"meta":153,"navigation":78,"outcomes":74,"path":154,"resumeRole":80,"role":81,"scale":74,"seo":155,"slug":156,"startDate":157,"stem":158,"teamSize":74,"techStack":159,"tldr":164,"__hash__":165},"work\u002Fwork\u002Fai-fertilizer-scheduling.md","Fertilytics",{"type":56,"value":136,"toc":149},[137,140,143,146],[59,138,139],{},"The framing of Fertilytics turned out to be the right shape for an LLM tool. The farmer has the data, the operational knowledge, and the final say. The LLM is a scheduling assistant that pulls the available inputs into a single recommendation.",[59,141,142],{},"Most of the interesting engineering was on the ingestion side. The data did not come from sensors or a clean API. It came in whatever format the farmer or the agronomist had on hand: spreadsheets, CSV files, PDFs, text files, and the occasional scanned image of a soil test or a fertilizer record. Each format needed its own parsing path and its own confidence weighting before any of it reached the LLM context window. Yield spreadsheets in particular were formatted four different ways depending on which year's template happened to be in use.",[59,144,145],{},"On top of the farmer's corpus, the pipeline pulls in a sizeable chunk of Farmer's Fertilizer's side of the relationship: their product catalog backend and their own recommendation schedules. The result is that the schedule the LLM produces is weighted toward what Farmer's Fertilizer actually stocks and sells, so the farmer ends up with something they can act on with their existing supplier rather than a list of generic fertilizer names.",[59,147,148],{},"Iteration happens inside the app. The farmer can drop additional inputs, concerns, or observations into the generation area, and the next pass picks them up alongside the existing corpus and produces an updated schedule. Conditions change through the season; the schedule re-runs as they do.",{"title":69,"searchDepth":70,"depth":71,"links":150},[],"Farmer's Fertilizer","A RAG-driven fertilizer scheduling tool built for Farmer's Fertilizer.",{},"\u002Fwork\u002Fai-fertilizer-scheduling",{"title":134,"description":139},"ai-fertilizer-scheduling","2025-04","work\u002Fai-fertilizer-scheduling",[87,88,160,161,162,163],"Python","RAG pipeline","LLM orchestration","PDF generation","Fertilytics is a fertilizer scheduling tool I built at Kaweah Tech for Farmer's Fertilizer. Farmers upload whatever data they have on hand (spreadsheets, CSV files, PDFs, text files, the occasional scanned image of a soil test). A RAG pipeline ingests the corpus alongside Farmer's Fertilizer's product catalog and their own recommendation schedules, and an LLM produces a fertilizer schedule optimized for the products they actually stock. The farmer can add notes, concerns, or observations directly inside the app and re-generate as conditions change through the season.","PhHsDpphltmdpjvoyTY1gM9HPZlayfXey-T_cnn-VlY",{"id":167,"title":168,"artifacts":169,"body":172,"client":185,"description":176,"employer":74,"endDate":74,"extension":75,"headline":186,"meta":187,"navigation":78,"outcomes":74,"path":188,"resumeRole":80,"role":81,"scale":74,"seo":189,"slug":190,"startDate":191,"stem":192,"teamSize":74,"techStack":193,"tldr":194,"__hash__":195},"work\u002Fwork\u002Flicentio.md","Licentio",[170],{"label":168,"href":171},"https:\u002F\u002Flicent.io",{"type":56,"value":173,"toc":183},[174,177,180],[59,175,176],{},"The problem space is one of those quiet messes where the existing tools are spreadsheets, email reminders, and a stack of state-board PDFs printed at the supervisor's office. The licensure path for a clinical social worker varies state by state, and the supervisor often holds the only structured record of a supervisee's progress.",[59,178,179],{},"Licentio is built for the supervisee. The supervisor signs off on hours and supervisions; the supervisee owns the record. State board requirements are encoded; renewal deadlines are tracked; exam prep tracks alongside the practice hours.",[59,181,182],{},"This is the first Kaweah Tech in-house product designed for organic recurring revenue. The launch motion starts with a social-media operator joining the project in mid-2026. The longer-term goal is revenue sufficient to support a full-time exit from Optum into entrepreneurship, with Kaweah Tech consulting providing the bridge.",{"title":69,"searchDepth":70,"depth":71,"links":184},[],"Kaweah Tech in-house product","A licensure-tracking application for clinical social workers and other therapy professionals.",{},"\u002Fwork\u002Flicentio",{"title":168,"description":176},"licentio","2025-01","work\u002Flicentio",[87,88,129,128],"Licentio is a licensure tracker for therapy professionals working toward state licensure. It tracks supervision hours, exam prep, application requirements, and renewal deadlines across the U.S. state boards. Launching in 2026. It is also the first Kaweah Tech product designed to earn recurring revenue on its own, rather than to serve a single client.","Y5yJtepii_8SS7qZE-ek9R3ioGmNJ4aum32M3Z-Y0oc",{"id":197,"title":198,"artifacts":74,"body":199,"client":215,"description":203,"employer":74,"endDate":216,"extension":75,"headline":217,"meta":218,"navigation":78,"outcomes":74,"path":219,"resumeRole":80,"role":81,"scale":74,"seo":220,"slug":221,"startDate":222,"stem":223,"teamSize":74,"techStack":224,"tldr":227,"__hash__":228},"work\u002Fwork\u002Frobotics-path-optimization.md","Robotics path optimization",{"type":56,"value":200,"toc":213},[201,204,207,210],[59,202,203],{},"Most path-planning work starts with a known robot and a known field. This one started with neither. The client had a target robot in design, but most of its operating parameters had not been measured because the prototype was not finished. The field they were considering was real land, but row spacing, headland geometry, and gate access were all still in flux. We were doing path planning before any of the inputs to path planning existed.",[59,205,206],{},"The client gave me the dimensions of the ideal robot they were designing (chassis, wheelbase, hitch position, and the trailer it was meant to pull). From there I worked out the operating envelope: speeds for unloaded and loaded operation, the turning radius at each load condition, and the trajectory the trailer would track behind the tractor through a turn.",[59,208,209],{},"Once the envelope was in place, the Jupyter notebook compared a few path-planning approaches against a parameterized field model so the client could see the trade-offs side by side. Coverage rate against turn count. Path length against headland margin. The output was a recommended fleet size, a recommended path pattern, and a sensitivity analysis showing which inputs mattered most: which robot dimensions, which field configurations.",[59,211,212],{},"The engagement was a one-off. The notebook and the writeup went to the client. What they do with it from here is up to them.",{"title":69,"searchDepth":70,"depth":71,"links":214},[],"Automated farm-management startup (anonymized)","2024-11","Working out the operating limits of a robot that did not exist yet, then planning its routes.",{},"\u002Fwork\u002Frobotics-path-optimization",{"title":198,"description":203},"robotics-path-optimization","2024-09","work\u002Frobotics-path-optimization",[160,225,226],"Jupyter","Optimization libraries","A Python and Jupyter study I built at Kaweah Tech for an early-stage automated farm-management startup. The client had a target robot in design, but most of its operating parameters had not been measured because the prototype was not finished. From the ideal-robot dimensions, we worked out the operating envelope (speeds for unloaded and loaded operation, turning radii, and the trailer tracking paths through a turn) and then used the derived envelope to plan optimal coverage on the field they were considering. The notebook walked through robot count and field suitability for the operation as the client had described it.","SzQpE3EVI0ns8OTKzH4lm5TwifTKYVML7NAc4fRw4K8",{"id":230,"title":231,"artifacts":74,"body":232,"client":74,"description":236,"employer":108,"endDate":245,"extension":75,"headline":246,"meta":247,"navigation":78,"outcomes":248,"path":252,"resumeRole":116,"role":117,"scale":253,"seo":257,"slug":258,"startDate":259,"stem":260,"teamSize":261,"techStack":262,"tldr":267,"__hash__":268},"work\u002Fwork\u002Fdirectory-modernization.md","Directory Modernization",{"type":56,"value":233,"toc":243},[234,237,240],[59,235,236],{},"The legacy pipeline was a weekly FTP-and-flat-file batch model that left provider data two weeks stale at the worst end. The new architecture is a continuous Kafka-driven event stream that processes updates as they arrive.",[59,238,239],{},"We ran the migration in two phases. Phase one was the ENI population (Individual and Family, Employer-Individual), roughly a third of the provider universe; it ran zero-downtime, parallel-execution-in-production, with output diffing to confirm equal-or-better data quality. Phase two covered the remaining 70% of the population in three months, accommodating per-population credential listing rules, Medicare and Medicaid specific data requirements, and the long tail of provider data normalization. We negotiated 13 additional offshore engineers to make the phase-two timeline achievable.",[59,241,242],{},"The hardest part was not the architecture; it was the data. Six months of negotiating the long tail of edge cases in provider records across multiple acquired companies. The result is the highest-quality provider directory in the network.",{"title":69,"searchDepth":70,"depth":71,"links":244},[],"2024-06","Replaced a weekly batch provider data pipeline with a Kafka event stream serving 50M+ members.",{},[249,250,251],"Latency dropped from two weeks to four hours","Delivered one week ahead of schedule, zero downtime","$1.2M per month in processing savings","\u002Fwork\u002Fdirectory-modernization",[254,255,256],"3.2M provider record updates per day","1.7M providers searchable","50M+ members served",{"title":231,"description":236},"directory-modernization","2023-09","work\u002Fdirectory-modernization","7 to 20 engineers (core team plus offshore for phase 2)",[263,264,128,265,129,266],"Scala","Kafka","Elasticsearch","Kubernetes","At Optum I led the team that rebuilt the provider data pipeline. The old one was a weekly file-based batch. The new one is a continuous Kafka stream. It processes 3.2 million provider updates a day, cut update latency from two weeks down to four hours, and serves provider search to about 50 million members across 1.7 million providers. We landed it a week ahead of schedule, with zero downtime, and it saves the company roughly $1.2 million a month in processing costs.","nUnA1_3zen7rT1bo_8QQZJ4UMP91tTczdyVca26ZszA",{"id":270,"title":271,"artifacts":74,"body":272,"client":285,"description":276,"employer":74,"endDate":74,"extension":75,"headline":286,"meta":287,"navigation":78,"outcomes":288,"path":291,"resumeRole":80,"role":81,"scale":292,"seo":294,"slug":295,"startDate":296,"stem":297,"teamSize":74,"techStack":298,"tldr":299,"__hash__":300},"work\u002Fwork\u002Fcotton-order-management.md","R.M. King Work Order Management",{"type":56,"value":273,"toc":283},[274,277,280],[59,275,276],{},"The original problem was paper. Field reps wrote work orders on paper packets. Orders moved through the shop in paper folders. Status updates were tracked on a hand-maintained whiteboard. The first version of the platform replaced the packets with a mobile-first order entry app and the whiteboard with a status dashboard.",[59,278,279],{},"The interesting work since then has been the follow-on modules. The Exchange Module handles straight-across parts exchanges in lieu of rework, which previously required full manual reconciliation. The Reporting Module added the dashboards the operations team needed to actually run the shop. The Partial Rework Module supports small scoped reworks on individual pieces rather than full heads.",[59,281,282],{},"Ongoing relationship with R.M. King. The system now runs operations across both facilities, same workflow, same data model, with location-specific configuration for the differences between Fresno and Moultrie.",{"title":69,"searchDepth":70,"depth":71,"links":284},[],"R.M. King","Work Order Management for R.M. King, the platform that runs cotton picker head rework operations in Fresno and Moultrie.",{},[289,290],"Replaced a paper-based work order workflow","Expanded into Exchange, Reporting, and Partial Rework modules over time","\u002Fwork\u002Fcotton-order-management",[293],"Runs shop operations across two facilities (Fresno and Moultrie)",{"title":271,"description":276},"cotton-order-management","2022-08","work\u002Fcotton-order-management",[87,88,129,128],"The Work Order Management system I built at Kaweah Tech for R.M. King, a cotton picker head rework shop. Field reps enter work orders into phones and tablets. Orders track equipment intake, through-shop status, and customer delivery. The system has grown into Exchange, Reporting, and Partial Rework modules since the original build, and now runs shop operations across both R.M. King facilities in Fresno and Moultrie.","mhkatURAbezLzcuzsyLSYXD38FgD_QQk4z1KTu8FGVw",{"id":302,"title":303,"artifacts":74,"body":304,"client":74,"description":308,"employer":317,"endDate":318,"extension":75,"headline":319,"meta":320,"navigation":78,"outcomes":321,"path":324,"resumeRole":325,"role":326,"scale":327,"seo":329,"slug":330,"startDate":331,"stem":332,"teamSize":333,"techStack":334,"tldr":339,"__hash__":340},"work\u002Fwork\u002Fconnected-strength-platform.md","Connected strength platform",{"type":56,"value":305,"toc":315},[306,309,312],[59,307,308],{},"The platform was a ground-up redesign of Keiser's strength equipment. Full-cylinder force transducers (force plus position) measured the work the user was doing in real time; a large sweat-resistant touchscreen rendered the live workout data. Custom PoE extraction boards, control boards, and high-rate analog-to-digital buffer boards supported the display's polling architecture. The touchscreen included a camera (facial recognition) and a fingerprint reader for member identification.",[59,310,311],{},"I served as the technical lead and a hands-on engineer through the build. The test units deployed to elite military training programs (Air Force Special Forces, U.S. Army), an Olympic training center, a North Carolina installation, and a senior-living community. A reduced variant later shipped with the new touchscreen display retrofitted onto existing equipment.",[59,313,314],{},"The hardest engineering problem was not the hardware. It was synchronizing the rep-data stream from the equipment with member-identity sessions in a way that survived flaky gym wifi and intermittent power. We landed on a buffered local-first model with cloud reconciliation, which is the same pattern most fitness-equipment platforms have converged on since.",{"title":69,"searchDepth":70,"depth":71,"links":316},[],"Keiser Corporation","2022-05","Led engineering on Keiser's most ambitious connected-strength platform. PWM-controlled pneumatics, PoE touchscreens, biometric identification, real-time rep streaming.",{},[322,323],"Deployed to U.S. Air Force Special Forces, U.S. Army, an Olympic training center, and other research sites","Streaming rep data architecture proven in field deployment","\u002Fwork\u002Fconnected-strength-platform","keiser-itm","Integrated Technology Manager",[328],"~100 test units deployed for evaluation",{"title":303,"description":308},"connected-strength-platform","2018-01","work\u002Fconnected-strength-platform","7 engineers (software) plus cross-functional electrical engineering",[127,335,87,336,89,337,338],"C++","Vue.js","SQLite","WASM","As Integrated Technology Manager at Keiser I led engineering on the most ambitious connected-strength platform the company ever attempted. It replaced manual pressure regulators with PWM-controlled electronic air valves, ran touchscreens off Power over Ethernet, and identified members by face and fingerprint. Rep data streamed to the cloud in real time. About a hundred test units went out to U.S. Air Force Special Forces, the U.S. Army, an Olympic training center, and a handful of other research sites.","eyOyJ4cM7kpJ5qhccguHy_hn8AoeavIiNaxXTovs9O0",{"id":342,"title":343,"artifacts":344,"body":354,"client":74,"description":358,"employer":317,"endDate":370,"extension":75,"headline":371,"meta":372,"navigation":78,"outcomes":74,"path":373,"resumeRole":374,"role":375,"scale":74,"seo":376,"slug":377,"startDate":378,"stem":379,"teamSize":74,"techStack":380,"tldr":385,"__hash__":386},"work\u002Fwork\u002Fechip-1-wire-js.md","eChip and 1-Wire-JS",[345,348,351],{"label":346,"href":347},"1-Wire-JS on npm","https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F1-wire-js",{"label":349,"href":350},"1-Wire-JS source","https:\u002F\u002Fgithub.com\u002FKeiserCorp\u002F1-Wire-JS",{"label":352,"href":353},"Keiser.Air.eChip.WebUSB source","https:\u002F\u002Fgithub.com\u002FKeiserCorp\u002FKeiser.Air.eChip.WebUSB",{"type":56,"value":355,"toc":368},[356,359,362,365],[59,357,358],{},"The eChip is Keiser's smart-key identity hardware, originally an iButton repurposed into a workout-data storage chip. The legacy tooling was Delphi-only, which made it impossible to extend the platform onto modern web or mobile surfaces. The path forward was a JavaScript stack.",[59,360,361],{},"1-Wire-JS implements the Maxim 1-Wire protocol in pure JavaScript. The library handles the timing-sensitive bus arbitration, CRC checks, and search-tree operations the 1-Wire spec requires, on top of a USB transport. The original USB driver was built for WebUSB so the eChip could be read from a browser tab; we later ported it to Node.js for the headless workflows.",[59,363,364],{},"The eChip library is the higher-level abstraction: typed records for workout data, default value handling, and the fault-tolerance behavior the hardware actually needs in a field environment. The workout-data protocol stored on eChips became the standard format machines on the strength line read and wrote across the product family.",[59,366,367],{},"Both libraries are still published on npm and the source remains on the Keiser GitHub organization.",{"title":69,"searchDepth":70,"depth":71,"links":369},[],"2016-08","Open-source JavaScript libraries for talking to smart-key identity hardware. Originally targeted WebUSB; later ported to Node.",{},"\u002Fwork\u002Fechip-1-wire-js","keiser-se","Software Engineer",{"title":343,"description":358},"echip-1-wire-js","2014-01","work\u002Fechip-1-wire-js",[381,87,382,383,384],"JavaScript","WebUSB","Node.js","1-Wire protocol","I replaced Keiser's legacy Delphi-only iButton tooling with a JavaScript stack. I wrote the USB driver, the 1-Wire-JS protocol library, and a higher-level eChip library that handles the data structures, default values, and the fault tolerance the hardware actually needs in the field. Both libraries were open-sourced and are still published on npm. Originally built against WebUSB. Later ported to Node.js for the headless workflows.","8TepsKcELyu6r3oDQ6m2siUPZJOQIJaW8WjkmXauRps",{"id":388,"title":389,"artifacts":390,"body":394,"client":74,"description":398,"employer":317,"endDate":407,"extension":75,"headline":408,"meta":409,"navigation":78,"outcomes":410,"path":413,"resumeRole":374,"role":375,"scale":414,"seo":416,"slug":417,"startDate":418,"stem":419,"teamSize":74,"techStack":420,"tldr":423,"__hash__":424},"work\u002Fwork\u002Fftms.md","Bluetooth FTMS",[391],{"label":392,"href":393},"Bluetooth FTMS specification","https:\u002F\u002Fwww.bluetooth.com\u002Fspecifications\u002Fspecs\u002Ffitness-machine-service-1-0\u002F",{"type":56,"value":395,"toc":405},[396,399,402],[59,397,398],{},"The original problem was practical: Keiser was building Bluetooth-enabled fitness equipment and there was no standard protocol for the category. Bluetooth and ANT both existed; neither had a profile that fit. I briefed the founder, Dennis Keiser, on the gap and was sent to represent the company on the Bluetooth SIG Health and Fitness Working Group.",[59,400,401],{},"I traveled to Amsterdam for the working group meetings, mostly during the proposal phase around 2013 and 2014, and proposed what eventually became FTMS and FTMP, along with related profiles. The final ratified spec went through additional final-testing phases I was not involved in directly. The current spec is broadly recognizable as the structure we proposed.",[59,403,404],{},"Co-developed alongside engineers from Nordic Semiconductor, Garmin, and others. The Personal Identifier profile and adjacent test protocols (heart-rate calculations, FTP tests, kilocalorie calculations) all came out of the same working group's effort.",{"title":69,"searchDepth":70,"depth":71,"links":406},[],"2017-12","Co-developed the Fitness Machine Service GATT specification, now used industry-wide.",{},[411,412],"GATT specification ratified by the Bluetooth SIG","Used industry-wide by fitness equipment manufacturers","\u002Fwork\u002Fftms",[415],"Adopted as the industry standard for connected fitness equipment",{"title":389,"description":398},"ftms","2013-01","work\u002Fftms",[421,422],"Bluetooth Low Energy","GATT profiles","I represented Keiser on the Bluetooth SIG Health and Fitness Working Group from 2013 through 2017. The specification I helped write became FTMS and FTMP, the GATT services that fitness equipment manufacturers now use to talk to phones and apps. The whole thing started with a briefing I gave Keiser's founder, explaining why no Bluetooth profile suitable for fitness equipment existed yet.","divD6H8LGwyw6Dl-9S_luhqZVnqdtBKn1TUIJ9t9Rsw",{"id":426,"title":427,"artifacts":74,"body":428,"client":74,"description":432,"employer":317,"endDate":441,"extension":75,"headline":442,"meta":443,"navigation":78,"outcomes":444,"path":447,"resumeRole":374,"role":375,"scale":448,"seo":454,"slug":455,"startDate":418,"stem":456,"teamSize":74,"techStack":457,"tldr":461,"__hash__":462},"work\u002Fwork\u002Fkeiser-m3i.md","Keiser M3i",{"type":56,"value":429,"toc":439},[430,433,436],[59,431,432],{},"There was no off-the-shelf protocol that fit what the M3i needed: real-time telemetry from a room full of bikes to a single receiver. The contracting electrical engineer and I co-developed a custom broadcast-only Bluetooth protocol that used the three BT broadcast channels, capable of supporting up to 254 simultaneous bikes per class (256 minus reserved IDs). Built on custom Nordic NRF52 firmware initially. Later commoditized to off-the-shelf hardware sourced from China after iPhone iBeacon broadcasts started causing collisions in the original receivers.",[59,434,435],{},"The in-class projection system reads telemetry from every bike in the room and renders dials, leaderboards, and per-rider metrics on a projector or display. The consumer companion apps were a separate workstream: simple bike pairing, workout history, and stats sharing. They reached around 250,000 organic downloads without marketing spend, which surprised everyone.",[59,437,438],{},"Industry-partnership trainer apps followed: tools that let professional sports trainers walk a room and see live per-bike telemetry on their phones. The partnerships I worked through during this period spanned most of the Premier League, most of the Bundesliga, the Spanish soccer leagues, and the majority of US professional sports teams (with a few notable exceptions). The M3i itself eventually became the standard bike at LA Fitness and Orangetheory Fitness, and the bike of choice for most independent spin studios.",{"title":69,"searchDepth":70,"depth":71,"links":440},[],"2018-12","Shipped Keiser's first Bluetooth-enabled indoor cycling bike, one of the earliest BLE consumer devices. 200,000+ units sold.",{},[445,446],"One of the earliest Bluetooth 4.0 (BLE) consumer devices on the market","Around 250,000 organic downloads of the consumer companion apps","\u002Fwork\u002Fkeiser-m3i",[449,450,451,452,453],"200,000+ units sold","Class systems support up to 254 simultaneous bikes","Standard bike at LA Fitness and Orangetheory Fitness","Bike of choice for most independent spin studios","Best-selling indoor cycling bike in the world at peak",{"title":427,"description":432},"keiser-m3i","work\u002Fkeiser-m3i",[421,458,459,460],"Custom broadcast protocol","Nordic NRF52 firmware","iOS, Android","I co-developed the broadcast Bluetooth protocol that powers the Keiser M3i indoor cycling bike, working alongside Keiser's contracting electrical engineer. The protocol uses the three Bluetooth broadcast channels to carry real-time telemetry from as many as 254 bikes in a single class. I also built the iOS and Android companion apps, which reached around a quarter million downloads without any marketing spend behind them.","0a7-kdF26kf1fj112taqI_NrX_gZV-IJ48TRI_CK2KU",{"id":464,"title":465,"artifacts":74,"body":466,"client":74,"description":470,"employer":479,"endDate":480,"extension":75,"headline":481,"meta":482,"navigation":78,"outcomes":74,"path":483,"resumeRole":484,"role":485,"scale":74,"seo":486,"slug":487,"startDate":488,"stem":489,"teamSize":74,"techStack":490,"tldr":494,"__hash__":495},"work\u002Fwork\u002Fbest-buy-ipad-qualification.md","Best Buy iPad customer-qualification app",{"type":56,"value":467,"toc":477},[468,471,474],[59,469,470],{},"Customer-qualification packets at Best Buy were a stack of paper forms a sales associate walked through with each customer (what computer do you need, what do you use it for, what's your budget, will you need anti-virus or accessories). Each department had its own packet. Most associates skipped fields because the forms were long and the line behind the customer was longer.",[59,472,473],{},"The iPad app reproduced the qualification flows on screen with conditional logic, so an associate only saw the questions that mattered for the situation. The local server in the store's back-office ran the app and stored the data; the iPad pulled it by IP. At the end of the flow, the system printed the completed values back onto the existing paper forms so the rest of the operations chain (inventory pulls, invoicing, install scheduling) did not need to change.",[59,475,476],{},"My home store rolled it out, and a handful of other stores adopted it through ad-hoc personal distribution. Best Buy corporate did not pick up the original, but released a larger official equivalent several years later. The work taught me how much of \"shipping software\" is making sure the broader system around it does not have to change at the same time.",{"title":69,"searchDepth":70,"depth":71,"links":478},[],"Best Buy","2012-06","Replaced paper customer-qualification packets with a tablet app across multiple in-store departments.",{},"\u002Fwork\u002Fbest-buy-ipad-qualification","best-buy","Interactive Technology Support",{"title":465,"description":470},"best-buy-ipad-qualification","2010-01","work\u002Fbest-buy-ipad-qualification",[491,492,493],"HTML5","PHP","iPad","An HTML5 plus PHP iPad app I built at Best Buy to replace the paper customer-qualification packets used by Computer, Geek Squad, Car Audio, Home Theater, and Photo. The app ran on a little server in the store's back-office closet, and the iPads pulled it down by IP. When a sales associate finished a qualification, the app printed the answers back onto the existing paper forms so nothing downstream in the operations chain had to change.","_OZQ2OyoOfjjekuvhw2VGzIypFUjnVOxYqO6qbQ4CkM",{"id":497,"copyrightName":29,"extension":10,"links":498,"meta":522,"stem":523,"__hash__":524},"componentFooter\u002Fcomponents\u002Ffooter.yml",[499,505,509,514,518],{"label":500,"href":501,"icon":502,"target":503,"rel":504},"GitHub","https:\u002F\u002Fgithub.com\u002Fnerdoza","mdi:github","_blank","me noopener",{"label":506,"href":507,"icon":508,"target":503,"rel":504},"LinkedIn","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fzacharycardoza\u002F","mdi:linkedin",{"label":510,"href":511,"icon":512,"target":503,"rel":513},"Kaweah Tech","https:\u002F\u002Fkaweah.tech","nerdoza:kaweah-tech","noopener",{"label":515,"href":516,"icon":517},"Email","mailto:zach@zachcardoza.com","mdi:email-outline",{"label":519,"href":520,"icon":521},"RSS","\u002Fquips\u002Frss.xml","mdi:rss",{},"components\u002Ffooter","Y0itPvA7MyB6U2n--fsXkYzDRwjU7MTusv0PAO4zsY0",{"id":526,"byline":527,"extension":10,"formalName":528,"location":529,"meta":530,"name":29,"stem":531,"__hash__":532},"componentIdentity\u002Fcomponents\u002Fidentity.yml","Eng Mgr @ Optum · Founder @ Kaweah Tech","Zachary Cardoza","Tulare, CA",{},"components\u002Fidentity","n5Jp9qm_RYhiJn_6K6LS2baFqi6xHTxTjz6kQRuNY_k",{"left":32,"top":32,"width":33,"height":33,"rotate":32,"vFlip":34,"hFlip":34,"body":534},"\u003Cpath fill=\"currentColor\" d=\"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2\"\u002F>",{"left":32,"top":32,"width":33,"height":33,"rotate":32,"vFlip":34,"hFlip":34,"body":536},"\u003Cpath fill=\"currentColor\" d=\"M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2zm-.5 15.5v-5.3a3.26 3.26 0 0 0-3.26-3.26c-.85 0-1.84.52-2.32 1.3v-1.11h-2.79v8.37h2.79v-4.93c0-.77.62-1.4 1.39-1.4a1.4 1.4 0 0 1 1.4 1.4v4.93zM6.88 8.56a1.68 1.68 0 0 0 1.68-1.68c0-.93-.75-1.69-1.68-1.69a1.69 1.69 0 0 0-1.69 1.69c0 .93.76 1.68 1.69 1.68m1.39 9.94v-8.37H5.5v8.37z\"\u002F>",{"left":32,"top":32,"width":538,"height":539,"rotate":32,"vFlip":34,"hFlip":34,"body":540},467,450,"\u003Cg fill=\"none\">\u003Cpath fill=\"currentColor\" d=\"M165.4 6.2a12.5 12.5 0 0 0-21.7 0L26.8 208h-.7a26.1 26.1 0 1 0 22.4 12.6l106-183.2 106.1 183.2a26.1 26.1 0 1 0 21.6-12.5L165.5 6.1Z\"\u002F>\u003Cpath fill=\"currentColor\" d=\"M453.8 328a12.5 12.5 0 0 0 10.9-18.8L348.4 107.1l.4-.6a26.1 26.1 0 1 0-22 13L432.1 303l-211.6.3a26.1 26.1 0 1 0 0 25l233.2-.3Z\"\u002F>\u003Cpath fill=\"currentColor\" d=\"M30 429.7a12.5 12.5 0 0 1 0-12.5l116.3-202.1-.3-.6a26.1 26.1 0 1 1 22 13L62.5 411l211.6.3a26.1 26.1 0 1 1 0 25.2v-.2L40.8 436c-4.5 0-8.6-2.3-10.8-6.2Z\"\u002F>\u003C\u002Fg>",{"left":32,"top":32,"width":33,"height":33,"rotate":32,"vFlip":34,"hFlip":34,"body":542},"\u003Cpath fill=\"currentColor\" d=\"M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2zm-2 0l-8 5l-8-5zm0 12H4V8l8 5l8-5z\"\u002F>",{"left":32,"top":32,"width":33,"height":33,"rotate":32,"vFlip":34,"hFlip":34,"body":544},"\u003Cpath fill=\"currentColor\" d=\"M6.18 15.64a2.18 2.18 0 0 1 2.18 2.18C8.36 19 7.38 20 6.18 20C5 20 4 19 4 17.82a2.18 2.18 0 0 1 2.18-2.18M4 4.44A15.56 15.56 0 0 1 19.56 20h-2.83A12.73 12.73 0 0 0 4 7.27zm0 5.66a9.9 9.9 0 0 1 9.9 9.9h-2.83A7.07 7.07 0 0 0 4 12.93z\"\u002F>",1781203292783]