[{"data":1,"prerenderedAt":803},["ShallowReactive",2],{"content-query-RVZDBGufCA":3},[4,171,312,460,609],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"img":11,"tags":12,"order":16,"body":17,"_type":165,"_id":166,"_source":167,"_file":168,"_stem":169,"_extension":170},"\u002Fblog\u002Fpost-2","blog",false,"","Getting started with ESP32","ESP32 features and a minimal PlatformIO blink setup for IoT prototypes.","blog\u002Fesp.jpeg",[13,14,15],"esp32","iot","embedded",2,{"type":18,"children":19,"toc":161},"root",[20,34,41,46,53,78,84,97,108,116,127,138,147],{"type":21,"tag":22,"props":23,"children":24},"element","p",{},[25],{"type":21,"tag":26,"props":27,"children":33},"img",{"src":28,"alt":29,"className":30},"\u002Fblog\u002Fesp.jpeg","ESP32",[31,32],"rounded-t-lg","max-h-[28rem]",[],{"type":21,"tag":35,"props":36,"children":38},"h1",{"id":37},"getting-started-with-esp32",[39],{"type":40,"value":9},"text",{"type":21,"tag":22,"props":42,"children":43},{},[44],{"type":40,"value":45},"The ESP32 is a low-cost SoC with Wi-Fi and Bluetooth, dual-core Tensilica cores (up to 240 MHz), and a rich set of peripherals. It is a strong default for IoT prototypes that may later grow into production fleets.",{"type":21,"tag":47,"props":48,"children":50},"h2",{"id":49},"why-teams-pick-it",[51],{"type":40,"value":52},"Why teams pick it",{"type":21,"tag":54,"props":55,"children":56},"ul",{},[57,63,68,73],{"type":21,"tag":58,"props":59,"children":60},"li",{},[61],{"type":40,"value":62},"Built-in Wi-Fi and BLE",{"type":21,"tag":58,"props":64,"children":65},{},[66],{"type":40,"value":67},"Enough RAM\u002FCPU for sensors + protocols without an immediate Linux SBC",{"type":21,"tag":58,"props":69,"children":70},{},[71],{"type":40,"value":72},"Huge community and PlatformIO support",{"type":21,"tag":58,"props":74,"children":75},{},[76],{"type":40,"value":77},"Low enough cost to instrument many devices",{"type":21,"tag":47,"props":79,"children":81},{"id":80},"minimal-platformio-setup",[82],{"type":40,"value":83},"Minimal PlatformIO setup",{"type":21,"tag":85,"props":86,"children":91},"pre",{"code":87,"language":88,"meta":8,"className":89},"pip install platformio\nmkdir my_esp32_project\ncd my_esp32_project\npio project init --board esp32dev\n","bash",[90],"language-bash",[92],{"type":21,"tag":93,"props":94,"children":95},"code",{"__ignoreMap":8},[96],{"type":40,"value":87},{"type":21,"tag":22,"props":98,"children":99},{},[100,106],{"type":21,"tag":93,"props":101,"children":103},{"className":102},[],[104],{"type":40,"value":105},"platformio.ini",{"type":40,"value":107},":",{"type":21,"tag":85,"props":109,"children":111},{"code":110},"[env:esp32dev]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\n",[112],{"type":21,"tag":93,"props":113,"children":114},{"__ignoreMap":8},[115],{"type":40,"value":110},{"type":21,"tag":22,"props":117,"children":118},{},[119,125],{"type":21,"tag":93,"props":120,"children":122},{"className":121},[],[123],{"type":40,"value":124},"src\u002Fmain.cpp",{"type":40,"value":126}," blink:",{"type":21,"tag":85,"props":128,"children":133},{"code":129,"language":130,"meta":8,"className":131},"#include \u003CArduino.h>\n\nvoid setup() {\n    pinMode(LED_BUILTIN, OUTPUT);\n}\n\nvoid loop() {\n    digitalWrite(LED_BUILTIN, HIGH);\n    delay(1000);\n    digitalWrite(LED_BUILTIN, LOW);\n    delay(1000);\n}\n","cpp",[132],"language-cpp",[134],{"type":21,"tag":93,"props":135,"children":136},{"__ignoreMap":8},[137],{"type":40,"value":129},{"type":21,"tag":85,"props":139,"children":142},{"code":140,"language":88,"meta":8,"className":141},"pio run -t upload\n",[90],[143],{"type":21,"tag":93,"props":144,"children":145},{"__ignoreMap":8},[146],{"type":40,"value":140},{"type":21,"tag":22,"props":148,"children":149},{},[150,152,159],{"type":40,"value":151},"When you outgrow demos, read ",{"type":21,"tag":153,"props":154,"children":156},"a",{"href":155},"\u002Fblog\u002Fpost-iot-production",[157],{"type":40,"value":158},"Shipping IoT past the demo",{"type":40,"value":160},".",{"title":8,"searchDepth":16,"depth":16,"links":162},[163,164],{"id":49,"depth":16,"text":52},{"id":80,"depth":16,"text":83},"markdown","content:blog:post-2.md","content","blog\u002Fpost-2.md","blog\u002Fpost-2","md",{"_path":172,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":173,"description":174,"img":175,"tags":176,"order":179,"body":180,"_type":165,"_id":309,"_source":167,"_file":310,"_stem":311,"_extension":170},"\u002Fblog\u002Fpost-1","PlatformIO instead of Arduino IDE","A short guide to installing PlatformIO and blinking an LED on ESP32.","blog\u002Fpio.jpeg",[15,177,178],"arduino","platformio",1,{"type":18,"children":181,"toc":304},[182,191,197,202,208,217,223,232,243,251,256,265,271,281,286,294],{"type":21,"tag":22,"props":183,"children":184},{},[185],{"type":21,"tag":26,"props":186,"children":190},{"src":187,"alt":188,"className":189},"\u002Fblog\u002Fpio.jpeg","PlatformIO",[31,32],[],{"type":21,"tag":35,"props":192,"children":194},{"id":193},"elevate-your-arduino-projects-with-platformio",[195],{"type":40,"value":196},"Elevate your Arduino projects with PlatformIO",{"type":21,"tag":22,"props":198,"children":199},{},[200],{"type":40,"value":201},"If you use the Arduino IDE and want something better, start using PlatformIO. It is a comprehensive tool for many boards across many platforms.",{"type":21,"tag":47,"props":203,"children":205},{"id":204},"install",[206],{"type":40,"value":207},"Install",{"type":21,"tag":85,"props":209,"children":212},{"code":210,"language":88,"meta":8,"className":211},"pip install platformio\n",[90],[213],{"type":21,"tag":93,"props":214,"children":215},{"__ignoreMap":8},[216],{"type":40,"value":210},{"type":21,"tag":47,"props":218,"children":220},{"id":219},"start-a-new-project",[221],{"type":40,"value":222},"Start a new project",{"type":21,"tag":85,"props":224,"children":227},{"code":225,"language":88,"meta":8,"className":226},"mkdir foopio\ncd foopio\npio project init\n",[90],[228],{"type":21,"tag":93,"props":229,"children":230},{"__ignoreMap":8},[231],{"type":40,"value":225},{"type":21,"tag":22,"props":233,"children":234},{},[235,237,242],{"type":40,"value":236},"Open the project in your editor and add this to ",{"type":21,"tag":93,"props":238,"children":240},{"className":239},[],[241],{"type":40,"value":105},{"type":40,"value":107},{"type":21,"tag":85,"props":244,"children":246},{"code":245},"[platformio]\ndefault_envs = esp32dev\n\n[env:esp32dev]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\n",[247],{"type":21,"tag":93,"props":248,"children":249},{"__ignoreMap":8},[250],{"type":40,"value":245},{"type":21,"tag":22,"props":252,"children":253},{},[254],{"type":40,"value":255},"Create the firmware entry file:",{"type":21,"tag":85,"props":257,"children":260},{"code":258,"language":88,"meta":8,"className":259},"touch src\u002Fmain.cpp\n",[90],[261],{"type":21,"tag":93,"props":262,"children":263},{"__ignoreMap":8},[264],{"type":40,"value":258},{"type":21,"tag":47,"props":266,"children":268},{"id":267},"blink-example",[269],{"type":40,"value":270},"Blink example",{"type":21,"tag":85,"props":272,"children":276},{"code":129,"language":273,"meta":8,"className":274},"c",[275],"language-c",[277],{"type":21,"tag":93,"props":278,"children":279},{"__ignoreMap":8},[280],{"type":40,"value":129},{"type":21,"tag":22,"props":282,"children":283},{},[284],{"type":40,"value":285},"Connect your device and upload:",{"type":21,"tag":85,"props":287,"children":289},{"code":140,"language":88,"meta":8,"className":288},[90],[290],{"type":21,"tag":93,"props":291,"children":292},{"__ignoreMap":8},[293],{"type":40,"value":140},{"type":21,"tag":22,"props":295,"children":296},{},[297,299,303],{"type":40,"value":298},"For production IoT lessons beyond blink demos, see ",{"type":21,"tag":153,"props":300,"children":301},{"href":155},[302],{"type":40,"value":158},{"type":40,"value":160},{"title":8,"searchDepth":16,"depth":16,"links":305},[306,307,308],{"id":204,"depth":16,"text":207},{"id":219,"depth":16,"text":222},{"id":267,"depth":16,"text":270},"content:blog:post-1.md","blog\u002Fpost-1.md","blog\u002Fpost-1",{"_path":155,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":313,"description":314,"img":11,"tags":315,"order":318,"body":319,"_type":165,"_id":457,"_source":167,"_file":458,"_stem":459,"_extension":170},"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.",[14,15,316,317],"production","engineering",12,{"type":18,"children":320,"toc":452},[321,326,331,336,342,376,382,432,438,443],{"type":21,"tag":26,"props":322,"children":325},{"src":28,"alt":323,"className":324},"IoT production",[31,32],[],{"type":21,"tag":35,"props":327,"children":329},{"id":328},"shipping-iot-past-the-demo",[330],{"type":40,"value":158},{"type":21,"tag":22,"props":332,"children":333},{},[334],{"type":40,"value":335},"Blinking an LED on an ESP32 is fun. Keeping thousands of devices online, authenticated, and diagnosable is a different sport.",{"type":21,"tag":47,"props":337,"children":339},{"id":338},"the-gaps-demos-hide",[340],{"type":40,"value":341},"The gaps demos hide",{"type":21,"tag":54,"props":343,"children":344},{},[345,356,366],{"type":21,"tag":58,"props":346,"children":347},{},[348,354],{"type":21,"tag":349,"props":350,"children":351},"strong",{},[352],{"type":40,"value":353},"Connectivity is intermittent",{"type":40,"value":355}," — your happy-path Wi-Fi lab is not a farm, factory floor, or apartment with CGNAT.",{"type":21,"tag":58,"props":357,"children":358},{},[359,364],{"type":21,"tag":349,"props":360,"children":361},{},[362],{"type":40,"value":363},"Firmware must be updatable",{"type":40,"value":365}," — without brick risk and without manual USB visits.",{"type":21,"tag":58,"props":367,"children":368},{},[369,374],{"type":21,"tag":349,"props":370,"children":371},{},[372],{"type":40,"value":373},"Observability beats guessing",{"type":40,"value":375}," — device ID, last-seen, firmware version, and error codes should be first-class.",{"type":21,"tag":47,"props":377,"children":379},{"id":378},"patterns-that-held-up-for-me",[380],{"type":40,"value":381},"Patterns that held up for me",{"type":21,"tag":383,"props":384,"children":385},"ol",{},[386,391,396,422,427],{"type":21,"tag":58,"props":387,"children":388},{},[389],{"type":40,"value":390},"Treat the cloud API as a product with versioning, not a quick Firebase dump.",{"type":21,"tag":58,"props":392,"children":393},{},[394],{"type":40,"value":395},"Design for offline buffering on the device when the business allows it.",{"type":21,"tag":58,"props":397,"children":398},{},[399,401,406,408,413,415,420],{"type":40,"value":400},"Separate ",{"type":21,"tag":349,"props":402,"children":403},{},[404],{"type":40,"value":405},"ingest",{"type":40,"value":407},", ",{"type":21,"tag":349,"props":409,"children":410},{},[411],{"type":40,"value":412},"storage",{"type":40,"value":414},", and ",{"type":21,"tag":349,"props":416,"children":417},{},[418],{"type":40,"value":419},"visualization",{"type":40,"value":421}," so dashboards do not block telemetry.",{"type":21,"tag":58,"props":423,"children":424},{},[425],{"type":40,"value":426},"Automate provisioning — QR\u002Fclaim codes beat copying secrets by hand.",{"type":21,"tag":58,"props":428,"children":429},{},[430],{"type":40,"value":431},"Prefer boring infrastructure (Docker, Postgres, clear metrics) over clever one-offs.",{"type":21,"tag":47,"props":433,"children":435},{"id":434},"where-embedded-meets-product-engineering",[436],{"type":40,"value":437},"Where embedded meets product engineering",{"type":21,"tag":22,"props":439,"children":440},{},[441],{"type":40,"value":442},"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":22,"props":444,"children":445},{},[446],{"type":21,"tag":153,"props":447,"children":449},{"href":448},"\u002Fcontact?interest=product",[450],{"type":40,"value":451},"Talk about product \u002F IoT engineering →",{"title":8,"searchDepth":16,"depth":16,"links":453},[454,455,456],{"id":338,"depth":16,"text":341},{"id":378,"depth":16,"text":381},{"id":434,"depth":16,"text":437},"content:blog:post-iot-production.md","blog\u002Fpost-iot-production.md","blog\u002Fpost-iot-production",{"_path":461,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":462,"description":463,"img":175,"tags":464,"order":469,"body":470,"_type":165,"_id":606,"_source":167,"_file":607,"_stem":608,"_extension":170},"\u002Fblog\u002Fpost-odoo-discovery","Start Odoo projects with process mapping, not modules","Why ERP implementations fail when teams jump into apps first — and a practical discovery checklist for Iranian organizations.",[465,466,467,468],"odoo","erp","sabzema","consulting",10,{"type":18,"children":471,"toc":601},[472,477,482,493,499,517,523,576,582,587,592],{"type":21,"tag":26,"props":473,"children":476},{"src":187,"alt":474,"className":475},"Odoo discovery",[31,32],[],{"type":21,"tag":35,"props":478,"children":480},{"id":479},"start-odoo-projects-with-process-mapping-not-modules",[481],{"type":40,"value":462},{"type":21,"tag":22,"props":483,"children":484},{},[485,487,492],{"type":40,"value":486},"The fastest way to burn budget on Odoo is to open the Apps list and install everything that sounds relevant. The systems that stick start somewhere quieter: ",{"type":21,"tag":349,"props":488,"children":489},{},[490],{"type":40,"value":491},"how work actually moves through the organization",{"type":40,"value":160},{"type":21,"tag":47,"props":494,"children":496},{"id":495},"what-goes-wrong",[497],{"type":40,"value":498},"What goes wrong",{"type":21,"tag":54,"props":500,"children":501},{},[502,507,512],{"type":21,"tag":58,"props":503,"children":504},{},[505],{"type":40,"value":506},"Finance wants accounting first; warehouse wants inventory first; nobody owns the shared process.",{"type":21,"tag":58,"props":508,"children":509},{},[510],{"type":40,"value":511},"Custom modules get built before the default Odoo flow is understood.",{"type":21,"tag":58,"props":513,"children":514},{},[515],{"type":40,"value":516},"Data migration starts before statuses, units, and ownership rules are clear.",{"type":21,"tag":47,"props":518,"children":520},{"id":519},"a-discovery-checklist-i-use",[521],{"type":40,"value":522},"A discovery checklist I use",{"type":21,"tag":383,"props":524,"children":525},{},[526,536,546,556,566],{"type":21,"tag":58,"props":527,"children":528},{},[529,534],{"type":21,"tag":349,"props":530,"children":531},{},[532],{"type":40,"value":533},"Name the outcomes",{"type":40,"value":535}," — close books faster, reduce stockouts, unify CRM — in one sentence each.",{"type":21,"tag":58,"props":537,"children":538},{},[539,544],{"type":21,"tag":349,"props":540,"children":541},{},[542],{"type":40,"value":543},"Walk one happy path",{"type":40,"value":545}," — quote → order → delivery → invoice (or your equivalent).",{"type":21,"tag":58,"props":547,"children":548},{},[549,554],{"type":21,"tag":349,"props":550,"children":551},{},[552],{"type":40,"value":553},"List the exceptions",{"type":40,"value":555}," — returns, partial deliveries, multi-warehouse transfers.",{"type":21,"tag":58,"props":557,"children":558},{},[559,564],{"type":21,"tag":349,"props":560,"children":561},{},[562],{"type":40,"value":563},"Map roles",{"type":40,"value":565}," — who creates, who approves, who can override.",{"type":21,"tag":58,"props":567,"children":568},{},[569,574],{"type":21,"tag":349,"props":570,"children":571},{},[572],{"type":40,"value":573},"Only then",{"type":40,"value":575}," choose which Odoo apps to enable and what truly needs a custom module.",{"type":21,"tag":47,"props":577,"children":579},{"id":578},"when-customization-is-worth-it",[580],{"type":40,"value":581},"When customization is worth it",{"type":21,"tag":22,"props":583,"children":584},{},[585],{"type":40,"value":586},"Customize when the process is a real competitive advantage or a regulatory requirement. Configure when Odoo already covers 80% and the gap is training or discipline.",{"type":21,"tag":22,"props":588,"children":589},{},[590],{"type":40,"value":591},"If you are planning an Odoo rollout in Iran (or cleaning up a stalled one), start with a short discovery call — that is the cheapest insurance you can buy.",{"type":21,"tag":22,"props":593,"children":594},{},[595],{"type":21,"tag":153,"props":596,"children":598},{"href":597},"\u002Fcontact?interest=odoo",[599],{"type":40,"value":600},"Discuss an Odoo project →",{"title":8,"searchDepth":16,"depth":16,"links":602},[603,604,605],{"id":495,"depth":16,"text":498},{"id":519,"depth":16,"text":522},{"id":578,"depth":16,"text":581},"content:blog:post-odoo-discovery.md","blog\u002Fpost-odoo-discovery.md","blog\u002Fpost-odoo-discovery",{"_path":610,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":611,"description":612,"img":175,"tags":613,"order":617,"body":618,"_type":165,"_id":800,"_source":167,"_file":801,"_stem":802,"_extension":170},"\u002Fblog\u002Fpost-0","Starting a Blog in 2025","Why I want to start a blog in 2025 and what I hope to achieve with it",[614,615,616],"blogging","personal-brand","writing",3,{"type":18,"children":619,"toc":795},[620,626,631,636,642,652,662,672,678,731,737,742,785,790],{"type":21,"tag":35,"props":621,"children":623},{"id":622},"why-i-want-to-start-a-blog-in-2025",[624],{"type":40,"value":625},"Why I Want to Start a Blog in 2025",{"type":21,"tag":22,"props":627,"children":628},{},[629],{"type":40,"value":630},"Recently I moved out from the city and I have more time for myself. Without the traffic and the constant noise, I finally have space to think about what I want to build — not just for clients, but for myself.",{"type":21,"tag":22,"props":632,"children":633},{},[634],{"type":40,"value":635},"For the past 15 years, I've been building things for other people. Varzesh3, Anten, Jereeb, Ubeac, Sabzema — each project taught me something new, but I never took the time to write down what I learned. That's a problem, because knowledge that isn't shared is knowledge that fades.",{"type":21,"tag":47,"props":637,"children":639},{"id":638},"why-blog-now",[640],{"type":40,"value":641},"Why Blog Now",{"type":21,"tag":22,"props":643,"children":644},{},[645,650],{"type":21,"tag":349,"props":646,"children":647},{},[648],{"type":40,"value":649},"Clarity.",{"type":40,"value":651}," Writing forces you to think clearly. When you explain a technical concept in writing, you quickly discover the gaps in your understanding. Blogging is not just communication — it's a tool for sharpening your own thinking.",{"type":21,"tag":22,"props":653,"children":654},{},[655,660],{"type":21,"tag":349,"props":656,"children":657},{},[658],{"type":40,"value":659},"Visibility.",{"type":40,"value":661}," I'm at a point in my career where I want to be known for what I know, not just what I've built. A blog is the best way to demonstrate expertise without being in the room. When a potential client or employer searches for someone with my skills, I want them to find me.",{"type":21,"tag":22,"props":663,"children":664},{},[665,670],{"type":21,"tag":349,"props":666,"children":667},{},[668],{"type":40,"value":669},"Legacy.",{"type":40,"value":671}," Code gets refactored. Products get sunset. But writing lasts. The lessons I've learned building IoT platforms, leading teams, and deploying ERP systems — those are valuable, and they deserve to live beyond the projects themselves.",{"type":21,"tag":47,"props":673,"children":675},{"id":674},"what-ill-write-about",[676],{"type":40,"value":677},"What I'll Write About",{"type":21,"tag":54,"props":679,"children":680},{},[681,691,701,711,721],{"type":21,"tag":58,"props":682,"children":683},{},[684,689],{"type":21,"tag":349,"props":685,"children":686},{},[687],{"type":40,"value":688},"Technical deep-dives",{"type":40,"value":690}," — architecture decisions, debugging stories, lessons from production",{"type":21,"tag":58,"props":692,"children":693},{},[694,699],{"type":21,"tag":349,"props":695,"children":696},{},[697],{"type":40,"value":698},"Leadership",{"type":40,"value":700}," — what I've learned as a CTO and founder, managing teams and making hard decisions",{"type":21,"tag":58,"props":702,"children":703},{},[704,709],{"type":21,"tag":349,"props":705,"children":706},{},[707],{"type":40,"value":708},"IoT & Embedded",{"type":40,"value":710}," — my passion outside of web development, from 3D printing to home automation",{"type":21,"tag":58,"props":712,"children":713},{},[714,719],{"type":21,"tag":349,"props":715,"children":716},{},[717],{"type":40,"value":718},"Odoo & ERP",{"type":40,"value":720}," — practical insights from years of deploying business systems",{"type":21,"tag":58,"props":722,"children":723},{},[724,729],{"type":21,"tag":349,"props":725,"children":726},{},[727],{"type":40,"value":728},"Personal",{"type":40,"value":730}," — reflections on career, life in Iran, and the intersection of technology and society",{"type":21,"tag":47,"props":732,"children":734},{"id":733},"what-i-hope-to-achieve",[735],{"type":40,"value":736},"What I Hope to Achieve",{"type":21,"tag":22,"props":738,"children":739},{},[740],{"type":40,"value":741},"By the end of 2025, I want to have:",{"type":21,"tag":383,"props":743,"children":744},{},[745,755,765,775],{"type":21,"tag":58,"props":746,"children":747},{},[748,753],{"type":21,"tag":349,"props":749,"children":750},{},[751],{"type":40,"value":752},"24 published posts",{"type":40,"value":754}," — roughly two per month, enough to build a consistent habit",{"type":21,"tag":58,"props":756,"children":757},{},[758,763],{"type":21,"tag":349,"props":759,"children":760},{},[761],{"type":40,"value":762},"A clear voice",{"type":40,"value":764}," — writing that sounds like me, not like a textbook",{"type":21,"tag":58,"props":766,"children":767},{},[768,773],{"type":21,"tag":349,"props":769,"children":770},{},[771],{"type":40,"value":772},"An audience",{"type":40,"value":774}," — even a small one, of people who find what I write useful",{"type":21,"tag":58,"props":776,"children":777},{},[778,783],{"type":21,"tag":349,"props":779,"children":780},{},[781],{"type":40,"value":782},"Opportunities",{"type":40,"value":784}," — consulting offers, speaking invitations, or connections that come from being visible",{"type":21,"tag":22,"props":786,"children":787},{},[788],{"type":40,"value":789},"This isn't about becoming a full-time writer. It's about building a personal brand that opens doors — for me, and for the people who might want to work with me.",{"type":21,"tag":22,"props":791,"children":792},{},[793],{"type":40,"value":794},"The city was loud. The work was busy. But now it's time to write.",{"title":8,"searchDepth":16,"depth":16,"links":796},[797,798,799],{"id":638,"depth":16,"text":641},{"id":674,"depth":16,"text":677},{"id":733,"depth":16,"text":736},"content:blog:post-0.md","blog\u002Fpost-0.md","blog\u002Fpost-0",1791356686990]