Engineering Manager | Product-minded software leader | Gov-tech, geospatial, and Bitcoin systems
Website | LinkedIn | GitHub | X | Nostr
Three products get almost all of my building time.
|
|
|
| The Word, before the day gets loud. | What to do now, what to log, what to do next time. | The whole quarter, in the room, with or without signal. |
|
Weekday scripture reflections rooted in the Sunday School lesson series. I write it and run the whole pipeline: an MDX publishing flow, an email broadcast to subscribers, and a podcast episode, out every weekday.
Publishing is one gate rather than a checklist. Each devotion lands as a labelled pull request; merging it schedules the subscriber broadcast for 7:00 AM Eastern on the morning it belongs to, so the same review that approves the writing is what sends it. Next.js 16 React 19 MDX Tailwind Cloudflare Workers GitHub Actions
Read it at morningportion.com |
The workout logger I use on the gym floor every training day. It scores the three parts of the plan separately, each in the unit its own guideline uses: resistance days, cardio minutes, and mobility days. The targets sit above the WHO and CDC numbers rather than at them, and each bar carries a tick at the guideline minimum underneath, so a lighter week still shows whether it cleared the standard instead of just reading as a miss.
Underneath that, weekly working sets are counted per muscle group against a 10–12 set band, with back and shoulders flagged as the V-taper priority and core held to a lower band because those bars count direct work only. Progression stays conservative on purpose: it names an exact next load only for machines whose real increment is documented, and effort is recorded only when I actually enter it. Local-first, so it keeps working with no signal and converges to Cloudflare KV through a commutative merge. No framework, no build step, no runtime dependencies. A read-only /api/export endpoint, authenticated by a Cloudflare Access service token and a verified Access JWT, hands the whole training record to my health dashboard and to the agents I analyze it with — which is why the logger never had to grow into a health app.
Vanilla JS PWA Cloudflare Workers KV Cloudflare Access JSON export API Offline-first
Open the demo The live app holds my own training record and stays private. The demo is a separately sanitized build with fabricated data. |
The app I teach from on Sunday morning, on an iPad Mini in a classroom where the signal drops. A service worker precaches the menu and every lesson in the quarter, so the whole thing opens with no network at all. When that is not enough, any single lesson or an entire quarter exports as one self-contained HTML file that opens from the Files app with no service worker involved. That is the backup that cannot fail, and a room full of kids is not the place to find out the cache did.
The menu, the lesson dates, and the badge on this Sunday are generated from the lesson files rather than hand-edited, so adding a lesson is dropping a file in a folder. Each quarter carries an optional meta.json for titles, scripture, and the date of the first Sunday; every other date is derived from that one. No framework and no build step beyond a dependency-free Node script, covered by a suite that runs on node --test.
Vanilla JS PWA Service worker Cloudflare Workers Cloudflare Access node --test Offline-first
Open the demo The lessons are written against paid curriculum, so the real deployment stays behind Cloudflare Access. The demo is the same app carrying three sample lessons written from scratch and none of the curriculum. |
I lead small engineering teams and ship software that solves operational problems for real people. My background spans product engineering, government technology, GIS, and modern web development, with a consistent focus on clarity, execution, and systems that are easier to maintain than the ones they replace.
I am most effective where product, engineering, and delivery overlap: shaping scope, improving team throughput, modernizing legacy workflows, and helping teams move from ambiguity to working software.
- Lead engineering work across planning, delivery, and continuous improvement
- Build product direction with a bias toward user value, maintainability, and measurable outcomes
- Modernize legacy and public-sector systems without losing operational context
- Design and ship web products using TypeScript, React, Next.js, Node.js, and Python
- Work comfortably in GIS and mapping-heavy environments with ArcGIS Online and ArcGIS Pro
- Explore Bitcoin and Lightning-native products with an emphasis on practical utility and self-sovereign tools
- Engineering management for small, high-trust teams
- Product delivery in gov-tech and operationally complex environments
- AI-assisted workflows that improve execution without adding noise
- Bitcoin, Lightning, and local-first software patterns
The three products above get the bulk of my time. These are the rest.
| Project | Summary | Stack |
|---|---|---|
| Field Manual | Open-source Claude Code skill that turns a project into one HTML file you use to drive the agent: decision sections, owner-badged task board, copy-prompt chips, status-sync loop | Claude Code HTML AI agents |
| Personal Site | Portfolio and writing platform with Lightning payments, MDX content, and a strong focus on accessibility and performance | Next.js React TypeScript Tailwind MDX |
| Lightning Tip Jar | Bitcoin tipping experience built around Nostr Wallet Connect for straightforward Lightning payments | Next.js React TypeScript NWC @getalby/sdk |
| Work Time Visualizer | Lightweight Windows taskbar widget showing daily and weekly work-time progress bars, built with native Win32 API | Rust Win32 API Cargo |
| Project | Contribution |
|---|---|
| hubble.md | Three merged PRs to the notepad I use daily: Windows desktop build support (#115), system-follow dark mode (#147), and workspace-switcher cleanup (#196) |
| neon-orbit | Power-ups: repair, Overdrive, and Shield pods (#6) · play it |
| Warp | Repo-picker fix for multi-repo workflows (#9451) |
| Abbot | Core features for the Bitcoin/Lightning bot for Nostr and Telegram |
Work I led has been recognized by Esri, GMIS, and NASCIO:
- Esri Special Achievement in GIS (SAG) Award — 2020
- GMIS G2B Award, Government to Business — GMIS International + Georgia Chapter, 2019
- NASCIO State IT Recognition Award, ICT Innovations — national finalist, 2019
- Legends of Lightning Vol. 2 Hackathon — Community & Education Award, 2023
Full list on my portfolio.
Languages · TypeScript JavaScript Python Swift Rust C# PowerShell SQL
Web · React Next.js Astro Node.js MDX Tailwind CSS Three.js
Platform · Cloudflare Workers KV D1 Vercel Azure Docker
Data & GIS · MS SQL PostgreSQL ArcGIS Pro ArcGIS Online
Bitcoin · Lightning Network Nostr Wallet Connect Nostr
AI tooling · Claude Code MCP servers agent workflows
- Keep teams aligned on the problem, not just the ticket queue
- Prefer simple systems, explicit tradeoffs, and steady delivery
- Use documentation and tooling to reduce repeated coordination cost
- Care about product quality, developer experience, and operational reliability together
I am interested in thoughtful conversations around engineering leadership, product development, civic technology, geospatial systems, and Bitcoin-native software.





