About Me

Zachary Hoffman headshot

Hi, I'm Zach Hoffman

Robotics • Intelligent Systems
Computer Science major, Mathematics minor Liberty University

I like building software that interacts with the real world; whether through robotics, game development, or machine learning, I enjoy watching my work come alive.

In my free time, I will likely be golfing, fishing, or working on side projects.

Tech

Python Java C++ React MongoDB Spring Boot ML

Favorite Classes

  • Data Structures & Algorithms
  • Calculus Ⅲ
  • Matrix & Linear Algebra

Experience

Savoye North America

Software Developer Intern
Java React TypeScript Spring Boot Apache Kafka MongoDB Neo4j Redis Docker
  • Developed and maintained distributed microservices used in large-scale automation systems, focusing on event-driven message processing and real-time system coordination.
  • Built simulation tools to emulate hardware behavior and system communication over TCP, enabling testing and debugging without physical equipment.
  • Implemented full-stack features connecting backend APIs with internal web dashboards, allowing engineers to visualize system states and test configurations in real time.
  • Implemented the single sign-on (SSO) service and transitioned it to the Dockerized productions environment.
1 / 4

Chess Robot

Robotics / ML

GitHub
PythonOpenCVPyTorchRaspberry Pi

CAD Design

I designed the model in Fusion 360 and 3D printed it. It has 4 DOF, and it is purposed to hold high torque servo motors and a raspberry pi camera.

CAD Home View

Computer Vision Processing

This is the computer vision process to find the board and derive the playing squares from it.

Raw Camera Image

Piece Classification & Board State

Each square is classified using a custom CNN built in PyTorch to determine piece color (white / black) or empty. I then compare consecutive board states to detect the opponent's move.

  • CNN architecture: input 64x64 square images → 3-class output (white / black / none)
  • Board state is tracked using python-chess, updated after each move detection
  • One limitation is that the current implementation assumes the game begins in standard starting position, which means it can't yet handle arbitrary mid-game setups

Decision Making & Move Selection

I use the Stockfish chess engine to determine the optimal move from the current board FEN.

  • Convert the board state into FEN and feed into Stockfish
  • Parse Stockfish output (best move) → translate into robot motion command
  • Eventually, I want to build my own chess engine in place of Stockfish.

Robotic Arm Inverse Kinematics & Control

Integrated the 4-DOF arm with high-torque metal-gear servos (40 kg-cm - 60 kg-cm) via a PCA9685 PWM driver and Raspberry Pi.

  • Hardware build complete; gearbox & servo mounts designed for strength and repeatability
  • Sadly, this is still a work-in-progress. I have basic servo control working, but the inverse kinematics and pick-and-place routines are not yet finished.

Racing Line Simulation

ML / Simulation

GitHub
PythonPygameNEAT-PythonTkinter

Custom Track Creator

Players can freely draw race tracks using a Pygame interface, enabling completely unique circuits to be built.

  • Mouse-based track drawing with real-time rendering.
  • Brush sizes 1-5 and eraser tool for fine-tuning.
  • Track boundaries are converted into collision masks for the simulation.
Track Drawing UI
Drawing a Custom Track

User Interface & Modes

A control panel built with Tkinter provides sliders and options to switch modes or adjust attributes such as traction, downforce, and weight. Users can watch AI progress in real time.

  • Best Time Mode: AI evolves to minimize lap time.
  • Head-to-Head Mode: Two AI species evolve competitively.
  • Dynamic sliders allow tuning of simulation parameters.
Main Menu

Car Physics & Simulation

The simulation uses a simplified yet realistic car physics model that incorporates traction, downforce, and mass to influence velocity and steering angle. Each car calculates maximum turning capability dynamically at runtime.

  • Physics include traction loss, momentum, and cornering limits.
  • Throttle position directly affects acceleration (not time-based).
  • Downforce and mass control grip and turning radius at higher speeds.

NEAT Evolutionary Learning

The NEAT algorithm evolves neural networks to control cars. Each car receives sensory inputs (velocity, steering angle, distances to walls) and outputs throttle and steering decisions. Fitness is calculated based on lap time and survival.

  • 10 inputs → 2 outputs (throttle, steering).
  • Fitness = Lap speed - crash penalty.
  • Ray casting optimizations allow 300+ population size on my machine.

The simulation can reach 96% of an optimal lap time within ~25 generations.

Results & Insights

Over time, cars learn to brake earlier, accelerate out of corners, and take smooth apexes. Observing the evolutionary process reveals natural emergent driving behaviors similar to real racing strategies.

Racing GIF
Result

The Hoffmans — Wedding Website

Web / Full-Stack

GitHub
ReactTypeScriptTailwind CSSCloudflare Pages

Architecture Overview

The site is a full-stack wedding platform built entirely on the Cloudflare ecosystem, combining Pages, Workers, D1, R2, and Resend for a serverless, globally distributed experience.

  • Frontend: React + TypeScript + Tailwind (Cloudflare Pages).
  • Backend: Workers with REST API routes.
  • Storage: D1 for relational RSVP data and R2 for photo uploads.

RSVP & Guest Management

Guests search by name or family group to find their party. Each member has toggles for attending status, dietary notes, and additional comments.

  • Party-based relational model (Party → Members).
  • FTS5 search indexing for instant lookups.
  • Real-time state updates with optimistic UI feedback.
RSVP GIF
The RSVP Process

Automated Email Workflows

Resend is integrated to send confirmation emails after RSVP submissions and scheduled reminders via a Cloudflare Cron Worker.

  • Custom HTML email templates for confirmation and reminders.
  • Worker cron triggers to re-send follow-up reminders.
  • Automatic thank-you and photo upload notifications.

Admin Dashboard

A private admin portal gated by Cloudflare Access allows managing guest lists, checking RSVP stats, and sending announcements.

  • Dynamic charts showing RSVP rates over time.
  • Editable tables for manual corrections.
  • Integrated email-sending from the dashboard interface.

Deployment & CI/CD

The site deploys automatically on every push using Cloudflare’s GitHub integration. The Wrangler CLI handles database migrations and production configuration.

  • Zero-downtime deploys on Cloudflare Pages.
  • D1 migrations via wrangler commands.
  • Secure environment variables stored in Cloudflare Secrets.

Pawn's Revenge

Games

GitHub
PythonPygame

Game Concept & Design

A 2D wave-style shooter where a pawn defends against spawning chess-piece enemies. Players use collected board labels (letters and numbers) as weapons.

  • Designed as an arcade-style infinite survival game.
  • Combines action mechanics with chess-inspired visuals.
  • Built entirely with Pygame using object-oriented design.

Visual Design & Feedback

The retro aesthetic mirrors board-game nostalgia with pixel-style assets and minimalist effects. Animations and flashes give impact to each throw or hit.

Main Menu

Architecture & Core Systems

The project follows an event-driven structure with distinct classes handling logic, input, and rendering. Each subsystem is isolated for clarity and modularity.

  • GameLoop: handles frame updates, collisions, and wave progression.
  • MainMenu & ControlsMenu: user interface and navigation.
  • Sprites & Textures: manage all graphical assets and animations.
  • UsefulFunctions: utility layer for input, scoring, and collision checks.

Gameplay Mechanics

Enemies spawn in waves that increase in speed and difficulty. The player moves across a board grid, collecting floating letter or number pickups to use as thrown projectiles.

  • Progressive difficulty scaling each round.
  • Player health and score tracking through HUD.
  • Enemy chess pieces each have unique health sizes.