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.
Available for freelance work out of 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, LLM integration
- Auth & Security — JWT, OAuth, end-to-end encryption
- Background Processing — workers, cron jobs
- CI/CD — GitHub Actions, npm publishing
- Data — MongoDB, PostgreSQL, MySQL, SQLite, AsyncStorage, SecureStore, cookies
- Deployment — AWS, Heroku, Vercel
- File Storage — AWS S3, Vercel Blob, local — images and documents
- Maps & Location — geolocation, mapping
- Offline-First — SQLite sync, local-first architecture, incremental sync
- Payments — Stripe, POS systems
- Protocols — SSH, VNC, SMB, FTP
- Push Notifications — mobile and desktop
- Reporting & Analytics — data aggregation, charts, and tables
- State Management — 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 |
|---|---|
| GraPDF | CLI and ESM/CJS package — scrape PDFs from a webpage and merge them into a single booklet |
| SnaPDF | CLI and ESM/CJS package — snap ChatGPT conversations to searchable PDF or plain text |
| TermKit | Fluent CLI framework for Node.js — nested subcommands, middleware, type coercion |
Web
| Project | Description |
|---|---|
| GraPDF-Web | Web UI for GraPDF |
| Pixelated-Web | Browser-based image pixelation tool |
| SnaPDF-Web | Web UI for SnaPDF |
| TrimBox | Scans your Gmail and surfaces unsubscribe links |

