
Hi, I'm Nate!
Book a Coffee ChatAbout
Full-Stack Software Engineer
Tech Stack
Projects
AI/ML Platform
ShotTracker
A basketball shooting analytics app that lets users upload or record training videos. A custom-trained YOLO model analyzes footage to detect makes and misses, then computes shooting statistics including percentage, total attempts, and trends over time.
DECISION LOG
THE CHALLENGE
Needed accurate real-time detection of basketball makes and misses from user-uploaded video footage with varying angles and lighting conditions.
THE TRADE-OFF
Could use traditional computer vision with OpenCV, a pre-trained model, or train a custom YOLO model on basketball-specific data.
THE DECISION
Trained a custom YOLO model from Ultralytics on a basketball shooting dataset.
WHY?
A custom-trained model provides significantly higher accuracy for this specific use case compared to generic models. YOLO's speed allows for efficient video processing while maintaining the precision needed to distinguish between makes and misses.
Productivity Tool
Deep Work Blocker
A practical Deep Work Blocker project demonstrating multi-environment containerization, automated CI/CD pipelines, and production-grade...
DECISION LOG
THE CHALLENGE
Need to block distracting websites during focused work sessions.
THE TRADE-OFF
Could use browser extensions or a standalone desktop app.
THE DECISION
Built a web-based solution with browser integration.
WHY?
A web-based solution allows for cross-platform compatibility and easier updates without requiring users to install browser extensions.
DevOps Platform
Sales Dashboard and Inventory Management System
A practical Sales Dashboard and Inventory Management System project demonstrating multi-environment containerization, automated CI/CD pipelines, and production-grade...
DECISION LOG
THE CHALLENGE
OpenAI API calls can take 10-30 seconds to complete. A standard synchronous API route in Next.js would time out, providing a poor user experience.
THE TRADE-OFF
I considered using webhooks or a background job queue like BullMQ with Redis.
THE DECISION
I chose to implement a serverless-friendly queue system using Inngest.
WHY?
While setting up a separate Redis instance for BullMQ would work, Inngest provides a serverless-friendly solution that integrates seamlessly with Next.js and handles retries, scheduling, and monitoring out of the box. This reduces infrastructure complexity while maintaining reliability.
Sports Platform
DraftScouterHQ
An NBA draft scouting dashboard with detailed player profiles, rankings, stat comparisons, and scouting reports, built to scale across draft classes and data sources.
DECISION LOG
THE CHALLENGE
Need to handle real-time updates across multiple clients.
THE TRADE-OFF
Could use polling, Server-Sent Events, or WebSockets.
THE DECISION
Implemented WebSocket connections using Socket.io.
WHY?
WebSockets provide true bidirectional real-time communication with lower latency than polling and better browser support than SSE for this use case.
Sports Platform
College Basketball Player Development Dashboard
A college basketball development platform that consolidates scraped performance data into actionable insights for player evaluation, progress tracking, and coaching analysis.
DECISION LOG
THE CHALLENGE
Need to handle real-time updates across multiple clients.
THE TRADE-OFF
Could use polling, Server-Sent Events, or WebSockets.
THE DECISION
Implemented WebSocket connections using Socket.io.
WHY?
WebSockets provide true bidirectional real-time communication with lower latency than polling and better browser support than SSE for this use case.
Sports Platform
DailyGolazo
A football data platform that aggregates live standings, match schedules, and video highlights across the top European leagues and major tournaments. Built to handle real-time data, third-party APIs, and clean presentation of frequently updated content.
DECISION LOG
THE CHALLENGE
Need to handle real-time updates across multiple clients.
THE TRADE-OFF
Could use polling, Server-Sent Events, or WebSockets.
THE DECISION
Implemented WebSocket connections using Socket.io.
WHY?
WebSockets provide true bidirectional real-time communication with lower latency than polling and better browser support than SSE for this use case.




