Featured Projects
View all
ClaudeBridge
1/18/2026
Self-Hosted Claude Pro Gateway. Turn your Claude Pro subscription into an OpenAI-compatible API with complete observability and cost estimation.

Browser-as-Middleware: a Zero-Infra Integration
2/25/2026
Glue a VPN-only legacy tool and a SaaS product with no data custody, using the browser session as the integration runtime.

CaptureMD
1/19/2026
Replace org-capture for markdown with a script living outside of Obsidian and connecting to various services
Recent Activity
Posts
Browser-as-Middleware: a Zero-Infra Integration
Project2/25/2026
Tmux Task Monitor
Project2/8/2026
Dataview TUI dashboard
Article2/3/2026
Obsidian I/O Solutions
Project2/3/2026
Personal Dotfiles
Project2/3/2026
Obsidian HTML dashboard
Article2/2/2026
CaptureMD
Project1/19/2026
ClaudeBridge
Project1/18/2026
Line-level links to tasks in Obsidian
Article1/13/2026
Dataview table query materialization
Article1/13/2025
Commits
5/8/2026
feat(macos): trim default profile and use user-level npm globals Turn off identity, tower, and llm in the public macOS profile, and make macOS global npm installs use ~/.local when sudo is unavailable so tooling lands under ~/.local/bin for the default shell PATH.5/8/2026
feat(hyprland): enable PKM and document downstream override strategy Keep profile vars loaded at play level, document the future override-map strategy in the public root wrapper, and enable the PKM role in the Hyprland archetype so Obsidian and related PKM tooling install without relying on downstream boolean precedence.5/8/2026
fix(apply): make public profiles self-selecting and driver checks tolerant Remove the global base-profile override, make wrapper playbooks set explicit profile names, drive role selection at runtime with include_role, accept branch-specific NVIDIA package families without extra vars, and harden generate_image/audio handling for existing machines.5/7/2026
fix(linux): tolerate existing desktop and audio state Link the real generate_image upstream entrypoint and replace leftover copied binaries cleanly, and skip pipewire-jack on machines that already carry jack2 so a public desktop apply does not force a destructive audio migration.5/7/2026
refactor(playbooks): make profile wrappers drive role selection Stop relying on parse-time role selection with base-profile globals, make the public wrappers set explicit profile names, load profile vars into facts at runtime, and use include_role so the selected profile actually controls which roles run.5/7/2026
fix(playbooks): load profile vars at runtime Stop resolving the selected profile through vars_files during parse time, which was falling back to the base profile. Load vars/profiles/<profile>.yml at runtime so the public wrappers and downstream imports actually activate the intended profile.5/7/2026
fix(apply): repair hyprland profile selection and sessionizer relink Make the Hyprland wrapper import the engine directly with the intended profile value, and remove legacy tmux-sessionizer file installs before replacing them with the upstream symlink path.5/7/2026
chore(hyprland): trim stale upstream commentary Remove the copied example commentary and obsolete disabled notes from the base Hyprland config so the tracked file stays closer to the actual maintained behavior.5/7/2026
fix(macos): avoid Linux desktop assumptions in default profile Stop rewriting Desktop and Downloads on macOS, make antidote resolve from Homebrew paths, install the bc and ranger commands the current shell and tmux configs expect, and keep VS Code disabled until its macOS config path is modeled properly.Repositories by Activity
Total Views