[{"data":1,"prerenderedAt":285},["ShallowReactive",2],{"blog-post-iot-production":3,"content-query-LVYzcD9DTo":176},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"img":10,"tags":11,"order":16,"body":17,"_type":170,"_id":171,"_source":172,"_file":173,"_stem":174,"_extension":175},"\u002Fblog\u002Fpost-iot-production","blog",false,"","Shipping IoT past the demo: lessons from production platforms","How to move from ESP32 blink demos to reliable device fleets — connectivity, observability, and boring infrastructure.","blog\u002Fesp.jpeg",[12,13,14,15],"iot","embedded","production","engineering",12,{"type":18,"children":19,"toc":164},"root",[20,30,38,44,51,87,93,143,149,154],{"type":21,"tag":22,"props":23,"children":29},"element","img",{"src":24,"alt":25,"className":26},"\u002Fblog\u002Fesp.jpeg","IoT production",[27,28],"rounded-t-lg","max-h-[28rem]",[],{"type":21,"tag":31,"props":32,"children":34},"h1",{"id":33},"shipping-iot-past-the-demo",[35],{"type":36,"value":37},"text","Shipping IoT past the demo",{"type":21,"tag":39,"props":40,"children":41},"p",{},[42],{"type":36,"value":43},"Blinking an LED on an ESP32 is fun. Keeping thousands of devices online, authenticated, and diagnosable is a different sport.",{"type":21,"tag":45,"props":46,"children":48},"h2",{"id":47},"the-gaps-demos-hide",[49],{"type":36,"value":50},"The gaps demos hide",{"type":21,"tag":52,"props":53,"children":54},"ul",{},[55,67,77],{"type":21,"tag":56,"props":57,"children":58},"li",{},[59,65],{"type":21,"tag":60,"props":61,"children":62},"strong",{},[63],{"type":36,"value":64},"Connectivity is intermittent",{"type":36,"value":66}," — your happy-path Wi-Fi lab is not a farm, factory floor, or apartment with CGNAT.",{"type":21,"tag":56,"props":68,"children":69},{},[70,75],{"type":21,"tag":60,"props":71,"children":72},{},[73],{"type":36,"value":74},"Firmware must be updatable",{"type":36,"value":76}," — without brick risk and without manual USB visits.",{"type":21,"tag":56,"props":78,"children":79},{},[80,85],{"type":21,"tag":60,"props":81,"children":82},{},[83],{"type":36,"value":84},"Observability beats guessing",{"type":36,"value":86}," — device ID, last-seen, firmware version, and error codes should be first-class.",{"type":21,"tag":45,"props":88,"children":90},{"id":89},"patterns-that-held-up-for-me",[91],{"type":36,"value":92},"Patterns that held up for me",{"type":21,"tag":94,"props":95,"children":96},"ol",{},[97,102,107,133,138],{"type":21,"tag":56,"props":98,"children":99},{},[100],{"type":36,"value":101},"Treat the cloud API as a product with versioning, not a quick Firebase dump.",{"type":21,"tag":56,"props":103,"children":104},{},[105],{"type":36,"value":106},"Design for offline buffering on the device when the business allows it.",{"type":21,"tag":56,"props":108,"children":109},{},[110,112,117,119,124,126,131],{"type":36,"value":111},"Separate ",{"type":21,"tag":60,"props":113,"children":114},{},[115],{"type":36,"value":116},"ingest",{"type":36,"value":118},", ",{"type":21,"tag":60,"props":120,"children":121},{},[122],{"type":36,"value":123},"storage",{"type":36,"value":125},", and ",{"type":21,"tag":60,"props":127,"children":128},{},[129],{"type":36,"value":130},"visualization",{"type":36,"value":132}," so dashboards do not block telemetry.",{"type":21,"tag":56,"props":134,"children":135},{},[136],{"type":36,"value":137},"Automate provisioning — QR\u002Fclaim codes beat copying secrets by hand.",{"type":21,"tag":56,"props":139,"children":140},{},[141],{"type":36,"value":142},"Prefer boring infrastructure (Docker, Postgres, clear metrics) over clever one-offs.",{"type":21,"tag":45,"props":144,"children":146},{"id":145},"where-embedded-meets-product-engineering",[147],{"type":36,"value":148},"Where embedded meets product engineering",{"type":21,"tag":39,"props":150,"children":151},{},[152],{"type":36,"value":153},"The best IoT products are full-stack: firmware, backends, and UIs that tell operators what to do next. That is the work I enjoy most — whether the domain is agriculture sensors, industrial monitoring, or consumer devices.",{"type":21,"tag":39,"props":155,"children":156},{},[157],{"type":21,"tag":158,"props":159,"children":161},"a",{"href":160},"\u002Fcontact?interest=product",[162],{"type":36,"value":163},"Talk about product \u002F IoT engineering →",{"title":7,"searchDepth":165,"depth":165,"links":166},2,[167,168,169],{"id":47,"depth":165,"text":50},{"id":89,"depth":165,"text":92},{"id":145,"depth":165,"text":148},"markdown","content:blog:post-iot-production.md","content","blog\u002Fpost-iot-production.md","blog\u002Fpost-iot-production","md",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"img":10,"tags":177,"order":16,"body":178,"_type":170,"_id":171,"_source":172,"_file":173,"_stem":174,"_extension":175},[12,13,14,15],{"type":18,"children":179,"toc":280},[180,184,188,192,196,223,227,265,269,273],{"type":21,"tag":22,"props":181,"children":183},{"src":24,"alt":25,"className":182},[27,28],[],{"type":21,"tag":31,"props":185,"children":186},{"id":33},[187],{"type":36,"value":37},{"type":21,"tag":39,"props":189,"children":190},{},[191],{"type":36,"value":43},{"type":21,"tag":45,"props":193,"children":194},{"id":47},[195],{"type":36,"value":50},{"type":21,"tag":52,"props":197,"children":198},{},[199,207,215],{"type":21,"tag":56,"props":200,"children":201},{},[202,206],{"type":21,"tag":60,"props":203,"children":204},{},[205],{"type":36,"value":64},{"type":36,"value":66},{"type":21,"tag":56,"props":208,"children":209},{},[210,214],{"type":21,"tag":60,"props":211,"children":212},{},[213],{"type":36,"value":74},{"type":36,"value":76},{"type":21,"tag":56,"props":216,"children":217},{},[218,222],{"type":21,"tag":60,"props":219,"children":220},{},[221],{"type":36,"value":84},{"type":36,"value":86},{"type":21,"tag":45,"props":224,"children":225},{"id":89},[226],{"type":36,"value":92},{"type":21,"tag":94,"props":228,"children":229},{},[230,234,238,257,261],{"type":21,"tag":56,"props":231,"children":232},{},[233],{"type":36,"value":101},{"type":21,"tag":56,"props":235,"children":236},{},[237],{"type":36,"value":106},{"type":21,"tag":56,"props":239,"children":240},{},[241,242,246,247,251,252,256],{"type":36,"value":111},{"type":21,"tag":60,"props":243,"children":244},{},[245],{"type":36,"value":116},{"type":36,"value":118},{"type":21,"tag":60,"props":248,"children":249},{},[250],{"type":36,"value":123},{"type":36,"value":125},{"type":21,"tag":60,"props":253,"children":254},{},[255],{"type":36,"value":130},{"type":36,"value":132},{"type":21,"tag":56,"props":258,"children":259},{},[260],{"type":36,"value":137},{"type":21,"tag":56,"props":262,"children":263},{},[264],{"type":36,"value":142},{"type":21,"tag":45,"props":266,"children":267},{"id":145},[268],{"type":36,"value":148},{"type":21,"tag":39,"props":270,"children":271},{},[272],{"type":36,"value":153},{"type":21,"tag":39,"props":274,"children":275},{},[276],{"type":21,"tag":158,"props":277,"children":278},{"href":160},[279],{"type":36,"value":163},{"title":7,"searchDepth":165,"depth":165,"links":281},[282,283,284],{"id":47,"depth":165,"text":50},{"id":89,"depth":165,"text":92},{"id":145,"depth":165,"text":148},1791356687686]