{
  "name": "Projects by Ari (Hamid) Zare",
  "url": "https://arizare.com/projects/",
  "author": {
    "name": "Ari (Hamid) Zare",
    "url": "https://arizare.com"
  },
  "updated": "2026-10-23",
  "projects": [
    {
      "slug": "determined",
      "name": "Determined",
      "tagline": "Open-source deep learning training platform for GPU clusters, acquired by HPE",
      "description": "Open-source platform for distributed training, hyperparameter search, and GPU cluster resource management, with a Go master, a Python training harness, and Kubernetes and Slurm resource managers. Joined Determined AI as engineer #14 in 2019 and stayed through the 2021 HPE acquisition, working across the job scheduler, metrics storage, Kubernetes support, APIs, and CLI. Landed 695 merged PRs in the public repo, which has 3k+ GitHub stars.",
      "highlights": [
        "Built the job queue: persisted jobs, queue position in the WebUI and CLI, then reordering, priority, and weight controls",
        "Fixed priority scheduler preemption and unified ordering logic across the Kubernetes and priority schedulers",
        "Moved metrics to partitioned PostgreSQL tables with generic custom-type metrics, summary metrics, and Python SDK support",
        "Led the PyTorch Lightning adapter integration, with mixed precision support, docs, and examples",
        "Cut CLI startup time by 80% through dependency tree analysis and lazy imports"
      ],
      "period": "2019 - 2024",
      "stack": [
        "Go",
        "Python",
        "PostgreSQL",
        "Kubernetes",
        "gRPC",
        "TypeScript"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/determined-ai/determined"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/determined-1.webp",
          "width": 1600,
          "height": 802,
          "alt": "Determined web UI experiment page with best validation metric curve and a table of trials",
          "kind": "image"
        }
      ],
      "tier": "feature",
      "featured": true,
      "path": "/projects/determined/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/determined/"
    },
    {
      "slug": "multi-cluster-kubernetes-gateway-proxies",
      "name": "Multi-cluster Kubernetes gateway proxies",
      "tagline": "One Determined master running tasks across multiple Kubernetes clusters through gateway proxies",
      "description": "Feature in the open-source Determined platform that lets a single master schedule tasks across multiple Kubernetes clusters and resource managers. Gateway resources deploy alongside each task's rank 0 pod, and task ports are translated to a configurable range of gateway listener ports so proxied traffic reaches tasks in remote clusters. Led the project at HPE through implementation, tests, and user docs, and spun out a developer tool that connects a local dev cluster to remote Kubernetes clusters.",
      "highlights": [
        "Port translation from gateway listeners to proxied task ports, with a configurable and validated port range",
        "Gateway resources deployed only with rank 0 pods, and gateway startup hardened to run without passwordless sudo",
        "Multi-node, multi-port test experiments in CI, port registry tests, and task logs captured on failure",
        "Authored the user documentation for gateway setup",
        "Built a developer tool to connect a local dev cluster to remote Kubernetes clusters"
      ],
      "period": "2024",
      "stack": [
        "Go",
        "Kubernetes",
        "Helm",
        "Python"
      ],
      "links": [],
      "media": [],
      "tier": "feature",
      "featured": true,
      "path": "/projects/multi-cluster-kubernetes-gateway-proxies/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/multi-cluster-kubernetes-gateway-proxies/"
    },
    {
      "slug": "mao",
      "name": "mao",
      "tagline": "Multi-agent orchestrator that fans one prompt across coding agents and reconciles the results",
      "description": "Python orchestrator that runs CLI coding agents concurrently in fan-out, fan-in, and organizer pipelines, and tracks their sessions across machines. A hosted console authenticates requests and enqueues typed commands into a Postgres registry; per-machine workers claim them with leases, run local agents, and report topology. The browser never executes shell commands or sees secrets, and API contracts are OpenAPI snapshots with generated clients and drift checks.",
      "highlights": [
        "Durable command queue with lease-claimed workers and separate write-control leases per session",
        "Fan-out, fan-in, and organizer pipelines across six agent CLIs with per-agent timeouts, retries, and quota-aware profile selection",
        "Batched Go process collector replacing Python polling on workers, backed by benchmarks",
        "Security model recorded as ADRs, including sandboxed artifact rendering and an approval-intent flow",
        "append-only registry migrations enforced by a static check"
      ],
      "period": "2026",
      "stack": [
        "Python",
        "PostgreSQL",
        "FastAPI",
        "Go",
        "React",
        "Docker"
      ],
      "links": [
        {
          "label": "Live",
          "url": "https://mao.lbyte.app"
        }
      ],
      "media": [],
      "tier": "feature",
      "featured": true,
      "path": "/projects/mao/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/mao/"
    },
    {
      "slug": "virtualcam",
      "name": "VirtualCam",
      "tagline": "Face tracking and background effects for any video call app",
      "description": "Real-time virtual camera pipeline that captures a camera or screen, runs segmentation and face tracking, and outputs through v4l2loopback on Linux or OBS Virtual Camera on macOS. Started in 2020 because Zoom had no virtual backgrounds on Linux; now adds background blur and swap, desk view, gesture reactions, and a native SwiftUI menu bar app that drives a managed Python worker over a JSONL protocol. 71 GitHub stars.",
      "highlights": [
        "Bounded frame loop that drains a command queue between frames, with output cadence decoupled from processing speed",
        "Segmentation backends (MediaPipe, Apple Vision, chroma key, motion-aware mask smoothing) compared on measured fixtures",
        "Native macOS menu bar app with profiles, camera identity handling, live-applied effects, and hold-to-compare",
        "Stabilized face-tracking framing with deadzones, time constants, and lost-face handling, plus desk-view perspective correction"
      ],
      "period": "2020 - 2026",
      "stack": [
        "Python",
        "OpenCV",
        "MediaPipe",
        "Swift",
        "SwiftUI",
        "v4l2loopback"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/webcam-mods"
        },
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/webcam-mods"
        },
        {
          "label": "Demo video",
          "url": "https://youtu.be/idp7ei-pF40"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/webcam-mods-1.webp",
          "width": 1280,
          "height": 720,
          "alt": "Webcam Mods virtual camera feed shown next to an ffmpeg stream log in a demo video",
          "kind": "video",
          "href": "https://www.youtube.com/watch?v=idp7ei-pF40"
        }
      ],
      "tier": "feature",
      "featured": true,
      "path": "/projects/virtualcam/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/virtualcam/"
    },
    {
      "slug": "genai-studio",
      "name": "GenAI Studio",
      "tagline": "Generative AI playground built on the Determined training platform at HPE",
      "description": "HPE's generative AI playground for deploying and prompting open models from a web UI, built on the Determined deep learning platform. As one of the early senior engineers, contributed to its design, iteration, and productionization. Platform work in the open-source repo includes proxying master requests to internal services, a new AWS deployment type, deployment health checks, and WebUI integration.",
      "highlights": [],
      "period": "2023 - 2024",
      "stack": [
        "Go",
        "Python",
        "Kubernetes",
        "AWS",
        "TypeScript"
      ],
      "links": [],
      "media": [],
      "tier": "feature",
      "featured": true,
      "path": "/projects/genai-studio/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/genai-studio/"
    },
    {
      "slug": "portable-browser",
      "name": "Portable Browser",
      "tagline": "Control plane that runs remote Chromium sessions and hands agents scoped CDP access",
      "description": "Control plane for remote browser sessions. Workers dial out over a single persistent WebSocket, so they need no inbound ports, and that connection multiplexes control messages, Chrome DevTools Protocol tunnels, and HTTP and WebSocket proxy frames under a zod-typed wire protocol. Consumers get short-lived scoped tokens, persistent browser profiles, and shared or exclusive session locks through an OpenAPI API, generated SDKs, a CLI, and an operator UI.",
      "highlights": [
        "Outbound-only worker tunnel multiplexing control, CDP, and proxy traffic over one WebSocket",
        "Session attachments with concurrency modes and advisory exclusive or shared locks on sessions and profiles",
        "Profile snapshots with retention and encrypted storage; uncertain uploads reconciled through a completion outbox, not blind retries",
        "Resource-aware workers: per-session memory cgroups, tab reaper, CDP watchdog, and health probes."
      ],
      "period": "2026",
      "stack": [
        "TypeScript",
        "PostgreSQL",
        "WebSocket",
        "Chrome DevTools Protocol"
      ],
      "links": [
        {
          "label": "Live",
          "url": "https://portable-browsers.lbyte.app"
        }
      ],
      "media": [],
      "tier": "feature",
      "featured": true,
      "path": "/projects/portable-browser/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/portable-browser/"
    },
    {
      "slug": "netsblox",
      "name": "NetsBlox",
      "tagline": "Networked block-based programming language for teaching distributed computing",
      "description": "Open-source, web-based visual programming environment that extends Snap! with message passing and remote procedure calls, so students build networked apps with blocks. As a research assistant at Vanderbilt ISIS from 2017 to 2019, worked on the Node.js server: the RPC framework, service caching, the message router, API doc generation, and CI. Landed 213 merged PRs and co-authored papers on the platform at SIGCSE and IEEE Blocks and Beyond.",
      "highlights": [
        "Improved messaging throughput by up to 24x under load with selective caching and cache busting near the networking layer",
        "Standardized a base class for RPC services, cutting lines of code by up to 70%",
        "Built a parser that generates documentation for service APIs, covering 130 modules",
        "Reduced production client bugs by 20% through automated browser tests, a chaos monkey, and CI",
        "Roboscape service work: access control and extendable ciphers including Speck"
      ],
      "period": "2017 - 2019",
      "stack": [
        "JavaScript",
        "Node.js",
        "MongoDB",
        "WebSockets",
        "Snap!"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/NetsBlox/NetsBlox"
        },
        {
          "label": "Live",
          "url": "https://netsblox.org"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/netsblox-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "NetsBlox home page with the Create button and the RoboScape extension banner",
          "kind": "screenshot",
          "href": "https://netsblox.org"
        },
        {
          "src": "https://arizare.com/assets/images/projects/netsblox-2.webp",
          "width": 1056,
          "height": 686,
          "alt": "NetsBlox editor showing a Hangman game built from visual blocks next to its stage",
          "kind": "image"
        }
      ],
      "tier": "feature",
      "featured": true,
      "path": "/projects/netsblox/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/netsblox/"
    },
    {
      "slug": "zmenu",
      "name": "zmenu",
      "tagline": "Fast native fuzzy menu for macOS, written in Zig directly against AppKit",
      "description": "dmenu-style fuzzy menu that drives AppKit from Zig through the Objective-C runtime. Items arrive on stdin or live over a versioned, length-prefixed JSON IPC socket via zmenuctl, are filtered with fuzzy matching and a Levenshtein fallback, and the selection prints to stdout. Startup latency is measured with benchmarks that send real keyboard events, and it serves as the UI for ComboSwitcher. Started in 2023 as GMenu, a Go version, and rewritten in Zig in 2026.",
      "highlights": [
        "Pure-Zig AppKit app with hand-written Objective-C runtime bridging for views, table rows, and activation policy",
        "Cut median foreground handoff from 114.6 ms to 67.3 ms; launches that dropped keystrokes went from 10 of 10 to 0 of 10",
        "Versioned IPC protocol with length-prefixed JSON frames and forward-compatible unknown fields",
        "Repeatable visual regression, spawn, render, and startup benchmarks"
      ],
      "period": "2023 - 2026",
      "stack": [
        "Zig",
        "AppKit",
        "Objective-C runtime",
        "Unix sockets",
        "Swift"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/zmenu"
        },
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/gmenu"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/zmenu-1.webp",
          "width": 1200,
          "height": 600,
          "alt": "zmenu popup filtering a list by the query al and showing the matches alpha and alpine",
          "kind": "image"
        }
      ],
      "tier": "feature",
      "featured": true,
      "path": "/projects/zmenu/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/zmenu/"
    },
    {
      "slug": "gopm",
      "name": "gopm",
      "tagline": "PM2-style process manager in Go with a user-level daemon and sleep-aware cron",
      "description": "Process manager for long-running apps, shipped as one static Go binary. A Cobra CLI talks over a Unix socket to a user-level daemon that needs no sudo, adopts running children, persists run history in BoltDB, applies restart policies, captures logs, and sends crash-loop alerts. Cron scheduling follows wall-clock time across machine sleep, and the daemon is tuned for laptops with a single shared ticker for adopted processes.",
      "highlights": [
        "Cron scheduling on wall-clock time across sleep, with a configurable missed-run policy",
        "Battery-aware daemon that polls adopted processes from one shared ticker",
        "Signed macOS app bundle so Local Network permission persists; CLI upgrades refuse on daemon version mismatch",
        "Run history indexed by process, IPC read deadlines, and owner-only log and config permissions"
      ],
      "period": "2025 - 2026",
      "stack": [
        "Go",
        "Cobra",
        "BoltDB",
        "Unix sockets",
        "launchd"
      ],
      "links": [],
      "media": [],
      "tier": "feature",
      "featured": true,
      "path": "/projects/gopm/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/gopm/"
    },
    {
      "slug": "generalizable-q-learning-framework",
      "name": "Generalizable Q-Learning Framework",
      "tagline": "Deep Q-learning framework that trains agents for Snake, Tic-Tac-Toe, Connect-N, and CartPole",
      "description": "Python framework built around a reusable Double DQN agent with a target network, replay memory, Huber loss, and epsilon decay, plus a shared game interface so new environments plug in as small drivers. Supports self-play training for two-player games and ships trained Tic-Tac-Toe weights and Snake reward curves.",
      "highlights": [
        "Reusable Double DQN agent with target network, replay memory, and configurable hyperparameters shared across games",
        "Self-play training loop for adversarial games such as Tic-Tac-Toe and Connect-N",
        "Training diagnostics: moving-average reward plots, outlier removal, and SIGINT-safe stats saving",
        "Distance-based reward shaping for Snake, with reward and score curves included"
      ],
      "period": "2018",
      "stack": [
        "Python",
        "Keras",
        "TensorFlow",
        "OpenAI Gym",
        "Matplotlib"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/q-learning"
        }
      ],
      "media": [],
      "tier": "feature",
      "featured": true,
      "path": "/projects/generalizable-q-learning-framework/",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/generalizable-q-learning-framework/"
    },
    {
      "slug": "browser-control",
      "name": "Browser Control",
      "tagline": "Lets CLI coding agents drive a real browser through a Go daemon and Native Messaging bridge",
      "description": "Automation layer that lets CLI coding agents operate a real Chrome, Firefox, or Zen browser. A Go CLI talks over a Unix socket to a local daemon, and a Native Messaging host relays framed JSON to a Manifest V3 extension, built on the open-source ScriptCat userscript manager, that owns a dedicated agent window. Agents get per-task session leases, tab access controls, screenshots, page snapshots with element refs, and a guide mode that draws steps on the page and waits for the human.",
      "highlights": [
        "Go daemon, CLI, and Native Messaging shim with a stable JSON protocol and multi-browser, multi-profile routing",
        "Agent safety model: registered agent window, per-session tab leases, and marker checks that never fall back to the personal window",
        "Page API for agents: snapshots with refs, batched actions, page-origin fetch, console and network monitoring, viewport emulation",
        "Hardened against hangs with framed message offloading, cancellation of queued requests, and clean daemon and shim shutdown",
        "Human-in-the-loop guide mode where the agent draws steps on the page and blocks until the human responds"
      ],
      "period": "2026",
      "stack": [
        "Go",
        "TypeScript",
        "React",
        "Manifest V3",
        "Native Messaging",
        "Playwright"
      ],
      "links": [],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#browser-control",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#browser-control"
    },
    {
      "slug": "openwrt-store",
      "name": "openwrt-store",
      "tagline": "Durable JSON record store for a home router with CAS, atomic batches, and change feeds",
      "description": "Always-on record store for home-LAN apps, running on an OpenWrt router as a 3 MB static binary. An axum service on a single-threaded tokio runtime over SQLite in WAL mode provides namespaces, bearer tokens and quotas, store-wide monotonic revisions, If-Match compare-and-swap, atomic batches, and long-poll change feeds. Durability settings were chosen from benchmarks run on the router itself.",
      "highlights": [
        "Store-wide monotonic revisions, If-Match compare-and-swap, atomic batches, and long-poll change feeds",
        "fsync on every commit, chosen after measuring a 509 ms WAL checkpoint stall on the router",
        "On-router benchmarks: 4,877 gets/s at 0.39 ms p50 and 282 durable puts/s at 6.7 ms p50, with 3.5 MB peak RSS",
        "Static arm64 build, procd service behind nginx, sysupgrade preservation, and an append-only migration check"
      ],
      "period": "2026",
      "stack": [
        "Rust",
        "axum",
        "tokio",
        "SQLite",
        "OpenWrt",
        "nginx"
      ],
      "links": [],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#openwrt-store",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#openwrt-store"
    },
    {
      "slug": "dubit",
      "name": "Dubit",
      "tagline": "Duration-aware video dubbing with translated speech fitted to the original timing",
      "description": "Web app that dubs videos from their timed captions, starting with Persian. The pipeline groups captions into cost-aware chunks, translates each against a target duration, synthesizes speech through pluggable TTS providers, then measures every clip and stretches it with pitch preserved, pads silence, or shortens and re-synthesizes it to fit its source window before mixing dialogue over the original audio bed. Jobs are asynchronous and resumable, with Postgres-backed checkpoints, caching, and per-job cost tracking.",
      "highlights": [
        "Duration-fit pipeline: time-budgeted translation, TTS measurement, pitch-preserving stretch, silence padding, and shorten-and-retry for overlong clips",
        "Learned voice pacing: characters per second estimated from recent jobs per voice, with outlier trimming and shrinkage toward a prior",
        "Cost controls: cost-aware chunking, an estimate endpoint, TTS and transcript caches, and per-job cost aggregation",
        "Long-running job hardening: cancel locks, resumable checkpoints, blocking work kept off the event loop, streamed downloads",
        "OpenAPI contract with a generated TypeScript client and an append-only migration check"
      ],
      "period": "2025 - 2026",
      "stack": [
        "Python",
        "FastAPI",
        "PostgreSQL",
        "FFmpeg",
        "React",
        "TypeScript"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/dubit"
        },
        {
          "label": "Live",
          "url": "https://dubit.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/dubit-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Dubit landing page with a caption timeline and measured audio waveform fitted to the video timeline",
          "kind": "screenshot",
          "href": "https://dubit.lbyte.app"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#dubit",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#dubit"
    },
    {
      "slug": "doomgate",
      "name": "Doomgate",
      "tagline": "Android app that interrupts compulsive scrolling with pauses, time budgets, and surface blocking",
      "description": "Kotlin Android app that uses an AccessibilityService to interrupt reflexive app opens, meter per-app allowances, and block short-video surfaces such as Reels and Shorts while leaving messaging and search usable. A pure-Kotlin rule engine handles schedules, DST-aware hourly allowances, session caps, cooldowns, and strictness modes. Local-first by construction: no accounts or telemetry, with network use limited to signed APK update checks, enforced by automated release privacy gates.",
      "highlights": [
        "Surface recipes detect short-video views from accessibility trees, independent of the target app's version",
        "Layered modules with pure-JVM domain logic; a boundary check keeps on-device ML code out of the enforcement path",
        "Release privacy gates: permission allowlist, banned-dependency check, and Gradle dependency checksum verification",
        "Append-only Room schema checksums with a pre-push guard, and recorded architecture decisions",
        "Opt-in on-device surface training with MediaProjection and Gemini Nano through ML Kit GenAI"
      ],
      "period": "2026",
      "stack": [
        "Kotlin",
        "Jetpack Compose",
        "Room",
        "DataStore",
        "AccessibilityService",
        "ML Kit"
      ],
      "links": [],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#doomgate",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#doomgate"
    },
    {
      "slug": "forking-chat",
      "name": "Forking Chat",
      "tagline": "Restaurants upload their menus and guests chat with an AI assistant that knows them",
      "description": "Multi-tenant SaaS where restaurants upload menu images or PDFs, an LLM pipeline extracts and validates structured menus, and guests chat with a menu-aware assistant per restaurant. FastAPI and Postgres backend with sqlc-typed SQL, a React 19 UI served from a Cloudflare Worker, and a durable import job system with orphaned-job recovery. The public LLM endpoint is protected by layered per-guest and global rate limits, concurrency caps, and repetitive-content detection.",
      "highlights": [
        "LLM menu import with a durable job store, orphaned-job recovery at startup, retry caps, and size limits",
        "Layered abuse prevention: per-guest burst, 5-minute, and daily limits, global LLM call caps, and trusted-proxy IP handling",
        "Server-side tenant scoping with regression tests for private access, cross-tenant slug collisions, and prompt isolation",
        "Contract-first stack: OpenAPI-generated TypeScript client, sqlc typed SQL, and append-only migrations checked before push",
        "Hermetic Playwright suite with route mocking covering guest chat, dashboard, auth refresh, and SEO"
      ],
      "period": "2025 - 2026",
      "stack": [
        "Python",
        "FastAPI",
        "PostgreSQL",
        "React",
        "TypeScript",
        "Cloudflare Workers"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/forkingchat"
        }
      ],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#forking-chat",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#forking-chat"
    },
    {
      "slug": "investments",
      "name": "Investments",
      "tagline": "Looks through funds to true sector, region, and fee exposure, and picks ETF mixes with a MILP",
      "description": "Portfolio analysis web app that imports holdings from OFX/QFX, brokerage CSV, and other exports, then splits each holding across sectors, regions, and underlying companies, including funds of funds, using SEC N-PORT filings and prospectus fee data. It compares portfolios against saved targets, models fee drag and switch plans, and solves ETF selection as a mixed-integer program with HiGHS in WebAssembly on a worker thread. Multi-user, with private per-user data, export, and delete.",
      "highlights": [
        "ETF selection as a MILP with tolerance bands and ticker caps, solved by HiGHS in WebAssembly off the main thread",
        "Fund look-through from SEC N-PORT filings and prospectus fee tables, with region, sector, and company-overlap views",
        "Pure TypeScript domain layer with no I/O; importers covered by golden tests frozen from the earlier Python implementation",
        "Per-user privacy: no-store private API responses, uploads isolated from shared data, full export and delete",
        "Unit, golden, integration, and desktop and mobile Playwright test suites"
      ],
      "period": "2025 - 2026",
      "stack": [
        "TypeScript",
        "Next.js",
        "Bun",
        "PostgreSQL",
        "Drizzle",
        "HiGHS"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/investments"
        },
        {
          "label": "Live",
          "url": "https://investments.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/investments-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Investments landing page with a look-through sector allocation bar chart on synthetic data",
          "kind": "screenshot",
          "href": "https://investments.lbyte.app"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#investments",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#investments"
    },
    {
      "slug": "compcalc",
      "name": "CompCalc",
      "tagline": "Browser-only compensation forecaster with stock scenarios and startup equity modeling",
      "description": "Static Next.js app that turns a compensation plan into a multi-year forecast across bear, base, and bull stock paths with a probability-weighted expected value. Models RSUs, ISO and NSO options with strikes, dilution, illiquid private equity until exit, vesting cliffs, promotions, and refreshers. All computation runs client-side with versioned plan files and undo, and offers import through the URL hash, so no data reaches a server.",
      "highlights": [
        "Scenario engine with named price paths, underwater-option handling, dilution, and expected value across scenarios",
        "Versioned plan files with migrations and a guard against malformed persisted state",
        "Offer import through a versioned URL-hash contract that never reaches the server",
        "Pure, tested calculation modules behind a Zustand store persisted to localStorage"
      ],
      "period": "2025 - 2026",
      "stack": [
        "TypeScript",
        "Next.js",
        "Zustand",
        "Recharts",
        "Tailwind"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/total-comp"
        },
        {
          "label": "Live",
          "url": "https://comp.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/total-comp-planner-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Total compensation planner showing yearly cash, equity and scenario summary cards",
          "kind": "screenshot",
          "href": "https://comp.lbyte.app"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#compcalc",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#compcalc"
    },
    {
      "slug": "roboscape-device-provisioning",
      "name": "Roboscape Device Provisioning",
      "tagline": "Mobile app that batch-provisions WiFi on classroom robots with no shared network",
      "description": "Cordova mobile app that configures groups of Parallax robots with Xbee WiFi modules when no common network exists, built for the Roboscape cybersecurity curriculum. After evaluating four provisioning strategies, including a WiFi Direct prototype the Xbee could not support, it treats each robot as an access point: the app scans, joins, configures, and rejoins the user's network in batch. Includes C firmware changes and opt-in ownership verification.",
      "highlights": [
        "Evaluated four provisioning strategies and shipped a robots-as-access-points batch flow",
        "Batch configuration with per-robot status and automatic rejoin of the original network",
        "Opt-in ownership verification that registers configured robots to the user's account",
        "Firmware changes in C: a button hold enters setup mode, signaled by a melody"
      ],
      "period": "2018 - 2019",
      "stack": [
        "JavaScript",
        "Cordova",
        "Vue",
        "C",
        "Android"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/NetsBlox/roboscape-provisioning"
        },
        {
          "label": "Camp page",
          "url": "https://cps-vo.org/group/CPSScamp18"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/roboscape-device-provisioning-1.webp",
          "width": 622,
          "height": 252,
          "alt": "Diagram of robot provisioning: provisioner supplies WiFi credentials so the robot can join the access point",
          "kind": "image"
        },
        {
          "src": "https://arizare.com/assets/images/projects/roboscape-device-provisioning-2.webp",
          "width": 722,
          "height": 324,
          "alt": "Diagram of claiming robot ownership with a preshared key through the NetsBlox server and RoboScape service",
          "kind": "image"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#roboscape-device-provisioning",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#roboscape-device-provisioning"
    },
    {
      "slug": "msc-thesis-hands-on-ai-and-cybersecurity-education-in-high-schools",
      "name": "MSc thesis: Hands-On AI and Cybersecurity Education in High Schools",
      "tagline": "Vanderbilt master's thesis on block-based AI and cybersecurity education tools",
      "description": "Master's thesis in computer science at Vanderbilt on hands-on AI and cybersecurity education for high school students. Contributions include Visual RL, a Snap!-based reinforcement learning playground with Q-learning abstractions; portable batch provisioning and access control for networked RoboScape robots; and NetsBlox Player, a mobile runtime for NetsBlox projects. The cybersecurity lessons expose virtual network traffic so students can attack and defend networked robots.",
      "highlights": [
        "Block-based Q-learning abstractions that let high school students train agents in Snap!",
        "Batch provisioning and access control for networked RoboScape classroom robots",
        "NetsBlox Player, a cross-platform mobile runtime for networked NetsBlox projects",
        "Built on RoboScape, which exposes virtual network traffic so students can attack and defend robots"
      ],
      "period": "2019",
      "stack": [
        "NetsBlox",
        "Snap!",
        "JavaScript",
        "Reinforcement learning",
        "LaTeX"
      ],
      "links": [],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/msc-thesis-1.webp",
          "width": 1284,
          "height": 792,
          "alt": "NetsBlox editor with a weather map project built from visual blocks",
          "kind": "image"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#msc-thesis-hands-on-ai-and-cybersecurity-education-in-high-schools",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#msc-thesis-hands-on-ai-and-cybersecurity-education-in-high-schools"
    },
    {
      "slug": "latent-byte-utils",
      "name": "Latent Byte Utils",
      "tagline": "Android utility app, starting with highly configurable home and lock screen widgets",
      "description": "Kotlin and Jetpack Compose app built around a pluggable utility registry. Its first utility is a single Glance widget that renders photos, folders, feeds, JSON values, web page snapshots, and offline trackers such as countdowns, counters, and habits. WorkManager refreshes content with last-good fallback, Wi-Fi-only and quiet-hours rules, change alerts, and dedupe of identical fetches. Ships signed APKs with an in-app updater.",
      "highlights": [
        "Editor live preview rendered by the real Glance widget code rather than a mock",
        "Persisted-schema discipline with stable serial names and field defaults so stored widgets survive upgrades",
        "Release pipeline derives versionCode, pins and verifies the signing certificate SHA-256, and prunes old releases",
        "One content widget for every source plus plugin kinds for offline trackers"
      ],
      "period": "2026",
      "stack": [
        "Kotlin",
        "Jetpack Compose",
        "Glance",
        "WorkManager",
        "OkHttp",
        "kotlinx.serialization"
      ],
      "links": [],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#latent-byte-utils",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#latent-byte-utils"
    },
    {
      "slug": "pycalc",
      "name": "PyCalc",
      "tagline": "Plugin-based calculators where Pydantic models generate the web UI, charts, and SEO pages",
      "description": "Calculator platform where each calculator is a Python plugin with Pydantic input and output models and a compute function. A React UI renders forms from the input schema and results, stat tiles, trend charts, and tables from the output schema, so a new calculator needs no frontend code. The live calculator models rental properties with taxes, depreciation, sale costs, and a year-by-year buy versus rent-and-invest comparison, served as crawlable server-rendered pages.",
      "highlights": [
        "Auto-discovered plugins: one logic.py with Input, Output, and compute is a complete calculator",
        "Server-rendered pages with JSON-LD, generated 1200x630 Open Graph images, sitemap, and canonical redirects",
        "Rental-property model with federal and state tax, NIIT, depreciation, sale costs, and buy versus rent-and-invest",
        "Shareable input links, saved inputs, and an optional LLM explanation of results using your own OpenAI or OpenRouter key"
      ],
      "period": "2023 - 2026",
      "stack": [
        "Python",
        "Flask",
        "Pydantic",
        "React",
        "TypeScript",
        "Tailwind"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/calculators"
        },
        {
          "label": "Live",
          "url": "https://calculators.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/py-calculator-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Rental property calculator with input form and a results summary of net worth versus market",
          "kind": "screenshot",
          "href": "https://calculators.lbyte.app/rental-property"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#pycalc",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#pycalc"
    },
    {
      "slug": "roamline",
      "name": "Roamline",
      "tagline": "Trip planner for comparing multi-stop routes, deciding as a group, and sharing travel history",
      "description": "Full-stack trip planner for comparing alternative multi-stop routes, coordinating group decisions, and sharing travel history. A React and MapLibre SPA talks to a Hono API on Bun backed by PostgreSQL with PostGIS and a self-hosted reference geodata layer, so place labels and regions need no third-party API. Time and location are captured exactly, and viewing precision is applied when shared.",
      "highlights": [
        "Self-hosted reference geodata layer with import and re-resolve, referenced by opaque ids",
        "Precision model: capture exact time and location, then coarsen location and time when shared",
        "Companions, voting, comments, itinerary legs, and read-only share links with a no-referrer policy and CSP",
        "Tests against a PostGIS test database, zod-validated API bodies, and a trip-level authorization module"
      ],
      "period": "2026",
      "stack": [
        "TypeScript",
        "Bun",
        "Hono",
        "React",
        "MapLibre",
        "PostgreSQL/PostGIS"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/roamline"
        },
        {
          "label": "Live",
          "url": "https://roamline.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/roamline-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Roamline landing page with a ranked multi-destination route preview starting from Lisbon",
          "kind": "screenshot",
          "href": "https://roamline.lbyte.app"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#roamline",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#roamline"
    },
    {
      "slug": "comboswitcher",
      "name": "ComboSwitcher",
      "tagline": "One fuzzy menu over windows, apps, browser tabs, tmux sessions, files, and scripts on macOS",
      "description": "Daily-driver launcher and window switcher for macOS, inspired by Rofi on Linux. A Go daemon aggregates items from pluggable providers, including tiling window manager windows, installed apps, browser tabs, tmux sessions, recent files, and external scripts, then ranks and merges them by usage and drives the zmenu UI over Unix-socket IPC. A thin client toggles it from a hotkey.",
      "highlights": [
        "Provider plugin architecture plus a versioned external-script protocol with discovery and manifest caching",
        "Usage-based scoring with expiry, focus history, and dedupe across window, app, and tab entries",
        "Written incident review with root cause and a regression test for a window dropped after a workspace switch",
        "The daemon restarts on config change and refreshes its catalog on AC power"
      ],
      "period": "2024 - 2026",
      "stack": [
        "Go",
        "Cobra",
        "Viper",
        "Unix sockets",
        "AeroSpace",
        "Zig (zmenu UI)"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/combo-switcher"
        }
      ],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#comboswitcher",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#comboswitcher"
    },
    {
      "slug": "filter-merge",
      "name": "filter-merge",
      "tagline": "Low-memory DNS filter-list merger for AdGuard Home on OpenWrt routers",
      "description": "Zero-dependency Rust HTTP server that downloads configured DNS filter lists, merges them with an external sort over bounded on-disk runs, drops duplicate rules across lists, and serves one merged list on loopback for AdGuard Home. On a GL-MT3000 router, AdGuard RSS fell 30.5% right after activation and restart (12.4% once warmed), while the merger and its curl downloads peaked at 11.3 MiB combined. Ships static ARM64 and x86_64 binaries with a checksum-verifying OpenWrt installer.",
      "highlights": [
        "External merge sort with 2 MiB sorted runs and a k-way combine with dedupe, under hard input, output, and time caps",
        "AdGuard RSS dropped from 136.7 MiB to 95.0 MiB right after activation and restart; 1M-rule output verified by an independent hash",
        "Size-optimized static binary with no crate dependencies, about 452 KiB as released",
        "Release pipeline publishes static binaries and SHA256SUMS with a procd installer that verifies checksums"
      ],
      "period": "2026",
      "stack": [
        "Rust",
        "OpenWrt",
        "Shell",
        "GitHub Actions"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/filter-merge"
        }
      ],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#filter-merge",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#filter-merge"
    },
    {
      "slug": "netstats",
      "name": "netstats",
      "tagline": "Network-quality monitor in Go that runs on an OpenWrt router",
      "description": "Go collector that probes targets over ICMP and TCP every 5 seconds, stores samples in SQLite, and serves stats through a CLI, an HTTP API, and a dashboard hosted on the router itself. Runs on Linux, macOS, and OpenWrt. On the router it keeps the live database in RAM and snapshots it to flash to limit wear, and adds on-demand speed tests recorded with connection context.",
      "highlights": [
        "Flash-wear-aware storage: live SQLite DB in RAM, gzip snapshots every 30 minutes and on shutdown, restored on boot",
        "Weighted compaction of old samples and trimmed query memory so the dashboard fits a constrained router",
        "Speed-test API limited to the local network: Origin and header checks, loopback-only trusted proxy, SHA-256 pinned binary",
        "Cross-compiled one-command router deploy, plus battery-aware probe rates on macOS"
      ],
      "period": "2025 - 2026",
      "stack": [
        "Go",
        "SQLite",
        "OpenWrt",
        "nginx",
        "JavaScript",
        "Shell"
      ],
      "links": [],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#netstats",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#netstats"
    },
    {
      "slug": "aboard",
      "name": "ABoard",
      "tagline": "Android keyboard that reads on-screen conversation context and drafts LLM replies",
      "description": "Extends an open-source Jetpack Compose keyboard into an AI reply assistant for Android. Captures conversation context through MediaProjection screenshots with ML Kit OCR or an AccessibilityService text pipeline, filters it into a structured prompt, calls LLMs through OpenRouter, retrying without tools when a model lacks tool support, and inserts the chosen reply into the focused field. Ships signed APK releases with an in-app updater.",
      "highlights": [
        "Two context-capture paths, screenshot OCR and accessibility tree, with event filtering and conversation extraction",
        "Prompt context reduction tuned from context bundles exported from real devices, with analyzer and filter-suggester scripts",
        "Assistant overlays outside the IME: floating handle, voice-bubble dictation, and text insertion into focused fields",
        "Release pipeline with signed APKs, retention pruning, a shared in-app updater module, and tested Python release tooling"
      ],
      "period": "2026",
      "stack": [
        "Kotlin",
        "Jetpack Compose",
        "Android IME",
        "AccessibilityService",
        "ML Kit",
        "OpenRouter"
      ],
      "links": [],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#aboard",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#aboard"
    },
    {
      "slug": "markdown-notes",
      "name": "Markdown Notes",
      "tagline": "Mobile PWA editor for a git-backed Markdown notes file, with no database",
      "description": "Self-hosted web editor for a Markdown notes file kept in a git repository, with git as the only storage and sync layer. Parses lines into typed blocks, applies small line patches guarded by block hashes so concurrent edits are detected, commits every accepted write, and syncs with fetch, rebase, and push. Includes OIDC sign-in, an offline PWA with queued writes, a conflict-resolution UI, and vim-style navigation.",
      "highlights": [
        "Lossless block model preserves unknown text, CRLF line endings, fenced code, and exact heading identity across edits",
        "Hash-guarded line patches detect concurrent edits, with block-level conflict previews and recovery after failed commits",
        "Security pass: git option injection blocked in repo URL and branch, sandboxed file serving, fail-closed auth",
        "Offline write queue with replay in a mobile-first card UI, plus a raw view and vim keybindings"
      ],
      "period": "2026",
      "stack": [
        "TypeScript",
        "Bun",
        "Hono",
        "Vite",
        "git",
        "Docker"
      ],
      "links": [],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#markdown-notes",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#markdown-notes"
    },
    {
      "slug": "anonymous-inbox",
      "name": "Anonymous Inbox",
      "tagline": "Anonymous two-way inbox: share a link, senders write back without an account",
      "description": "Owners sign in, publish an inbox link, and receive messages from senders who need no account. Senders return to their thread with a secret capability code carried only in the URL fragment and stored server-side as a peppered fingerprint. Owner notifications never include message text. Built on Next.js and Postgres with validated server actions, rate limiting, and a custom migration runner.",
      "highlights": [
        "Capability codes live only in URL fragments and form posts, stored as peppered fingerprints; sender sessions use encrypted cookies",
        "Abuse controls: DB-backed rate-limit buckets, proxy-aware client IP extraction, anti-bot checks, and a same-origin CSRF guard",
        "Custom SQL migration runner with sha256 checksums, an advisory lock, and an append-only check against the trunk merge-base",
        "Zod-validated server actions over a separate domain layer"
      ],
      "period": "2026",
      "stack": [
        "TypeScript",
        "Next.js",
        "React",
        "PostgreSQL",
        "Drizzle",
        "Bun"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/anonymous-msg"
        },
        {
          "label": "Live",
          "url": "https://anonymous-msg.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/anonymous-inbox-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Anonymous Inbox landing page with create inbox and check a reply actions",
          "kind": "screenshot",
          "href": "https://anonymous-msg.lbyte.app"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#anonymous-inbox",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#anonymous-inbox"
    },
    {
      "slug": "calendar",
      "name": "Calendar",
      "tagline": "Merged multi-user calendar agenda with push alerts, plus a CLI for status bars and availability",
      "description": "Python toolkit that started as a CLI for ICS feeds (status bar output, next events, HTML agenda, multi-timezone availability) and grew into a multi-user FastAPI server. Users sign in, add private calendar feed URLs, and get a merged agenda, shareable links, and web push notifications. The CLI and server share one ICS loading and recurrence-expansion core.",
      "highlights": [
        "Recurrence handling covers overrides, RECURRENCE-ID timezones, EXDATE DST folds, and lookback windows, with regression tests",
        "Feed fetching hardened with SSRF guards, a source allowlist, a 10 MB cap, unlogged feed URLs, and at most one fetch per hour",
        "Postgres-backed feed cache; tests run against throwaway Postgres 18 containers with per-test schemas",
        "Append-only migration guard wired into static checks and a pre-push hook"
      ],
      "period": "2025 - 2026",
      "stack": [
        "Python",
        "FastAPI",
        "PostgreSQL",
        "Web Push",
        "Docker",
        "uv"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/calendar"
        },
        {
          "label": "Live",
          "url": "https://calendar.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/calendar-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Calendar app landing page listing merged agenda, share links and reminders features",
          "kind": "screenshot",
          "href": "https://calendar.lbyte.app"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#calendar",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#calendar"
    },
    {
      "slug": "falcon-9-simulation",
      "name": "Falcon 9 Simulation",
      "tagline": "Numerical simulation of a reusable rocket launch and landing that minimizes leftover fuel",
      "description": "Two-person project simulating a Falcon 9 style rocket in 2D as it climbs to a 200 km apogee and performs a landing burn, modeling thrust, gravity, drag, and altitude-dependent air density. Each flight stage is re-solved with adjusted launch ratio, takeoff angle, and landing-burn parameters to converge on the profile that minimizes leftover propellant and maximizes horizontal velocity at apogee. Prototyped in Matlab, then ported to Python.",
      "highlights": [
        "Iterative thrust and landing-burn solvers that warm-start from the previous best parameters",
        "Altitude-dependent atmosphere and drag model, with plotted attempts, altitudes, and angles for each run",
        "Cached results and batch plotting controlled by CLI flags for timestep, attempt limits, save, and load",
        "16 GitHub stars"
      ],
      "period": "2018",
      "stack": [
        "Python",
        "NumPy",
        "Matplotlib",
        "Matlab"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/rocket-simulation"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/falcon-9-simulation-1.webp",
          "width": 640,
          "height": 480,
          "alt": "Simulated rocket trajectory plot of altitude against horizontal position in kilometers",
          "kind": "image"
        },
        {
          "src": "https://arizare.com/assets/images/projects/falcon-9-simulation-2.webp",
          "width": 640,
          "height": 480,
          "alt": "Plot of explored landing burn altitudes converging across optimizer iterations",
          "kind": "image"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#falcon-9-simulation",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#falcon-9-simulation"
    },
    {
      "slug": "next-block-prediction",
      "name": "Next Block Prediction",
      "tagline": "Language models that suggest the next block in block-based programs",
      "description": "Graduate research that treats block-based programs (Scratch, NetsBlox) as token sequences and predicts the next block a student will use. Compares n-gram models with Kneser-Ney smoothing, evaluated by perplexity, against GRU and LSTM networks using one-hot or word2vec block embeddings, trained on a public Scratch project corpus. Includes t-SNE views of block embeddings and an interactive top-3 predictor.",
      "highlights": [
        "N-gram baselines with add-one and interpolated Kneser-Ney smoothing, evaluated by perplexity on a sample set",
        "One-hot vs word2vec-embedded RNNs with configurable GRU or LSTM cells and dropout",
        "Domain-aware tokenizer that splits programs into valid language blocks, with duplicate detection and parallel preprocessing",
        "t-SNE visualizations of learned block embeddings and n-gram distribution charts"
      ],
      "period": "2017",
      "stack": [
        "Python",
        "TensorFlow",
        "Keras",
        "word2vec",
        "Matplotlib"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/next-block-prediction"
        }
      ],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#next-block-prediction",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#next-block-prediction"
    },
    {
      "slug": "distributed-pubsub-broker",
      "name": "Distributed PubSub Broker",
      "tagline": "Topic-based publish/subscribe broker over a Chord-style DHT with failure detection",
      "description": "Led a student team that designed and built a resilient topic-based pub/sub broker from scratch in Python and ZeroMQ, exploring Chord and ZooKeeper based designs. Event servers form a consistent-hash ring; publishers and subscribers look up the node that owns a topic, register, and exchange events, and heartbeats trigger re-lookup and re-registration when a server dies. Evaluated on Mininet network topologies with latency measurements.",
      "highlights": [
        "Chord-style DHT prototype with finger tables, node join and leave, and successor lookup",
        "Failure handling: heartbeat detection, a ring organizer that drops dead nodes, and automatic client re-lookup and re-registration",
        "Consistent hashing maps topics to event servers, with clients registering over ZeroMQ request/reply and receiving events over pub/sub",
        "Mininet topology simulations measuring publish-to-subscribe latency"
      ],
      "period": "2017",
      "stack": [
        "Python",
        "ZeroMQ",
        "Chord DHT",
        "ZooKeeper",
        "Mininet"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/pubsub-broker"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/distributed-pubsub-broker-1.webp",
          "width": 1600,
          "height": 1122,
          "alt": "Simulated star topology with publisher, subscriber and broker apps connected through a switch",
          "kind": "image"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#distributed-pubsub-broker",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#distributed-pubsub-broker"
    },
    {
      "slug": "branchlogic",
      "name": "BranchLogic",
      "tagline": "Write a decision tree in YAML and share a link that walks anyone through it step by step",
      "description": "Web app that turns small YAML decision trees, including loops and conditional branches, into navigable step-by-step walkthroughs. Trees are validated against a JSON schema, edited in an in-browser Monaco YAML editor with schema-aware completion, and stored locally, with breadcrumbs, back navigation, and shareable deep links to any step. Served as a static SPA from Cloudflare Workers.",
      "highlights": [
        "YAML-to-interactive-tree pipeline with JSON Schema validation (ajv) and schema-aware Monaco editing in the browser",
        "Shareable deep links to any step, with validated restore of navigation paths and skipping of corrupt stored trees",
        "Six bundled sample trees, including a walkthrough of how a dog reacts to any object",
        "Lazy-loaded routes, security headers, SEO metadata, and tests for routing and SEO"
      ],
      "period": "2020 - 2026",
      "stack": [
        "TypeScript",
        "React",
        "Vite",
        "Material UI",
        "Monaco Editor",
        "Cloudflare Workers"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/decision-tree"
        },
        {
          "label": "Live",
          "url": "https://decision-tree.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/decision-tree-1.webp",
          "width": 740,
          "height": 439,
          "alt": "Example decision tree starting at Weather with branches to Time, Hungry and Bus, Walk outcomes",
          "kind": "image"
        },
        {
          "src": "https://arizare.com/assets/images/projects/decision-tree-2.webp",
          "width": 1440,
          "height": 340,
          "alt": "Decision tree app asking how is the weather with Rain, Sun and Cloud answer buttons",
          "kind": "screenshot",
          "href": "https://decision-tree.lbyte.app/dt/work-journey"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#branchlogic",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#branchlogic"
    },
    {
      "slug": "netsblox-player",
      "name": "NetsBlox Player",
      "tagline": "Mobile app that runs networked NetsBlox projects on Android and iOS",
      "description": "Ionic and Cordova app that embeds the full NetsBlox browser client so students can run their networked block-based programs on phones and tablets. Kept in sync with the web client through a submodule and rebuild script, with mobile-specific keyboard and room-tab UX fixes.",
      "highlights": [
        "Wrapped the NetsBlox web client in a native mobile shell for Android and iOS",
        "Submodule-based update script that rebuilds the embedded client when the web app changes",
        "Mobile UX fixes for on-screen keyboard handling and room tabs"
      ],
      "period": "2017 - 2019",
      "stack": [
        "Ionic",
        "Cordova",
        "TypeScript",
        "JavaScript",
        "Android"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/NetsBlox/mobile"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/netsblox-player-1.webp",
          "width": 406,
          "height": 481,
          "alt": "NetsBlox Player mobile app running an earthquake map project with an Open button",
          "kind": "image"
        },
        {
          "src": "https://arizare.com/assets/images/projects/netsblox-player-2.webp",
          "width": 1080,
          "height": 1920,
          "alt": "NetsBlox Player mobile app room view with roleA and roleB slots for collaborating",
          "kind": "image"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#netsblox-player",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#netsblox-player"
    },
    {
      "slug": "stackrank",
      "name": "Stackrank",
      "tagline": "Mobile-first stack ranking for text, links, and images with shareable campaigns",
      "description": "Owners build a campaign of text, link, or image items, publish a share link, and respondents drag-rank on touch, pointer, or keyboard, with results aggregated per campaign. Images go through an HMAC-signed upload proxy to object storage that treats uncertain storage writes as accepted and reconciles them through idempotent completion instead of blind retries. Built on Next.js and Postgres.",
      "highlights": [
        "Upload proxy maps storage timeouts, 409/412, and 5xx to 202 and reconciles via idempotent completion, and surfaces platform storage-quota errors",
        "Accessible drag ranking with keyboard, pointer, and touch support via dnd-kit",
        "Content Security Policy, an append-only migration check before push, and a health endpoint reporting the deployed commit",
        "Generated typed client for platform APIs, plus sitemap, robots, and Open Graph images for sharing"
      ],
      "period": "2026",
      "stack": [
        "TypeScript",
        "Next.js",
        "React",
        "PostgreSQL",
        "Drizzle",
        "dnd-kit"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/stack-ranker"
        },
        {
          "label": "Live",
          "url": "https://ranked.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/stackrank-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Stackrank landing page with a draggable ranked list of launch priorities",
          "kind": "screenshot",
          "href": "https://ranked.lbyte.app"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#stackrank",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#stackrank"
    },
    {
      "slug": "small-web-utilities",
      "name": "Small Web Utilities",
      "tagline": "Shareable link lists, AI question links, and contact cards served from the edge",
      "description": "Monorepo of small public web tools, including Linked List, Let Me Do That For You, and a shareable contact card with QR code. Linked List encodes anonymous lists entirely in the URL and serves them from a Cloudflare Worker, so they keep working when the origin is down, while signed-in managed lists pass through to a Next.js and Postgres origin. Analytics are scrubbed of phone numbers and contact details before tracking.",
      "highlights": [
        "Edge split: URL-encoded anonymous lists render from a Cloudflare Worker independent of the origin; managed routes proxy through",
        "Legacy CORS proxy with a target-host allowlist and a private-IP blocklist re-checked on every redirect hop to block SSRF",
        "Privacy-preserving analytics helper that strips phone numbers and contact details from tracked URLs, with tests",
        "Append-only migration check enforced by a pre-push hook"
      ],
      "period": "2025 - 2026",
      "stack": [
        "TypeScript",
        "JavaScript",
        "Next.js",
        "Cloudflare Workers",
        "PostgreSQL",
        "Bun"
      ],
      "links": [
        {
          "label": "Product page: Let Me Do That For You",
          "url": "https://latentbyte.com/products/let-me-do-that-for-you"
        },
        {
          "label": "Product page: Linked List",
          "url": "https://latentbyte.com/products/linked-list"
        },
        {
          "label": "Product page: Contact Me",
          "url": "https://latentbyte.com/products/contact-me"
        },
        {
          "label": "Live: Linked List",
          "url": "https://linkedlist.lbyte.app"
        },
        {
          "label": "Live: Let Me Do That For You",
          "url": "https://letmedothatforyou.lbyte.app"
        },
        {
          "label": "Live: Utilities",
          "url": "https://utils.apps.latentbyte.com"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/serverless-pages-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Linked List page maker landing page with a preview of an ordered list of links",
          "kind": "screenshot",
          "href": "https://linkedlist.lbyte.app"
        },
        {
          "src": "https://arizare.com/assets/images/projects/serverless-pages-2.webp",
          "width": 1440,
          "height": 900,
          "alt": "Let me do that for you page with a question box and buttons for Google, ChatGPT, Claude and others",
          "kind": "screenshot",
          "href": "https://letmedothatforyou.lbyte.app"
        },
        {
          "src": "https://arizare.com/assets/images/projects/serverless-pages-3.webp",
          "width": 1440,
          "height": 900,
          "alt": "LBC Utilities launcher with cards for Hotel Launcher, Let Me Do That For You, ContactMe and Linked List",
          "kind": "screenshot",
          "href": "https://utils.apps.latentbyte.com"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#small-web-utilities",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#small-web-utilities"
    },
    {
      "slug": "task-manager-nvim",
      "name": "task-manager.nvim",
      "tagline": "Neovim plugin to triage, prioritize, and sort Markdown to-do lists",
      "description": "Lua plugin for Markdown task lists in Neovim. Assigns [pN] priorities interactively, moves tasks between categories with generated shortcuts, sorts stably by priority while preserving sub-item hierarchy, and moves checked tasks to the bottom of their section. A headless regression harness runs in CI across Neovim stable, v0.10.0, and nightly.",
      "highlights": [
        "Stable priority sort that preserves nested sub-items and keeps orphan sub-items in place",
        "Checked-task moves bounded by nested headings so items never leave their section",
        "Interactive triage flow with generated category shortcuts and configurable keymaps",
        "Headless test harness in a CI matrix over Neovim stable, v0.10.0, and nightly"
      ],
      "period": "2025 - 2026",
      "stack": [
        "Lua",
        "Neovim API",
        "GitHub Actions"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/task-manager.nvim"
        }
      ],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#task-manager-nvim",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#task-manager-nvim"
    },
    {
      "slug": "user-scripts",
      "name": "user-scripts",
      "tagline": "Browser userscripts for web annoyances, from review-aware shopping scores to GitHub tweaks",
      "description": "Public collection of browser userscripts organized by site, built from a separate typed TypeScript source repo. Adds review-aware scoring to Amazon, Airbnb, and AliExpress listings using a Wilson lower bound ranked relative to the page, puts failing GitHub checks first and adds PR diff stats, auto-mutes Meet and Teams, and adds shift-click range selection to web dashboards.",
      "highlights": [
        "Wilson lower bound scoring with page-relative ranking, so listings with a handful of reviews do not outrank proven ones",
        "Site enhancers that survive SPA navigation and dynamic re-renders on Airbnb, Hostelworld, and Super.com",
        "GitHub workflow scripts: failing checks sorted first and diff stats on PR lists",
        "Scripts for 21 sites, published as installable .user.js files from a linted, type-checked source build"
      ],
      "period": "2019 - 2026",
      "stack": [
        "JavaScript",
        "TypeScript",
        "Tampermonkey",
        "Violentmonkey"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/user-scripts"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/user-scripts-1.webp",
          "width": 1600,
          "height": 914,
          "alt": "Userscript adding score and value sorting to an Airbnb listings grid",
          "kind": "image"
        },
        {
          "src": "https://arizare.com/assets/images/projects/user-scripts-2.webp",
          "width": 1600,
          "height": 1125,
          "alt": "Userscript overlaying review-based score badges on Amazon search results",
          "kind": "image"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#user-scripts",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#user-scripts"
    },
    {
      "slug": "visual-machine-learning",
      "name": "Visual Machine Learning",
      "tagline": "Machine learning and reinforcement learning blocks for the Snap! visual programming environment",
      "description": "Research prototype at Vanderbilt that exposes machine learning and reinforcement learning as blocks in Snap!, so students can train agents without writing text code. Runs in the browser with TensorFlow.js with a deep Q-learning agent (neural Q-network with replay memory) exposed as blocks, and blocks to build, train and save models.",
      "highlights": [
        "Block-level ML and RL abstractions for Snap!, aimed at teaching learning concepts to students",
        "Deep Q-learning agent on TensorFlow.js exposed as Snap blocks, with model save and load",
        "Blocks for defining, compiling and fitting TensorFlow.js models"
      ],
      "period": "2018",
      "stack": [
        "JavaScript",
        "TensorFlow.js",
        "Snap!"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/Snap--Build-Your-Own-Blocks/tree/rl-snap"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/visual-machine-learning-1.webp",
          "width": 426,
          "height": 207,
          "alt": "Snap block script that creates a Q-learning agent, loads a model and trains it with blocks",
          "kind": "image"
        },
        {
          "src": "https://arizare.com/assets/images/projects/visual-machine-learning-2.webp",
          "width": 1111,
          "height": 639,
          "alt": "Snap visual blocks for building, compiling, fitting and predicting with a machine learning model",
          "kind": "image"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#visual-machine-learning",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#visual-machine-learning"
    },
    {
      "slug": "fog-alert",
      "name": "Fog Alert",
      "tagline": "Fog-based intrusion detection with a Raspberry Pi camera, MQTT, and pluggable detectors",
      "description": "Led a two-person team building an intrusion detection system from decoupled components: an edge Raspberry Pi captures camera frames, an analyzer server classifies them with swappable detectors, and alerts flow over an MQTT broker to a NodeMCU alert module. End-to-end timing carried through the message path compares cloud and fog deployments, and Ansible provisions the broker and servers.",
      "highlights": [
        "Components decoupled over MQTT pub/sub so languages and hardware can be mixed freely",
        "End-to-end latency instrumentation carrying publish time through MQTT to compare cloud and fog setups",
        "Swappable detector modules on the analyzer server",
        "Ansible playbooks provisioning the MQTT broker and web servers"
      ],
      "period": "2018",
      "stack": [
        "Python",
        "MQTT",
        "Raspberry Pi",
        "Arduino",
        "Ansible",
        "Docker"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/fog-alert"
        }
      ],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#fog-alert",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#fog-alert"
    },
    {
      "slug": "sketch-adventures",
      "name": "Sketch Adventures",
      "tagline": "Global Game Jam 2018 game where hand-drawn doodles come to life",
      "description": "Global Game Jam 2018 team entry in Rust: players move with the arrow keys and draw with the mouse, and each drawing is classified by a CNN trained on Quick, Draw! doodles, then spawned into the world as an entity, a few of which affect gameplay. Contributed the Python recognition side: the 10-category classifier wrapper, drawing preprocessing, and the predictor output consumed by the game.",
      "highlights": [
        "Sketch recognition wired into gameplay: the Rust game calls a Python CNN classifier and spawns the predicted entity",
        "Built the 10-category doodle classifier integration and a parseable predictor output format",
        "Drawing preprocessing that trims user sketches to square and resizes them for the model",
        "Made in a single jam weekend, partly as a way to learn Rust"
      ],
      "period": "2018",
      "stack": [
        "Rust",
        "Python",
        "Piston"
      ],
      "links": [
        {
          "label": "GitHub",
          "url": "https://github.com/hamidzr/gamejam-2018"
        }
      ],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#sketch-adventures",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#sketch-adventures"
    },
    {
      "slug": "humanize",
      "name": "Humanize",
      "tagline": "Offline, deterministic prose checker and rewriter with a CLI and an OpenAPI web API",
      "description": "Rule-based writing tool that reports repetitive-prose metrics and applies small deterministic edits, such as wordy phrases, punctuation, optional contractions, typos, and formatting cleanup, with no model or network calls. A seeded batch mode distributes options across many drafts exactly and reports cross-item repetition. One engine powers a Bun CLI and a web workbench with a contract-first API.",
      "highlights": [
        "Prose rewrites skip protected spans such as code, links, URLs, and quoted text by routing through one prose-mapping path",
        "Seeded batch mode allocates option shares exactly and reports cross-item repetition",
        "Contract-first Hono API: zod routes generate the OpenAPI 3.1 spec and a typed client, with a drift check, plus a tested llms.txt",
        "Privacy-tested analytics with payload sanitization, host gating, and Do Not Track support"
      ],
      "period": "2026",
      "stack": [
        "TypeScript",
        "Bun",
        "Hono",
        "zod",
        "Next.js",
        "Docker"
      ],
      "links": [
        {
          "label": "Product page",
          "url": "https://latentbyte.com/products/humanize"
        },
        {
          "label": "Live",
          "url": "https://humanize.lbyte.app"
        }
      ],
      "media": [
        {
          "src": "https://arizare.com/assets/images/projects/humanize-1.webp",
          "width": 1440,
          "height": 900,
          "alt": "Humanize prose rewriter with side by side Before and After panels for a draft",
          "kind": "screenshot",
          "href": "https://humanize.lbyte.app"
        }
      ],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#humanize",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#humanize"
    },
    {
      "slug": "snippet-recorder",
      "name": "Snippet Recorder",
      "tagline": "Android app for quick text and voice notes with on-device Gemini Nano summaries",
      "description": "Flutter app that captures text snippets and voice recordings, stores them locally, and optionally transcribes audio through Deepgram. Generates titles and summaries on-device with Gemini Nano through ML Kit via a Kotlin platform channel, with a fallback path on unsupported devices. Ships as signed APKs with an in-app updater and scripted release tooling.",
      "highlights": [
        "On-device LLM titles and summaries via Gemini Nano, with a tested fallback when the device lacks support",
        "Release flow with a fingerprint-pinned signing key, generated update catalog, and pruning of old releases",
        "Fixes for save and restore races covering drafts, interrupted processing, and startup restoration"
      ],
      "period": "2026",
      "stack": [
        "Flutter",
        "Dart",
        "Kotlin",
        "ML Kit",
        "Deepgram",
        "Android"
      ],
      "links": [],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#snippet-recorder",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#snippet-recorder"
    },
    {
      "slug": "qlearner-js",
      "name": "QLearner.js",
      "tagline": "Q-learning agent library that trains in the browser with TensorFlow.js",
      "description": "JavaScript port of an earlier Python deep Q-learning project that trains agents directly in the browser with TensorFlow.js. Provides an agent with replay memory, player and game abstractions, a live training-history chart, and a tic-tac-toe demo where the agent trains against an alpha-beta minimax opponent.",
      "highlights": [
        "DQN-style agent with replay memory and a capped memory size, trained entirely client-side",
        "Agent save and load so trained models persist between sessions",
        "Live training-history chart and a tic-tac-toe training demo against a minimax opponent"
      ],
      "period": "2018",
      "stack": [
        "JavaScript",
        "TensorFlow.js",
        "Chart.js",
        "Babel"
      ],
      "links": [],
      "media": [],
      "tier": "keep",
      "featured": false,
      "path": "/projects/#qlearner-js",
      "updated": "2026-10-23",
      "url": "https://arizare.com/projects/#qlearner-js"
    }
  ]
}
