[{"content":"This is a scratch post I use to confirm the theme is rendering everything I care about. It has a heading hierarchy for the table of contents to grab, two code blocks (one systems-language, one high-level), an inline code span, a blockquote, and a couple of tags for taxonomy pages.\nIf you\u0026rsquo;re reading this in production, I forgot to draft = true it. Sorry.\nHeading level 2 Some prose lives here so PaperMod\u0026rsquo;s TOC has something to link to at each depth.\nHeading level 3 Nested heading, so the TOC gets more than one entry.\nHeading level 4 One more, just to see how it renders.\nCode — a systems language A minimal NASM program that writes hello\\n to stdout via the Linux write syscall on x86-64:\n; hello.asm — assemble with: ; nasm -f elf64 hello.asm \u0026amp;\u0026amp; ld hello.o -o hello global _start section .data msg: db \u0026#34;hello\u0026#34;, 10 ; the literal + newline mlen: equ $ - msg ; length as an assemble-time constant section .text _start: mov rax, 1 ; syscall: write mov rdi, 1 ; fd: stdout mov rsi, msg mov rdx, mlen syscall mov rax, 60 ; syscall: exit xor rdi, rdi ; status: 0 syscall Code — TypeScript A tiny helper that reads a URL from user input and refuses anything that isn\u0026rsquo;t http/https. If you were doing this in a real handler, you\u0026rsquo;d also block private and metadata IPs — see OWASP A01 (SSRF).\nexport function parseSafeUrl(raw: string): URL { const url = new URL(raw); if (url.protocol !== \u0026#34;http:\u0026#34; \u0026amp;\u0026amp; url.protocol !== \u0026#34;https:\u0026#34;) { throw new Error(`unsupported protocol: ${url.protocol}`); } return url; } Inline and quoted text Use inline code like parseSafeUrl(\u0026quot;https://example.com\u0026quot;) mid-sentence. Use blockquotes for pull-quotes and long citations:\nA codebase is a shared model of the world. Every commit is a proposal to change how the model works — and every review is a vote on whether that proposal makes the model clearer.\nDone If the TOC on the right (or top on mobile) lists these headings, both code blocks have syntax colors and a copy button, the blockquote has a left border, and the tags at the bottom link to /tags/meta/ and friends — the theme is set up correctly.\n","permalink":"https://omarcrosby.com/posts/papermod-feature-check/","summary":"A skeleton post I use to sanity-check the theme\u0026rsquo;s rendering: heading hierarchy, syntax highlighting for a systems language and TypeScript, inline code, and blockquotes.","title":"PaperMod feature check: TOC, code highlighting, and typography"},{"content":"I\u0026rsquo;m a software engineer at The Weather Company who works across the stack. Day to day, that means Next.js and TypeScript on the front end and API layer, DevOps and CI work to keep the pipes moving, Linux administration to keep the servers honest, and — when the mood strikes — lower-level programming in NASM assembly.\nBefore The Weather Company I was Director of Software Engineering at Fidelity Investments. I studied Applied Mathematics at North Carolina State University (2000–2004), where I spent more time than was strictly reasonable on analysis, algebra, and PDEs. I\u0026rsquo;m a member of ACM, SIAM, IEEE, and Mensa.\nOutside the day job, most of my time goes into jedi-knights — a personal umbrella where I build and open-source a lot of things:\nSports-data infrastructure — MCP servers exposing NWSL, ECNL/ECRL, and NFL data as tools for LLM clients; Python SDKs for a stack of leagues (NWSL, MLS, USL, NCAA, WPSL, and more); an RPI calculator; a work-in-progress Go match-tracking app. Identity and API platform — a production-style OAuth2/OIDC reference in Go (identity-platform-go) built as clean microservices, plus a configurable reverse-proxy gateway (api-gateway) with rate limiting, circuit breaking, and MCP routing. A Neovim distribution and plugin ecosystem — yoda.nvim plus a family of modular plugins (yoda-core.nvim, yoda-window.nvim, yoda-logging.nvim, yoda-diagnostics.nvim, yoda-terminal.nvim, pytest.nvim, yaml.nvim, go.nvim, python.nvim, and others). Release and code-quality tooling — go-semantic-release (which powers this site\u0026rsquo;s release workflow), nasm-lint (a Rust-based NASM static analyzer with CLI, LSP, and GitHub Action), kyber (Go function-level quality metrics), and neospec (a self-contained Neovim test/coverage runner in Go). Distributed systems play — holocron, a learning-first Kafka-style event streaming platform written as a Go workspace, with a Python SDK. The through-line is: build the boring plumbing well, in the language that fits, and open-source it.\nAway from a keyboard, I cook — from scratch, mostly, because measuring things is fun. I watch a lot of film and TV, and I follow soccer more closely than is probably healthy — especially the NWSL, and specifically Gotham FC.\nContact LinkedIn — linkedin.com/in/omarcrosby Email — omar.crosby@gmail.com GitHub — github.com/ocrosby Projects — github.com/jedi-knights ","permalink":"https://omarcrosby.com/about/","summary":"\u003cp\u003eI\u0026rsquo;m a \u003cstrong\u003esoftware engineer at The Weather Company\u003c/strong\u003e who works across the stack. Day to day, that means \u003cstrong\u003eNext.js\u003c/strong\u003e and \u003cstrong\u003eTypeScript\u003c/strong\u003e on the front end and API layer, DevOps and CI work to keep the pipes moving, Linux administration to keep the servers honest, and — when the mood strikes — lower-level programming in \u003cstrong\u003eNASM assembly\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eBefore The Weather Company I was \u003cstrong\u003eDirector of Software Engineering at Fidelity Investments\u003c/strong\u003e. I studied \u003cstrong\u003eApplied Mathematics\u003c/strong\u003e at \u003cstrong\u003eNorth Carolina State University\u003c/strong\u003e (2000–2004), where I spent more time than was strictly reasonable on analysis, algebra, and PDEs. I\u0026rsquo;m a member of \u003cstrong\u003eACM\u003c/strong\u003e, \u003cstrong\u003eSIAM\u003c/strong\u003e, \u003cstrong\u003eIEEE\u003c/strong\u003e, and \u003cstrong\u003eMensa\u003c/strong\u003e.\u003c/p\u003e","title":"About"},{"content":"A configurable Go reverse-proxy gateway that sits in front of the identity and sports-data services. Rate limiting, circuit breaking, MCP routing, and a pluggable middleware pipeline so protection and observability are added by config, not by handler edits.\nStack: Go · reverse-proxy · middleware · MCP\nRepo: github.com/jedi-knights/api-gateway ","permalink":"https://omarcrosby.com/projects/api-gateway/","summary":"Configurable Go reverse-proxy gateway with rate limiting, circuit breaking, MCP routing, and pluggable middleware.","title":"API Gateway"},{"content":"A pure-Go implementation of the semantic-release contract — parses Conventional Commits since the last tag, decides the next version, tags, and publishes a GitHub Release. It powers the release workflow behind this site: every merge that says feat or fix flows through go-semantic-release to a new tag and a Fly.io deploy.\nCompanions cover the ergonomic gaps around it:\ndetect-semantic-release wraps go-semantic-release and exposes released / version / tag outputs to downstream steps. python-semantic-release and relforge are Python takes on the same idea. python-commitlint enforces the Conventional Commit shape at commit time. Stack: Go · Conventional Commits · GitHub Actions\nRepo: github.com/jedi-knights/go-semantic-release ","permalink":"https://omarcrosby.com/projects/go-semantic-release/","summary":"A semantic-release implementation in Go. Powers the release workflow behind this site.","title":"go-semantic-release"},{"content":"Welcome. This is my personal site, and this is the first post on it.\nI plan to write, mostly infrequently, about the things I\u0026rsquo;m actually working on: sports-data infrastructure (APIs, MCP servers, the plumbing behind league data), full-stack engineering with Next.js and TypeScript, the occasional detour into low-level programming — usually NASM assembly, because it keeps me honest — and whatever else I find myself explaining to a rubber duck twice in a week.\nIf a post shows up here, it\u0026rsquo;s because I wanted the notes for myself first, and it seemed possibly useful to someone else second. That\u0026rsquo;s the whole editorial policy.\nMore soon.\n","permalink":"https://omarcrosby.com/posts/hello/","summary":"A quick note on why this blog exists and what to expect.","title":"Hello, and what I'll write about here"},{"content":"A learning-first take on Kafka-style event streaming: a single-binary broker plus an SDK, arranged as a Go workspace so the two evolve together. The goal is teaching myself (and anyone reading) what actually happens in a log-based broker, not shipping a Kafka replacement.\nStack: Go workspace (broker + SDK) · Python SDK\nBroker + Go SDK: github.com/jedi-knights/holocron Python SDK: github.com/jedi-knights/holocron-python ","permalink":"https://omarcrosby.com/projects/holocron/","summary":"Learning-first, Kafka-style event streaming platform — a single-binary broker and SDK, laid out as a Go workspace.","title":"Holocron"},{"content":"A working reference for OAuth2 and OIDC in Go, shaped as a proper microservices deployment rather than a monolith with routes. Each service is independently deployable, owns its own database, and follows a ports-and-adapters interior.\nAuditability was a design goal: durable audit events land in a audit_events table, and a companion service (jk-metering) transforms them for a metering backend.\nStack: Go · OAuth2 · OIDC · microservices · ports-and-adapters\nRepo: github.com/jedi-knights/identity-platform-go Metering companion: github.com/jedi-knights/jk-metering Related — legacy Python impl: github.com/jedi-knights/identity-service ","permalink":"https://omarcrosby.com/projects/identity-platform-go/","summary":"A production-style OAuth2/OIDC reference in Go, built as pure microservices — each service independently deployable with its own database.","title":"Identity Platform (Go)"},{"content":"An educational repo with my notes and small annotated examples for introductory x86 assembly in NASM — aimed at people who want to peek under the runtime.\nStack: NASM · x86 assembly\nRepo: github.com/ocrosby/assembly-fundamentals-nasm Related — CLion NASM demo: github.com/ocrosby/hello-nasm ","permalink":"https://omarcrosby.com/projects/nasm-assembly-intro/","summary":"Notes and small annotated examples for introductory x86 assembly with NASM.","title":"NASM Assembly Intro"},{"content":"A static analyzer for NASM x86 assembly, written in Rust. Ships in three forms so it fits every place code is normally checked:\nA CLI for local runs and pre-commit hooks. An editor LSP for in-editor diagnostics. A GitHub Action that emits SARIF, so results land in the standard code-scanning surface. Stack: Rust · NASM · LSP · SARIF · GitHub Actions\nRepo: github.com/jedi-knights/nasm-lint ","permalink":"https://omarcrosby.com/projects/nasm-lint/","summary":"Static code analysis for NASM x86 assembly — CLI, editor LSP, and a GitHub Action with SARIF output.","title":"nasm-lint"},{"content":"A collection of independently useful pieces that all speak the same data:\nMCP servers exposing NWSL, ECNL/ECRL, and NFL data as LLM-callable tools: jk-mcp-nwsl, jk-mcp-ecnl, jk-mcp-nfl. Python SDKs for a growing list of leagues: jk-soccer-core (the base), jk-soccer-nwsl, jk-soccer-mls, jk-soccer-ecnl, jk-soccer-ncaa, jk-soccer-usl, jk-soccer-wpsl, jk-soccer-ga, jk-soccer-soccerwire, jk-soccer-topdrawer. A Go ECNL module — ecnl — and an rpi calculator for ratings and standings. Adjacent pieces — gridiron-insights for football data, ratings and rankings as general-purpose ranking tools. Stack: Python (SDKs, MCP servers), Go (ECNL module, RPI, Touchline), MCP.\n","permalink":"https://omarcrosby.com/projects/sports-data-ecosystem/","summary":"MCP servers, Python SDKs, an RPI calculator, and a match-tracking app — a stack of tools for pulling and reasoning about soccer, NFL, and other league data.","title":"Sports Data Ecosystem"},{"content":"A touch-centric, sport-agnostic match event–tracking app. Event types aren\u0026rsquo;t hardcoded — they\u0026rsquo;re stored as data rows with behavioral flags, so adding a new sport is a config change rather than a code change.\nStack: Go\nRepo: github.com/jedi-knights/touchline ","permalink":"https://omarcrosby.com/projects/touchline/","summary":"Touch-centric, sport-agnostic match event–tracking web app. Event types are data rows with behavioral flags, not hardcoded enums.","title":"Touchline"},{"content":"A Neovim distribution that boots with sensible defaults, plus a family of small modular plugins so pieces are usable outside of Yoda itself.\nDistribution: yoda.nvim Modular building blocks: yoda-core.nvim, yoda-window.nvim, yoda-logging.nvim, yoda-diagnostics.nvim, yoda-terminal.nvim (venv-aware terminal), yoda.nvim-adapters (abstract notify/picker backends). Language and tool integrations: pytest.nvim, yaml.nvim, go.nvim, python.nvim, go-task.nvim, invoke.nvim. Docs source: neovim-plugin-development — the GitBook source for the plugin-development guide. Stack: Lua · Neovim runtime · vim.pack\n","permalink":"https://omarcrosby.com/projects/yoda-nvim/","summary":"A community-driven Neovim distribution and a family of modular plugins — logging, diagnostics, window management, YAML, pytest, and more.","title":"Yoda (yoda.nvim)"}]