Developer and maker with a weakness for cross-platform. I use React Native and Electron because I'd rather build something once and have it run everywhere, then fill the gaps with Node.js APIs, Vue.js web tools, Swift packages, and whatever the Arduino or 3D printer demands next.
Co-owner at Infinite Token, where most of my professional work lives. My open source components, CLI tools, and side projects live here.
Open to senior full-stack roles (remote) and freelance work — based in Lincoln, NE.
- React Native / Expo — cross-platform mobile apps, UI components, Bluetooth, BLE
- Electron — cross-platform desktop apps
- Node.js / TypeScript — APIs, WebSockets, CLI frameworks, developer tools
- Swift — iOS apps and packages via Infinite Token
- Web — Vue.js interfaces, web utilities, browser tools
- Hardware — Arduino projects, Fusion 360 macros, 3D printing
- Peripherals — receipt and label printers, barcode scanners, cameras
- AI / LLM — OpenAI, Anthropic (Claude), LLM integration, AI-assisted development
- Auth & Security — JWT, OAuth, end-to-end encryption
- Data — MongoDB, PostgreSQL, MySQL, SQLite, offline-first / local-first sync
- Deployment & CI/CD — AWS, Heroku, Vercel, GitHub Actions, npm publishing
- Payments — Stripe, POS systems
- Files & Media — AWS S3, Vercel Blob, images and documents
- App Infrastructure — push notifications, background workers, cron, Redux / React Context
- Testing — unit, integration, and end-to-end
React Native
| Project | Description |
|---|---|
| Expo-Starter | Working Expo starting point with base components pre-configured |
| Expo-Sync | Lightweight SQLite sync engine for Expo — schema management, upserts, deletions, and cursor tracking |
| React-Native-Auto-Paper | Adaptive triadic theming for react-native-paper |
| React-Native-Focus-Chain | Auto-incrementing focus chain hook for React Native form inputs |
| React-Native-Haptic-Press | Haptic pressables for React Native |
| React-Native-Heatmap | GitHub-style activity heatmap for React Native |
| React-Native-Resizable-Input | Resizable multiline input for React Native |
| React-Native-Scanner | Barcode scanner with customizable overlays |
| React-Native-Timer | Animated timer ring for React Native |
| React-Native-Toaster | Animated toast notifications for React Native |
Node.js / CLI
| Project | Description |
|---|---|
| Cosmetic | Chainable ANSI color and style library for Node.js terminals |
| GraPDF | CLI and ESM/CJS package — scrape PDFs from a webpage and merge them into a single booklet |
| Pixelated | CLI and library on npm — pixelate images with 40+ retro palettes, 20+ block shapes, and dithering |
| SnaPDF | CLI and ESM/CJS package — snap ChatGPT and Claude conversations to searchable PDF or plain text |
| TermKit | Fluent CLI framework for Node.js — nested subcommands, middleware, type coercion |
Web
| Project | Live | Description |
|---|---|---|
| GraPDF-Web | grapdf.infinitetoken.com | Web UI for GraPDF |
| MapFolio | mapfolio.infinitetoken.com | Interactive map builder — pins, routes, captions, print-to-PDF, and share links that encode the whole map in the URL |
| Pixelated-Web | pixelated.infinitetoken.com | Browser-based image pixelation tool |
| SnaPDF-Web | snapdf.infinitetoken.com | Web UI for SnaPDF |
| TrimBox | trimbox.infinitetoken.com | Gmail inbox cleaner — scans up to 10,000 messages, surfaces bulk senders, one-click unsubscribe and bulk archive/trash |

