Hello, I'm
Full-stack software engineer with a decade of hobbyist coding experience and a background in industrial maintenance & automation controls.
My name is Johnny Dale. For most of my career, I fixed things you could touch—motors, sensors, control panels, conveyor belts. As an Automation Controls Technician, I learned that every error has a root cause, every system has a pattern, and every fix teaches you something new.
But my curiosity didn't stop at hardware. For over ten years, I've been programming on the side—building web apps, and eventually falling in love with the craft enough to go back for a B.S in Software Engineering. I wanted to understand the whole stack, from the server room to the browser tab.
Now I'm a recent grad who's ready to build software for mission-driven organizations. I bring a rare blend: a technician's hands-on pragmatism, an engineer's systematic thinking, and an abundance of curiosity. I'm confident in my skills, but I'm even more curious about what I'll learn next.
Outside of code, I'm still a tinkerer at heart. Reach out—I'd love to hear about what you're building and how I can help.
Solution. CheckMate uses the front camera as a sensor. A one-time calibration captures your baseline while sober; every later check runs the same 60-second protocol — hold your face inside a detection ring and follow a dot as it orbits the ring — then scores three signals against your baseline: motor steadiness (how still you hold your head inside the ring), pupil response (how accurately your eyes track the moving focal point, a smooth-pursuit task), and blink analysis (blink timing and pattern across the session). A pure TypeScript scoring model blends the three into an overall indicator, and each check records a video you can replay alongside the results.
Technical highlights. Real-time vision on-device with React Native 0.86 on the New Architecture (Fabric) with Hermes — react-native-vision-camera v5 streams frames through native frame processors into Google ML Kit face detection, extracting face geometry and landmarks at frame rate with no server and no image upload. A custom signal model scores three derived metrics against a per-user baseline persisted with AsyncStorage, with pure unit-tested scoring functions (Jest). Sessions record via VisionCamera's CameraX-based video output and play back using react-native-video aligned to Media3 1.9 via a targeted patch-package fix. Production Android engineering includes Kotlin native modules, custom app icon/splash, portrait-locked UI, and a device-density-aware layout system, shipped as a universal release APK (arm64 + arm32) built with JDK 17. Privacy is architecture — the app has no backend by design; the camera stream, analysis, and recorded video never leave the device.
A full-stack Wordle-like word game built with Java Spring Boot and PostgreSQL, deployed to Render. The backend serves a REST API powered by Spring Boot (JPA, Hibernate) with PostgreSQL for stateful storage via Supabase, and an H2 in-memory fallback for local development. The frontend is responsive HTML/CSS/JS with mobile-first design, dark mode, and an iframe-based menu overlay. The game draws from an XLS-backed word seed loader containing roughly 2,300 curated 5-letter words from the official Wordle answer bank, with REST endpoints for random word selection, validation, game stats, and user auth. The application is containerized with Docker, deployed via a Render Web Service with environment-driven PostgreSQL connection config, and uses localStorage-based client-side session management with guest mode support.
Built a single-page interactive world map application featuring click-to-zoom SVG navigation with animated transitions, an IndexedDB-backed client-side data cache, and real-time country metadata display including capital, region, population, area, income level, and flag. Integrated the World Bank API via Angular HTTP services and implemented a responsive side panel UI with loading skeletons, keyboard accessibility (ESC to close), and tooltip hover states. Containerized with a multi-stage Docker build using Node 22 to nginx Alpine.
Built a single-activity Android app with 6 fragments for creating, viewing, editing, and deleting vacations and excursions. Integrated Room (SQLite ORM) for all CRUD operations across two entities (Vacation, Excursion) with DAOs. Implemented date-picker dialogs with business-rule constraints including start date must be today or later, end date must be after start date, and excursions must fall within the vacation window. Added SMS sharing via Intent and real-time date-based alert toasts. Used RecyclerView and CardView for list displays, Material3 theme, and manual fragment transactions for navigation. Compiled to a signed APK and published via a custom landing page hosted on GitLab Pages.
A native Android app that estimates post-drinking impairment from your eye and motor signals — blink timing, smooth-pursuit pupil response, and head steadiness — captured live through the front camera. It runs a personal baseline calibration while you're sober, then compares later checks against it, plays back the session, and does all of it entirely on-device: no account, no uploads, no backend.
A browser-based word puzzle game inspired by the New York Times Wordle. Built as a passion project featuring a clean, intuitive interface where players guess five-letter words with color-coded feedback.
View ProjectAn interactive single-page web application built with Angular. Features an SVG world map that dynamically pulls and displays detailed country data from the World Bank API.
View ProjectA secure, database-backed Android mobile application for vacation planning. Featuring clean navigation, an intuitive user interface, and object-oriented design.
View ProjectI'm always excited to collaborate, innovate, and build meaningful solutions. Whether you have a project, a job opportunity, or just want to connect — let's talk!
Get in Touch