Skip to content
View jayrdeaton's full-sized avatar

Organizations

@infinitetoken @gameroomforpresident

Block or report jayrdeaton

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
jayrdeaton/README.md

Jay Deaton

Senior full-stack engineer: TypeScript, React, React Native / Expo, Node.js. 10+ years building and running the software behind a production buy-sell-trade commerce business.

Open to senior full-stack roles (remote, hybrid, or on-site) and freelance work. Based in Lincoln, NE.

jaydeaton.com · LinkedIn · jayrdeaton@gmail.com · npm (55+ packages) · infinitetoken.com


Professional work

Full-stack engineer and co-founder at Infinite Token since 2016. That code is private, so here's the summary:

  • Core engineer on a 3-6 person team: 6 internal apps (React, React Native, Electron), a central Node/Express API, and databases serving 3 retail locations, 25 staff, and tens of thousands of customers
  • Integrated Shopify, eBay, Google, AWS, and POS hardware into one system
  • Migrated hundreds of thousands of records across databases with zero data loss
  • Led the move to TypeScript, plus Jest testing and org-wide linting standards
  • Built and launched Lumber, an end-to-end encrypted logging service for iPhone, iPad, Mac, Windows, and Linux: a Node SDK, Express and WebSocket servers on Supabase, and a CLI that decrypts logs for AI agents over MCP

Featured

Private projects

The code is private, but I'm happy to walk through the architecture.

  • Lumber (App Store, Microsoft Store): end-to-end encrypted cloud logging for iPhone, iPad, Mac, Windows, and Linux. A Node SDK encrypts each log with AES-256-GCM before it leaves the server, so the Express API, socket.io server, and workers on PostgreSQL (Supabase) only ever hold ciphertext. Each app key is wrapped per user with X25519, and new devices and teammates are confirmed with short codes over CPace. Clients: an Expo app, its Electron build for Mac, Windows, and Linux, and a CLI that hands decrypted logs to AI agents over MCP
  • SlingScan (App Store, Microsoft Store): turns an iPhone into a wireless barcode scanner for a Mac, Windows PC or Linux computer. Scans go straight to the computer over the local network, each WebSocket frame sealed with AES-256-GCM under a key shared by scanning a pairing QR code, and an Electron app types them into the app in front like a USB scanner, through macOS's CGEvent API, Windows' SendInput, X11's XTest, or Wayland's RemoteDesktop portal. The iPhone app is Expo and React Native Paper, with an offline outbox and a StoreKit 2 one-time unlock
  • CashierFu: point-of-sale for small retailers: a Nuxt web app, native iOS and macOS apps in Swift, a WebSocket server, and an Express API with sales and inventory analytics. Each shop connects its own Stripe account to take cards on Stripe Terminal readers
  • CashierFu-Utility: CashierFu's React Native / Expo companion app: shop staff turn products into trackable units, move and audit stock across containers, photograph units for the storefront, and print labels on Zebra Bluetooth printers through native modules. The same codebase also builds against MediaEncyclopedia's API, each backend from its own EAS profile

@tastic: React Native game engine + games

Modular game-engine packages (game loop, physics, input, HUD, sprites, grid, cards, profiles, achievements, split-screen pass-and-play, and the app shell around them) that power my Expo games. PuckTastic (BoxHockey until 2.0) and Swirlio are the first on the App Store, with more games and Google Play on the way. Play the web versions at games.infinitetoken.com.

  • React-Native-Game-Core (@tastic/core): frame-rate-independent game loop, vector math, orientation handling, background pause
  • CardTastic (play): ad-free, offline collection of 20 card games (11 solitaire, 9 for two to four players with CPU opponents) for iOS, Android, and web on a shared TypeScript card engine
  • DuelTastic (play): four duel games in one app (Trap, Turf, Tag and Snake) on the shared game shell, head to head on one phone or against flood-fill and distance-field CPUs
  • Hangman (play)
  • PuckTastic (play, App Store): four tabletop puck games in one app (Box Hockey, Air Hockey, Paddles and Breaker) on one physics engine, with sub-stepped puck physics and CPUs that predict the puck or pick shots by simulating them
  • Swirlio (play, App Store): kaleidoscope toy drawn in Skia with up to 12 mirrored copies, 150 colliding beads simulated on the UI thread, and a mic-driven audio-reactive mode

Live web tools

Project Live Description
MapFolio mapfolio.infinitetoken.com Interactive map builder: pins, routes, captions, print-to-PDF, and share links that encode the whole map in the URL
TrimBox trimbox.infinitetoken.com Gmail inbox cleaner: scans up to 10,000 messages, surfaces bulk senders, one-click unsubscribe and bulk archive
SnaPDF-Web snapdf.infinitetoken.com Snap ChatGPT and Claude conversations to searchable PDF or text
Pixelated-Web pixelated.infinitetoken.com Browser-based image pixelation with palettes and dithering
GraPDF-Web grapdf.infinitetoken.com Scrape PDFs from a webpage and merge them into one booklet

