{
  "count": 12,
  "items": [
    {
      "slug": "crow-kubernetes-from-your-phone",
      "title": "Managing Kubernetes from my phone",
      "date": "2026-05-30",
      "description": "Crow is a native SwiftUI iOS client for Kubernetes. mTLS via PKCS#12, generic CRD browsing, WebSocket log streaming, and RBAC-gated mutations.",
      "url": "https://anuragxd.com/blogs/crow-kubernetes-from-your-phone",
      "markdownUrl": "https://anuragxd.com/blogs/crow-kubernetes-from-your-phone.md"
    },
    {
      "slug": "zero-trust-auth-istio-opa-keycloak",
      "title": "End-to-end user identity across a research platform with Istio, OPA, and token exchange",
      "date": "2026-05-13",
      "description": "How we made the user's JWT travel through every service-to-service call, across Kubernetes and HPC, using mesh-level validation, per-service OPA policies, and chained RFC 8693 token exchange.",
      "url": "https://anuragxd.com/blogs/zero-trust-auth-istio-opa-keycloak",
      "markdownUrl": "https://anuragxd.com/blogs/zero-trust-auth-istio-opa-keycloak.md"
    },
    {
      "slug": "building-conquest",
      "title": "Building a workflow execution service from scratch in Go",
      "date": "2026-04-28",
      "description": "Conquest implements GA4GH WES/TES on Kubernetes. Adapter pattern for multi-language support, Postgres state machines, and the file staging problem.",
      "url": "https://anuragxd.com/blogs/building-conquest",
      "markdownUrl": "https://anuragxd.com/blogs/building-conquest.md"
    },
    {
      "slug": "redrush-filesystem-s3-sync",
      "title": "A filesystem-to-S3 sync daemon that doesn't poll",
      "date": "2026-04-26",
      "description": "RedRush uses inotify/kqueue for event-driven uploads to S3-compatible storage. Debouncing, recursive watch registration, and the Kubernetes sidecar pattern.",
      "url": "https://anuragxd.com/blogs/redrush-filesystem-s3-sync",
      "markdownUrl": "https://anuragxd.com/blogs/redrush-filesystem-s3-sync.md"
    },
    {
      "slug": "gemstone-listing-generator",
      "title": "Using Gemini to list gemstones on Etsy for my mom",
      "date": "2026-04-19",
      "description": "Structured output from Gemini's multimodal API, JSON schema constraints, marketplace-safe description generation, and automated product image grids.",
      "url": "https://anuragxd.com/blogs/gemstone-listing-generator",
      "markdownUrl": "https://anuragxd.com/blogs/gemstone-listing-generator.md"
    },
    {
      "slug": "nextflow-snakemake-wdl",
      "title": "I wrote the same pipeline in Nextflow, Snakemake, and WDL",
      "date": "2026-03-28",
      "description": "Three tiny repos, one variant-calling workflow, and what each language's execution model actually does to your code.",
      "url": "https://anuragxd.com/blogs/nextflow-snakemake-wdl",
      "markdownUrl": "https://anuragxd.com/blogs/nextflow-snakemake-wdl.md"
    },
    {
      "slug": "dataslip-tui-postgres",
      "title": "Building a TUI database browser with React (yes, React)",
      "date": "2026-03-22",
      "description": "DataSlip is a terminal-first Postgres client built with Bun, React, and OpenTUI. Component architecture, focus management, and terminal rendering performance.",
      "url": "https://anuragxd.com/blogs/dataslip-tui-postgres",
      "markdownUrl": "https://anuragxd.com/blogs/dataslip-tui-postgres.md"
    },
    {
      "slug": "popy-500kb-clipboard-manager",
      "title": "Popy: a 500 KB clipboard manager because every other one is an Electron app",
      "date": "2026-03-12",
      "description": "Writing a native Swift macOS menu bar app. NSPasteboard polling, Keychain storage, global hotkeys via CGEvent, and universal binary CI.",
      "url": "https://anuragxd.com/blogs/popy-500kb-clipboard-manager",
      "markdownUrl": "https://anuragxd.com/blogs/popy-500kb-clipboard-manager.md"
    },
    {
      "slug": "conops-gitops-without-kubernetes",
      "title": "ConOps: I wanted Argo CD without the Kubernetes",
      "date": "2026-02-06",
      "description": "Building a GitOps controller for Docker Compose in Go. Reconciliation loops, config hashing for drift detection, go-git for in-process clones, and an embedded web UI.",
      "url": "https://anuragxd.com/blogs/conops-gitops-without-kubernetes",
      "markdownUrl": "https://anuragxd.com/blogs/conops-gitops-without-kubernetes.md"
    },
    {
      "slug": "supertokens-to-keycloak",
      "title": "Migrating live auth from SuperTokens to Keycloak",
      "date": "2026-01-29",
      "description": "Custom SPI for phone-OTP in Java, gradual user adoption via login-time import, dual-session logout, and the oidc-client-ts cutover.",
      "url": "https://anuragxd.com/blogs/supertokens-to-keycloak",
      "markdownUrl": "https://anuragxd.com/blogs/supertokens-to-keycloak.md"
    },
    {
      "slug": "self-hosting-typesense-metabase",
      "title": "The month we self-hosted everything",
      "date": "2025-12-27",
      "description": "Moving Typesense and Metabase onto GKE. StatefulSet tuning, alias-swapped re-indexing, SAML attribute mapping, and the OOM that Prometheus caught.",
      "url": "https://anuragxd.com/blogs/self-hosting-typesense-metabase",
      "markdownUrl": "https://anuragxd.com/blogs/self-hosting-typesense-metabase.md"
    },
    {
      "slug": "contributing-to-ga4gh-oss",
      "title": "Small PRs to scientific infrastructure",
      "date": "2025-08-20",
      "description": "Shipping a streaming zip endpoint to trs-filer, adding S3-compatible storage via boto3, and patching FOCA's MongoDB connection URI handling.",
      "url": "https://anuragxd.com/blogs/contributing-to-ga4gh-oss",
      "markdownUrl": "https://anuragxd.com/blogs/contributing-to-ga4gh-oss.md"
    }
  ]
}
