{
  "meta": {
    "api": "londopy",
    "version": "1.0.0",
    "generated": "2026-09-25T06:35:47.999Z",
    "self": "https://londopy.github.io/api/v1/search.json",
    "docs": "https://londopy.github.io/api/",
    "count": 56
  },
  "data": [
    {
      "kind": "page",
      "title": "Projects",
      "subtitle": "The full index, grouped by domain",
      "path": "/",
      "url": "https://londopy.github.io/",
      "keywords": [
        "home",
        "index",
        "work",
        "portfolio"
      ]
    },
    {
      "kind": "page",
      "title": "About",
      "subtitle": "The longer version of who's behind the projects",
      "path": "/about/",
      "url": "https://londopy.github.io/about/",
      "keywords": [
        "bio",
        "me",
        "who"
      ]
    },
    {
      "kind": "page",
      "title": "Now",
      "subtitle": "What I'm focused on this month",
      "path": "/now/",
      "url": "https://londopy.github.io/now/",
      "keywords": [
        "current",
        "doing",
        "status",
        "update"
      ]
    },
    {
      "kind": "page",
      "title": "Résumé",
      "subtitle": "One page, prints to PDF",
      "path": "/resume/",
      "url": "https://londopy.github.io/resume/",
      "keywords": [
        "resume",
        "cv",
        "hire",
        "internship",
        "education",
        "experience"
      ]
    },
    {
      "kind": "page",
      "title": "Contact",
      "subtitle": "Send a message, PGP optional",
      "path": "/contact/",
      "url": "https://londopy.github.io/contact/",
      "keywords": [
        "email",
        "message",
        "hire",
        "pgp",
        "reach"
      ]
    },
    {
      "kind": "page",
      "title": "Blog",
      "subtitle": "Notes on security, systems, radio, and building things",
      "path": "/blog/",
      "url": "https://londopy.github.io/blog/",
      "keywords": [
        "posts",
        "writing",
        "articles"
      ]
    },
    {
      "kind": "page",
      "title": "API",
      "subtitle": "Everything here as JSON, with an OpenAPI spec",
      "path": "/api/",
      "url": "https://londopy.github.io/api/",
      "keywords": [
        "json",
        "openapi",
        "developer",
        "endpoints"
      ]
    },
    {
      "kind": "project",
      "title": "nexium",
      "subtitle": "A programming language of my own — compiles to native code through C, with automatic reference counting (no tracing GC) and a machine-checked effect system that says what a function is allowed to do. Self-hosting compiler.",
      "path": "/projects/nexium/",
      "url": "https://londopy.github.io/projects/nexium/",
      "keywords": [
        "Nexium",
        "C",
        "compiler",
        "language",
        "effect-system",
        "arc",
        "Dev tooling, libraries & languages",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "gesture-synth",
      "subtitle": "A chord instrument you play with your hands in front of a camera. MediaPipe hand-tracking drives a synth; loop it and watch the harmony. A monorepo spanning Rust/WASM, Svelte + Three.js, a Tauri app, a Zig DSP kernel, and a Gleam service.",
      "path": "/projects/gesture-synth/",
      "url": "https://londopy.github.io/projects/gesture-synth/",
      "keywords": [
        "TypeScript",
        "Rust",
        "Svelte",
        "Gleam",
        "Zig",
        "mediapipe",
        "music",
        "wasm",
        "tauri",
        "Audio",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "capture-bypass",
      "subtitle": "DLL-injection tool that bypasses screen-capture protection on Windows 10/11. Multi-crate workspace, egui GUI, Inno installer.",
      "path": "/projects/capture-bypass/",
      "url": "https://londopy.github.io/projects/capture-bypass/",
      "keywords": [
        "Rust",
        "windows",
        "dll-injection",
        "egui",
        "Systems & Windows internals",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "HideDesktopApps",
      "subtitle": "Tray utility to hide desktop icons, taskbar, and windows via hotkeys — for ricing, Wallpaper Engine, and presentations.",
      "path": "/projects/HideDesktopApps/",
      "url": "https://londopy.github.io/projects/HideDesktopApps/",
      "keywords": [
        "Rust",
        "windows",
        "tray",
        "scoop",
        "Systems & Windows internals",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "clipvault",
      "subtitle": "Keyboard-first clipboard-manager daemon: system-wide capture, ring buffer, hotkey overlay.",
      "path": "/projects/clipvault/",
      "url": "https://londopy.github.io/projects/clipvault/",
      "keywords": [
        "Rust",
        "daemon",
        "clipboard",
        "hotkeys",
        "Systems & Windows internals"
      ]
    },
    {
      "kind": "project",
      "title": "pc-optimizer",
      "subtitle": "\"PC Optimizer Pro\" — Windows tweak, fan-control, RGB, and debloat suite living in the tray.",
      "path": "/projects/pc-optimizer/",
      "url": "https://londopy.github.io/projects/pc-optimizer/",
      "keywords": [
        "Python",
        "windows",
        "tweaks",
        "tray",
        "Systems & Windows internals"
      ]
    },
    {
      "kind": "project",
      "title": "drugdose",
      "subtitle": "EMS & clinical drug-dosing calculator — weight-based dosing, 49-drug database, interaction rules.",
      "path": "/projects/drugdose/",
      "url": "https://londopy.github.io/projects/drugdose/",
      "keywords": [
        "Python",
        "ems",
        "pypi",
        "calculator",
        "Pre-hospital & clinical medicine"
      ]
    },
    {
      "kind": "project",
      "title": "vitalscore",
      "subtitle": "Clinical scoring calculators — severity and triage scores as a clean Python API.",
      "path": "/projects/vitalscore/",
      "url": "https://londopy.github.io/projects/vitalscore/",
      "keywords": [
        "Python",
        "clinical",
        "pypi",
        "triage",
        "Pre-hospital & clinical medicine"
      ]
    },
    {
      "kind": "project",
      "title": "Clinical_IQ",
      "subtitle": "Point-of-care decision support for emergency medicine.",
      "path": "/projects/Clinical_IQ/",
      "url": "https://londopy.github.io/projects/Clinical_IQ/",
      "keywords": [
        "TypeScript",
        "emergency-medicine",
        "decision-support",
        "Pre-hospital & clinical medicine"
      ]
    },
    {
      "kind": "project",
      "title": "akribia",
      "subtitle": "Computational model of precision-weighted Bayesian inference across autism, ADHD, and PPCS — with a live in-browser demo.",
      "path": "/projects/akribia/",
      "url": "https://londopy.github.io/projects/akribia/",
      "keywords": [
        "Python",
        "bayesian",
        "neuroscience",
        "simulation",
        "Pre-hospital & clinical medicine"
      ]
    },
    {
      "kind": "project",
      "title": "DiresQ",
      "subtitle": "Disaster-response app that tracks the responders, not just the incidents — join a report, check in on a timer, and the accountability board turns red if you go dark. Flask backend, built at Katy Youth Hacks 2026.",
      "path": "/projects/DiresQ/",
      "url": "https://londopy.github.io/projects/DiresQ/",
      "keywords": [
        "Python",
        "flask",
        "emergency-response",
        "hackathon",
        "Pre-hospital & clinical medicine",
        "featured",
        "award",
        "Reverie Hacks 2026"
      ]
    },
    {
      "kind": "project",
      "title": "ropesim",
      "subtitle": "Models lead-fall dynamics with a damped spring / RK4 integrator in Rust, exposed to Python via PyO3/Maturin. Ships a full Python API, a five-command CLI, and a PySide6 desktop GUI.",
      "path": "/projects/ropesim/",
      "url": "https://londopy.github.io/projects/ropesim/",
      "keywords": [
        "Rust",
        "Python",
        "C++",
        "physics",
        "pypi",
        "pyo3",
        "cli",
        "gui",
        "Climbing, outdoors & physics",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "apollo-rope-memory",
      "subtitle": "Working replica of Apollo-era core rope memory — ferrite toroids, induction read, comparator front-end.",
      "path": "/projects/apollo-rope-memory/",
      "url": "https://londopy.github.io/projects/apollo-rope-memory/",
      "keywords": [
        "C++",
        "arduino",
        "hardware",
        "retrocomputing",
        "Climbing, outdoors & physics"
      ]
    },
    {
      "kind": "project",
      "title": "pygeospy",
      "subtitle": "GEOINT/OSINT library, Rust-accelerated — SAR grids, EXIF, and terrain analysis.",
      "path": "/projects/pygeospy/",
      "url": "https://londopy.github.io/projects/pygeospy/",
      "keywords": [
        "Python",
        "Rust",
        "geoint",
        "osint",
        "sar",
        "Geospatial / OSINT"
      ]
    },
    {
      "kind": "project",
      "title": "qbit-killswitch",
      "subtitle": "VPN killswitch daemon for qBittorrent — pauses torrents the instant your public IP changes. Cross-platform tray app.",
      "path": "/projects/qbit-killswitch/",
      "url": "https://londopy.github.io/projects/qbit-killswitch/",
      "keywords": [
        "Rust",
        "vpn",
        "daemon",
        "privacy",
        "Networking & privacy"
      ]
    },
    {
      "kind": "project",
      "title": "mullvad-wg-monitor",
      "subtitle": "Benchmarks and monitors Mullvad WireGuard endpoints.",
      "path": "/projects/mullvad-wg-monitor/",
      "url": "https://londopy.github.io/projects/mullvad-wg-monitor/",
      "keywords": [
        "Python",
        "wireguard",
        "benchmarking",
        "Networking & privacy"
      ]
    },
    {
      "kind": "project",
      "title": "patchnotes",
      "subtitle": "Parser and tooling for Keep a Changelog changelogs.",
      "path": "/projects/patchnotes/",
      "url": "https://londopy.github.io/projects/patchnotes/",
      "keywords": [
        "Python",
        "changelog",
        "pypi",
        "parser",
        "Dev tooling, libraries & languages",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "timefuzz",
      "subtitle": "Fuzzy natural-language time parsing that goes past dateparser — resolves phrases like \"end of Q3\" or \"the Tuesday after my birthday\" into datetimes or ranges, each with a confidence score. Rust core, Python API.",
      "path": "/projects/timefuzz/",
      "url": "https://londopy.github.io/projects/timefuzz/",
      "keywords": [
        "Rust",
        "Python",
        "nlp",
        "datetime",
        "pyo3",
        "pypi",
        "Dev tooling, libraries & languages",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "Live_Video_Feed_Facial_Recognition",
      "subtitle": "Real-time facial recognition pipeline running on a live webcam or video feed.",
      "path": "/projects/Live_Video_Feed_Facial_Recognition/",
      "url": "https://londopy.github.io/projects/Live_Video_Feed_Facial_Recognition/",
      "keywords": [
        "Python",
        "computer-vision",
        "opencv",
        "AI & computer vision"
      ]
    },
    {
      "kind": "project",
      "title": "convo-generator",
      "subtitle": "Conversation and dialogue generator.",
      "path": "/projects/convo-generator/",
      "url": "https://londopy.github.io/projects/convo-generator/",
      "keywords": [
        "Python",
        "nlp",
        "generation",
        "AI & computer vision"
      ]
    },
    {
      "kind": "project",
      "title": "kto",
      "subtitle": "\"Kick Them Out\" v3 — WiFi security-assessment tool with CLI, TUI, and GUI. Authorized use only.",
      "path": "/projects/kto/",
      "url": "https://londopy.github.io/projects/kto/",
      "keywords": [
        "Rust",
        "wifi",
        "assessment",
        "authorized-use",
        "Security tooling"
      ]
    },
    {
      "kind": "project",
      "title": "deadpoint",
      "subtitle": "Purple-team RNG analysis toolkit — detects predictable randomness (MT19937, LCG, xorshift), recovers the generator's state to prove it, then recommends the fix. Embedded/OT audit framing.",
      "path": "/projects/deadpoint/",
      "url": "https://londopy.github.io/projects/deadpoint/",
      "keywords": [
        "Python",
        "Rust",
        "prng",
        "z3",
        "purple-team",
        "pypi",
        "Security tooling",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "nxtls",
      "subtitle": "Cryptography and a TLS 1.3 client written entirely in Nexium — SHA-2 through X.509 chain validation, with no C and no unsafe. Checked against the RFC vectors, Python's cryptography and OpenSSL 3; early, and not yet reviewed by a TLS expert.",
      "path": "/projects/nxtls/",
      "url": "https://londopy.github.io/projects/nxtls/",
      "keywords": [
        "Nexium",
        "Python",
        "cryptography",
        "tls",
        "nexium",
        "Security tooling"
      ]
    },
    {
      "kind": "project",
      "title": "ValoTracker",
      "subtitle": "Real-time VALORANT match tracker — 10-player ranks, stats, and encounter history. Reads only 127.0.0.1, no login.",
      "path": "/projects/ValoTracker/",
      "url": "https://londopy.github.io/projects/ValoTracker/",
      "keywords": [
        "Rust",
        "valorant",
        "local-api",
        "Consumer & games"
      ]
    },
    {
      "kind": "project",
      "title": "IEM-Tool-rs",
      "subtitle": "Offline desktop tool for reviewing, tuning, and comparing in-ear monitors — Rust core, Tauri app, cross-platform builds. Based on IEM Tool by MyLittlePrimordia.",
      "path": "/projects/IEM-Tool-rs/",
      "url": "https://londopy.github.io/projects/IEM-Tool-rs/",
      "keywords": [
        "Rust",
        "audio",
        "tauri",
        "desktop",
        "Audio"
      ]
    },
    {
      "kind": "project",
      "title": "whumpf",
      "subtitle": "Avalanche bulletins projected onto the real mountain in 3D. Slope, aspect, and elevation are packed into RGBA tiles and filtered in a GLSL shader, so a whole range recomputes as you drag a slider. Sentinel-2 / LiDAR, CesiumJS.",
      "path": "/projects/whumpf/",
      "url": "https://londopy.github.io/projects/whumpf/",
      "keywords": [
        "TypeScript",
        "Python",
        "Rust",
        "avalanche",
        "3d-terrain",
        "webgl",
        "geospatial",
        "Climbing, outdoors & physics"
      ]
    },
    {
      "kind": "project",
      "title": "filekind",
      "subtitle": "Make a custom file extension a real, recognised file type — on Windows, Linux and macOS — from one declarative spec. Generates the registry tree, freedesktop MIME XML, macOS UTI plist, icons in three formats, and the install/remove scripts. Rust core, Tauri app + CLI.",
      "path": "/projects/filekind/",
      "url": "https://londopy.github.io/projects/filekind/",
      "keywords": [
        "Rust",
        "file-types",
        "cross-platform",
        "tauri",
        "cli",
        "Dev tooling, libraries & languages",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "beam",
      "subtitle": "Send files and text between devices, browser to browser, by scanning a QR code. A direct WebRTC connection — no accounts, no uploads, no server of your own. A handful of static files on GitHub Pages.",
      "path": "/projects/beam/",
      "url": "https://londopy.github.io/projects/beam/",
      "keywords": [
        "JavaScript",
        "webrtc",
        "p2p",
        "privacy",
        "Networking & privacy"
      ]
    },
    {
      "kind": "project",
      "title": "agent-skills",
      "subtitle": "The whole rollcall family in one install — skill-rollcall, mcp-rollcall, settings-effective, git-attribution — for Claude Code, Codex, Cursor, Gemini CLI, Copilot, OpenCode and every other Agent Skills host. Each stays synced from its own upstream repo, pinned and drift-checked in CI.",
      "path": "/projects/agent-skills/",
      "url": "https://londopy.github.io/projects/agent-skills/",
      "keywords": [
        "Python",
        "agent-skills",
        "claude-code",
        "codex",
        "cursor",
        "mcp",
        "Agent tooling"
      ]
    },
    {
      "kind": "project",
      "title": "skill-rollcall",
      "subtitle": "Roll call of your agent's skills — who is here, who is new, who is never going to show up, and why — for the host you're in or all of them. Rebuilds each host's skill index from disk with the reasons attached, then repairs, lints, or audits. Claude Code, Codex, Cursor, Gemini CLI, Copilot, OpenCode.",
      "path": "/projects/skill-rollcall/",
      "url": "https://londopy.github.io/projects/skill-rollcall/",
      "keywords": [
        "Python",
        "claude-code",
        "cli",
        "codex",
        "cursor",
        "skills",
        "Agent tooling"
      ]
    },
    {
      "kind": "project",
      "title": "mcp-rollcall",
      "subtitle": "Roll call of your MCP servers across every agent's config — Claude Code, Codex config.toml, Cursor, Gemini CLI, Copilot, VS Code, Windsurf, OpenCode — which will fail to connect and exactly why (bad paths, unset env, dead ports, the server’s own stderr), and what each one costs you in tools and context.",
      "path": "/projects/mcp-rollcall/",
      "url": "https://londopy.github.io/projects/mcp-rollcall/",
      "keywords": [
        "Python",
        "claude-code",
        "codex",
        "cursor",
        "diagnostics",
        "mcp",
        "Agent tooling"
      ]
    },
    {
      "kind": "project",
      "title": "settings-effective",
      "subtitle": "The Claude Code settings actually in effect — every key, which of the six settings files decided it, and why the value you set is not applying. Runs from any agent and says which one.",
      "path": "/projects/settings-effective/",
      "url": "https://londopy.github.io/projects/settings-effective/",
      "keywords": [
        "Python",
        "claude-code",
        "cli",
        "settings",
        "Agent tooling"
      ]
    },
    {
      "kind": "project",
      "title": "git-attribution",
      "subtitle": "Find and remove AI co-author attribution from your git history — whether Claude Code, Codex or Copilot is still adding it and where that switch lives, which commits carry it, scrub them, and block it going forward.",
      "path": "/projects/git-attribution/",
      "url": "https://londopy.github.io/projects/git-attribution/",
      "keywords": [
        "Python",
        "claude-code",
        "cli",
        "codex",
        "cursor",
        "git",
        "Agent tooling"
      ]
    },
    {
      "kind": "project",
      "title": "statusmith",
      "subtitle": "Write your own Discord Rich Presence from the tray — details, images, timers, party size and buttons, with saved presets, live variables and rotation. Talks to Discord’s local RPC pipe the way a game does, so it never sees your account token. Tauri 2, cross-platform, ships a Nexium SDK.",
      "path": "/projects/statusmith/",
      "url": "https://londopy.github.io/projects/statusmith/",
      "keywords": [
        "JavaScript",
        "Rust",
        "Nexium",
        "Python",
        "discord",
        "nexium",
        "tauri",
        "tray",
        "cross-platform",
        "Consumer & games",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "point-of-origin",
      "subtitle": "A side-scrolling platformer where the puzzle is the ground. Your lantern shows only the ghost of what grew here, so you run the ruins to learn its shape — then find the cell it started from, plant a seed, and grow it back. A reverse cellular automaton, with an Odin simulation DLL, Nexium tooling and Unity 6. Built for CPGD’s World’s First Game Jam (theme: ORIGIN).",
      "path": "/projects/point-of-origin/",
      "url": "https://londopy.github.io/projects/point-of-origin/",
      "keywords": [
        "C#",
        "Nexium",
        "Odin",
        "Python",
        "game-jam",
        "unity",
        "cellular-automaton",
        "nexium",
        "Consumer & games",
        "featured"
      ]
    },
    {
      "kind": "project",
      "title": "the-long-fork",
      "subtitle": "A repo whose only purpose is to be forked, one link at a time, as deep as it'll go. Every fork appends one hash-chained line and may set one cell of a shared 64×32 canvas; a GitHub Action walks the fork tree twice a day and publishes the chain.",
      "path": "/projects/the-long-fork/",
      "url": "https://londopy.github.io/projects/the-long-fork/",
      "keywords": [
        "Python",
        "social-experiment",
        "github-actions",
        "hash-chain",
        "Consumer & games"
      ]
    },
    {
      "kind": "domain",
      "title": "Systems & Windows internals",
      "subtitle": "Rust tooling that goes under the hood of Windows — injection, hooks, tray daemons.",
      "path": "/#systems",
      "url": "https://londopy.github.io/#systems",
      "keywords": [
        "systems"
      ]
    },
    {
      "kind": "domain",
      "title": "Security tooling",
      "subtitle": "Assessment tools for authorized use, with the framing to match — and cryptography built up from the RFCs.",
      "path": "/#security",
      "url": "https://londopy.github.io/#security",
      "keywords": [
        "security"
      ]
    },
    {
      "kind": "domain",
      "title": "Pre-hospital & clinical medicine",
      "subtitle": "Calculators, decision support, and computational models built from the EMS track.",
      "path": "/#medicine",
      "url": "https://londopy.github.io/#medicine",
      "keywords": [
        "medicine"
      ]
    },
    {
      "kind": "domain",
      "title": "Climbing, outdoors & physics",
      "subtitle": "Physics engines and hardware replicas for rope, rock, and retro aerospace.",
      "path": "/#climbing",
      "url": "https://londopy.github.io/#climbing",
      "keywords": [
        "climbing"
      ]
    },
    {
      "kind": "domain",
      "title": "Geospatial / OSINT",
      "subtitle": "Rust-accelerated geospatial intelligence tooling.",
      "path": "/#geospatial",
      "url": "https://londopy.github.io/#geospatial",
      "keywords": [
        "geospatial"
      ]
    },
    {
      "kind": "domain",
      "title": "Networking & privacy",
      "subtitle": "Daemons and monitors that keep traffic where it belongs.",
      "path": "/#networking",
      "url": "https://londopy.github.io/#networking",
      "keywords": [
        "networking"
      ]
    },
    {
      "kind": "domain",
      "title": "Dev tooling, libraries & languages",
      "subtitle": "Small, sharp libraries on PyPI — plus a compiler and cross-platform tooling of my own.",
      "path": "/#devtools",
      "url": "https://londopy.github.io/#devtools",
      "keywords": [
        "devtools"
      ]
    },
    {
      "kind": "domain",
      "title": "Agent tooling",
      "subtitle": "Single-file, stdlib-only tools that make what your coding agent does silently legible — which skills registered, which MCP servers fail and why, which settings file won, and who signed your commits. For Claude Code, Codex, Cursor, Gemini CLI, Copilot and every other Agent Skills host.",
      "path": "/#claude-tooling",
      "url": "https://londopy.github.io/#claude-tooling",
      "keywords": [
        "claude-tooling"
      ]
    },
    {
      "kind": "domain",
      "title": "AI & computer vision",
      "subtitle": "Real-time vision pipelines and generative experiments.",
      "path": "/#ai",
      "url": "https://londopy.github.io/#ai",
      "keywords": [
        "ai"
      ]
    },
    {
      "kind": "domain",
      "title": "Consumer & games",
      "subtitle": "Tools for the games I play and the apps I live in — plus a couple of games of my own.",
      "path": "/#games",
      "url": "https://londopy.github.io/#games",
      "keywords": [
        "games"
      ]
    },
    {
      "kind": "domain",
      "title": "Audio",
      "subtitle": "Desktop tools for hearing gear and tuning.",
      "path": "/#audio",
      "url": "https://londopy.github.io/#audio",
      "keywords": [
        "audio"
      ]
    },
    {
      "kind": "post",
      "title": "When Alligator Counts as Fish & Why I'm a Pescatarian",
      "subtitle": "For two thousand years, religions have argued about where meat ends and fish begins, with rulings on beavers, alligators, and geese that grow on driftwood. I've lived on that line for eight years. Here's the history, the Daoist philosophy behind how I think about it, and how I actually eat.",
      "path": "/blog/posts/pescatarian/",
      "url": "https://londopy.github.io/blog/posts/pescatarian/",
      "keywords": [
        "blog",
        "post"
      ]
    },
    {
      "kind": "post",
      "title": "The Best Git Feature You've Never Used",
      "subtitle": "Every repo has a .gitignore. Almost nobody has a .gitattributes. Here's everything it can do: line endings, smarter diffs, merge strategies, filters, release archives, and GitHub extras.",
      "path": "/blog/posts/gitattributes/",
      "url": "https://londopy.github.io/blog/posts/gitattributes/",
      "keywords": [
        "blog",
        "post"
      ]
    }
  ]
}