Open source

@rific: Expo / React Native utilities

Package Description
@rific/updater OTA update hook for Expo plus the build and update release CLI
@rific/sync SQLite sync engine for Expo: schema management, upserts, deletions, cursor tracking
@rific/scanner Camera barcode scanner with customizable overlays
@rific/auto-paper Adaptive triadic theming for react-native-paper
@rific/toaster Animated toast notifications
@rific/heatmap GitHub-style activity heatmap
@rific/timer Animated timer ring
@rific/resizable-input Resizable multiline input
@rific/focus-chain Auto-incrementing focus chain hook for form inputs
@rific/feedback-press Haptic pressables
@rific/scroll-view ScrollView, FlatList, and SectionList with blurred floating headers and pull-to-search
@rific/drawer Spring-animated drawers and sheets that slide in from any screen edge
@rific/gestures Swipe-to-dismiss with flicks, and pinch-to-zoom about the fingers, measured in the view's own coordinates
@rific/splash-gate Holds the splash screen until named async conditions are ready
@rific/core Settings Context and Redux slice factories shared by the other packages
Expo-Starter Production-ready Expo starter with Redux, Paper theming, OTA updates, and @rific pre-wired

@tastic: React Native game engine

Package Description
@tastic/core Vec2 math, frame-clamped game loop, orientation handling, background pause
@tastic/physics 2D arcade physics: circle and rect collisions, bounces, friction, gravity wells, springs
@tastic/input Worklet-safe input: swipe and keyboard direction, drag aiming, flick velocity
@tastic/hud Non-modal UI kit for local multiplayer: popovers, pickers, gauges, and dialogs per player zone
@tastic/split-screen Face-to-face or side-by-side two-player layouts based on how the device is held
@tastic/grid Grid math for tile games: bounds, cell/pixel conversion, adjacency, BFS reachability
@tastic/sprites Shared Skia and SVG effects: fireworks, gravity wells, pucks, rink markings
@tastic/cards Playing-card rendering: faces, backs, court figures, suit pips
@tastic/profile Per-seat player profiles with picker and roster screens
@tastic/achievements Headless achievement and stats engine: tiers, per-profile unlocks, streaks
@tastic/edge-guard Config plugin and hook that keep iOS edge swipes from firing over game controls
@tastic/shell The app around a pack of games: Home, loadouts, stats, profiles, settings, and one persisted Redux store, driven by a single pack definition

Node.js / CLI

Package Description
termkit Fluent CLI framework: nested subcommands, middleware, type coercion
cosmetic Chainable ANSI color and style library for terminals
snapdf CLI + ESM/CJS package behind SnaPDF, handling virtual scrolling
grapdf CLI + ESM/CJS package behind GraPDF
pixelated CLI + library: 40+ retro palettes, 20+ block shapes, dithering, ANSI output
reunite · deplace Small macOS terminal utilities

Stack

  • Languages: TypeScript, JavaScript, Python, Swift, Ruby, HTML/CSS
  • Frameworks: React, React Native, Expo, Node.js/Express, Electron, Vue/Nuxt
  • Data: PostgreSQL, MongoDB, SQLite, Supabase, offline-first sync
  • Platforms: AWS, Docker, Vercel, Heroku, GitHub Actions, npm publishing
  • Integrations: REST, GraphQL, WebSocket, Bluetooth, Shopify, eBay, POS hardware, Google & Anthropic APIs
  • Testing: Jest, unit and integration

Off the clock

Arduino projects, Fusion 360 macros, 3D printing, and 6502 assembly games (Snake, LightCycles), playable in the browser at games.infinitetoken.com.

Pinned Loading

  1. Expo-Starter Expo-Starter Public template

    Production-ready Expo starter with Redux, Paper theming, OTA updates, and pre-wired @rific packages.

    TypeScript 1

  2. Expo-Sync Expo-Sync Public

    Generic SQLite sync engine for Expo with schema management, upserts, deletes, and cursor-based synchronization.

    TypeScript

  3. TermKit TermKit Public

    Fluent CLI framework for Node.js. Nested subcommands, middleware, and type coercion.

    TypeScript 1

  4. Pixelated-Web Pixelated-Web Public

    Browser-based image pixelation tool powered by pixelated. Upload, tweak, preview, and export pixel art with palettes, dithering, ANSI output, and real-time controls.

    Vue

  5. PuckTastic PuckTastic Public

    Four tabletop puck games in one app: Box Hockey, Air Hockey, Paddles and Breaker, against the CPU or a friend across the table. Built with Expo and React Native.

    TypeScript

  6. React-Native-Hud React-Native-Hud Public

    Non-modal UI kit for local-multiplayer React Native games: popovers, pickers, gauges, and dialogs scoped to each player's zone.

    TypeScript