{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreieyp5avevuoivcpoac62sjm6eeje2fuiaybbxcswxkkuplqptcyva",
    "commit": {
      "cid": "bafyreid6rr3bfr3pqir3yp3e7p24ianzpssntf7reoq23hcjdu5vf3asfq",
      "rev": "3moccwqylwu2n"
    },
    "uri": "at://did:plc:xg2vq45muivyy3xwatcehspu/app.bsky.feed.post/3moccwqvva22n",
    "validationStatus": "valid"
  },
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Engineering is supposed to be fun! I might feel like this version of Mr Byrne at times but challenging myself always proves to make me happy. Today I want to do a little dive into a few things I did this week."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "aspectRatio": {
                "height": 480,
                "width": 640
              },
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreifggpwjayyyy5m64nj7bmuflu2vcqzg6rtt2obfkxq4uynhhqpone"
                },
                "mimeType": "image/webp",
                "size": 43224
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://github.com/desertthunder/regulus"
                    }
                  ],
                  "index": {
                    "byteEnd": 140,
                    "byteStart": 133
                  }
                }
              ],
              "plaintext": "I've been having a lot of fun putting silliness in my projects and working on ambitious projects. The big one these days is probably Regulus, the Gleam to WASM compiler I've been writing."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "plaintext": "Tables, Dependencies, & JS"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Here are three big things I worked on with some context."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.orderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.orderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ],
                        "index": {
                          "byteEnd": 78,
                          "byteStart": 63
                        }
                      }
                    ],
                    "plaintext": "WebAssembly stores callable function references in a table. An element segment initializes that table with the functions the module needs, lets compiled code pass functions around as values, call them indirectly, and support closures/higher-order functions more cleanly."
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.orderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#italic"
                          }
                        ],
                        "index": {
                          "byteEnd": 8,
                          "byteStart": 0
                        }
                      }
                    ],
                    "plaintext": "Lowering is the compiler step that turns typed source-level code into a lower-level IR. Making owner-aware typed interfaces means each known function/type is tracked with where it came from: the current module, another module, or a dependency package. This prevents name confusion when different modules or packages expose similar names."
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.orderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "I started working heavily on the JavaScript ABI (Application Binary Interface). An ABI is the low-level contract for how compiled code talks to its host or other compiled code: function names, parameter/return shapes, memory layout, pointers, strings, handles, and value encoding. The JS host ABI is the growing contract between generated WASM and JavaScript."
                  }
                }
              ],
              "startIndex": 1
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://reggie.desertthunder.dev/"
                    }
                  ],
                  "index": {
                    "byteEnd": 108,
                    "byteStart": 104
                  }
                }
              ],
              "plaintext": "If you're interested, the companion book I'm writing should go into more detail about the concepts. The docs do an okay job with this as well."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#code"
                    }
                  ],
                  "index": {
                    "byteEnd": 10,
                    "byteStart": 0
                  }
                }
              ],
              "level": 2,
              "plaintext": "man resume"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "I made a website for my resume with what feels like my \"signature\" static site setup:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "Astro"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [
                      {
                        "features": [
                          {
                            "$type": "pub.leaflet.richtext.facet#link",
                            "uri": "https://jvns.ca/blog/2026/05/15/moving-away-from-tailwind--and-learning-to-structure-my-css-/"
                          }
                        ],
                        "index": {
                          "byteEnd": 19,
                          "byteStart": 0
                        }
                      }
                    ],
                    "plaintext": "Well structured css"
                  }
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "plaintext": "An open graph image that looks sorta like a terminal"
                  }
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://resume.desertthunder.dev/"
                    }
                  ],
                  "index": {
                    "byteEnd": 78,
                    "byteStart": 71
                  }
                }
              ],
              "plaintext": "Updating my resume always feels a little tedious, but making it into a website has made it easier to address feedback. My dad likes that it's not dark mode by default. In keeping with the silliness throughout this week, I'd added a man page/plaintext version of my resume."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "language": "plaintext",
              "plaintext": "OWAIS_JAMIL(7)\n\nNAME\n       Owais Jamil - Software Engineer\n\nSYNOPSIS\n       owais_jamil [--experience] [--skills] [--projects] [--education]\n\nCONTACT\n       Email: [redacted]\n       Phone: [redacted]\n       Web: https://desertthunder.dev\n\n       GitHub: https://github.com/desertthunder\n       LinkedIn: [redacted]\n       Sifa: https://sifa.id/p/desertthunder.dev\n\nDESCRIPTION\n       Senior Software Engineer",
              "syntaxHighlightingTheme": "houston"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://sifa.id/p/desertthunder.dev"
                    }
                  ],
                  "index": {
                    "byteEnd": 120,
                    "byteStart": 116
                  }
                }
              ],
              "plaintext": "The link is buried in the footer of the site but it brings me a little joy. I haven't connected with anyone through sifa yet, but I do like that the control over everything let's me add a link to it."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "aspectRatio": {
                "height": 362,
                "width": 556
              },
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreihdbebseto4knfggrkr7zcbna5d37ecoebrhormla2weze44tykz4"
                },
                "mimeType": "image/webp",
                "size": 18348
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "plaintext": "A storm comes in"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://tempest.desertthunder.dev/"
                    }
                  ],
                  "index": {
                    "byteEnd": 51,
                    "byteStart": 44
                  }
                }
              ],
              "plaintext": "Yesterday I deployed my elixir/phoenix PDS, Tempest. Under the hood I think it's a faithful implementation of the PDS spec. Most PDSes have this on their home page:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.code",
              "language": "plaintext",
              "plaintext": "         __                         __\n        /\\ \\__                     /\\ \\__\n    __  \\ \\ ,_\\  _____   _ __   ___\\ \\ ,_\\   ___\n  /'__'\\ \\ \\ \\/ /\\ '__'\\/\\''__\\/ __'\\ \\ \\/  / __'\\\n /\\ \\L\\.\\_\\ \\ \\_\\ \\ \\L\\ \\ \\ \\//\\ \\L\\ \\ \\ \\_/\\ \\L\\ \\\n \\ \\__/.\\_\\\\ \\__\\\\ \\ ,__/\\ \\_\\\\ \\____/\\ \\__\\ \\____/\n  \\/__/\\/_/ \\/__/ \\ \\ \\/  \\/_/ \\/___/  \\/__/\\/___/\n                   \\ \\_\\\n                    \\/_/\n\nThis is an AT Protocol Personal yadda yadda yadda",
              "syntaxHighlightingTheme": "houston"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://icones.js.org/collection/fxemoji"
                    }
                  ],
                  "index": {
                    "byteEnd": 94,
                    "byteStart": 80
                  }
                }
              ],
              "plaintext": "I thought it would be cool to make it look like Windows 95 (with some flair via Firefox emojis)."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "aspectRatio": {
                "height": 630,
                "width": 1200
              },
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreib2c7kpewlulimv7ngzdjtbq4nf6e4dr6tcoxmwljpbgkvn6u77zi"
                },
                "mimeType": "image/webp",
                "size": 109202
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "I still have some work to do as far as emails & password reset, namely configuring SMTP and picking a provider. Not sure what I want to use yet."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Currently it lives on a single container in Railway on the hobby plan. I'll see how much mileage I get of that before considering self-hosting."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 3,
              "plaintext": "Retro ATProto UI"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://ubuntu.fandom.com/wiki/Intrepid_Ibex"
                    }
                  ],
                  "index": {
                    "byteEnd": 299,
                    "byteStart": 286
                  }
                }
              ],
              "plaintext": "I can't remember where I saw it/who said it, but the concept of \"Claude-slop\" UI stuck with me and I've been trying to experiment with different ideas. The other weird thing I did was making yet another ATproto explorer that looks just like the first ever Ubuntu version I played with, Intrepid Ibex."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.image",
              "aspectRatio": {
                "height": 1956,
                "width": 3096
              },
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreihwtpa3cniyig6zx6ujq3t73ymlqxhc75j3jdn7tlow7qu2gjwymq"
                },
                "mimeType": "image/webp",
                "size": 534760
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "This was so much fun to do. I'm thinking about making a UI library that uses these components (it's all vanilla CSS) and exposes the drag and drop primitives. If you want something like this, please let me know!"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "plaintext": "Getting Zig-gy with Markdown"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://leaflet.pub/019eb3fb-e10e-733a-b551-ab4939a27f43"
                    }
                  ],
                  "index": {
                    "byteEnd": 66,
                    "byteStart": 35
                  }
                }
              ],
              "plaintext": "Recently I wrote a write-up on the challenges of building a parser for Markdown because of its precedence rules and delimiters. That continued into recent work I did, which revolved around full GFM compliance. This meant adding a test runner and refactoring the delimiter parser to handle gfm's edge cases. I think the project is turning out to be pretty cool and in my opinion, one of the more absurd ways I've chosen to learn a new programming language."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.website",
              "description": "A commonmark compliant markdown parser and event api",
              "previewImage": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreich7iieoq3hggnrojx6iqzjelsqad3gvb2rt42giddnhup23zz2yy"
                },
                "mimeType": "image/png",
                "size": 26218
              },
              "src": "https://codeberg.org/desertthunder/markdownz",
              "title": "markdownz"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.header",
              "level": 2,
              "plaintext": "What's next?"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://lazurite.stormlightlabs.org/"
                    }
                  ],
                  "index": {
                    "byteEnd": 129,
                    "byteStart": 121
                  }
                },
                {
                  "features": [
                    {
                      "$type": "pub.leaflet.richtext.facet#link",
                      "uri": "https://marker.stormlightlabs.org/"
                    }
                  ],
                  "index": {
                    "byteEnd": 158,
                    "byteStart": 152
                  }
                }
              ],
              "plaintext": "In the short-term, I'm thinking about writing a deep-dive in to ATProto-Flutter dev after I release the next versions of Lazurite and push the alpha of Marker. Before I release Lazurite I have to integrate the new group chat lexicon. "
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.horizontalRule"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "plaintext": "Thanks for reading!"
            }
          }
        ],
        "id": "019eb8bf-37e7-7559-8d8b-c8dc99ce45d1"
      }
    ]
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreifggpwjayyyy5m64nj7bmuflu2vcqzg6rtt2obfkxq4uynhhqpone"
    },
    "mimeType": "image/webp",
    "size": 43224
  },
  "description": "Dev Log 55: 2026-06-14",
  "path": "/3moccwocjb22m",
  "publishedAt": "2026-06-15T03:14:20.620Z",
  "site": "at://did:plc:xg2vq45muivyy3xwatcehspu/site.standard.publication/3m3zpxhfl3c2s",
  "tags": [
    "gleam",
    "wasm",
    "devlog",
    "elixir",
    "beam",
    "phoenix",
    "pds",
    "atproto",
    "resume"
  ],
  "title": "How did I get here"
}